Zdravím, opět musím zopakovat své poděkování za velmi hezky
psané série článků.
Co se týče software, tak zde přidám svojí již spíše odloženou
hračku/trošku do mlýna, XY HPGL viewer a interpreter pro systém
s krokovými motory, který běhal pod DOSem.
Je to projekt velmi starý, již dlouho neinovovaný, ale implementuje
množství zajímavých vlastností, které by se Vám mohly hodit.
Umí většinu běžně používaných příkazů HPGL, umí libovolné
skládání transformačních matic, přitom výsledek zároveň vždy
přepočítá pro zrychlení vykreslování do jedné matice.
Protože kód běžel na velmi pomalém stroji, byl kód psán tak,
aby nepotřeboval plovoucí aritmetiku.
HPGL také definuje/původně definovalo rozlišení čísel jako 1/1000.
Čísla jsou pak udržována ve formátu s pevnou desetinnou čárkou
(0.001). Práci s tímto typem je nadefinována C++ třída a operátory,
takže se s formátem pracuje bez nutnosti nad jeho vlastnostmi přemýšlet.
Kód lze při použití současných výkonech desktopových procesorů
převést na double. Na druhou stranu 1/1000 není soudělitelná
s dvojkovým vyjádřením necelých čísel a při dlouhých sekvencích
relativních pohybů může dojít ke kumulaci absolutních chyb.
Pro malá embedded zařízení je použitá aritmetika výhodná i dnes.
Kód je bohužel místy závislý na BC a 386 assembleru. Především
Kód umí výstup vykreslovat přes BGI drivery na obrazovku pod DOSem
nebo může být výstup interpretovaný krokovým motorem připojeným
na paralelní port. Je implementován i výstup textů přes BGI fonty.
Například šlo vypsat HPGL vytisknuté z Wordu v Gotice.
Při skládání úseků je použita třícestná optimalizace, která dovolí projíždění
hran se zpomalením omezeným pouze požadavkem na maximální krok
rychlosti v jedné ose a výpočtem zpomalení přes všechny zbývající úseky
tak, aby se v posledním bodě trajektorie, nebo v místě PEN UP/DOWN
dokázaly motory zastavit.
Rozšířená n-rozměrná verze této optimalizace s možností pohybu
po křivkách zadaných polynomy je použita i ve firmware
jednotek MARS8. Ty ovšem nepracují s krokovými motory,
ale s výkonnými regulátory a servy
Kód XY HPGL jsem již před časem uvolnil pod GPL a alternativně
i velmi volnou licencí, která za podmínky, že budou vylepšení do projektu
vrácena, umožňuje i jeho použití v uzavřeném firmware různých zařízení.
Udělal jsem to kvůli jednomu našemu studentovi, který chtěl psát
placený SW pro řízení plotterů. Nikdy se mi potom již neozval.
Na Web kód dávám jako reakci na Vaše články, protože přece jenom
obsahuje o něco více funkcionality, než ten základní výukový příklad
a zbytečné vynalézání kola se mi často zdá jako mrhání lidskou energií.
Na druhou stranu je někdy z hlediska výuky nutné pro evoluci nových
programátorů.
Co se týče již předchozích příspěvcích zmíněné slušnosti některých lidí
a firem a jejich vztahu k opensource, tak je situace velmi mrzutá. Mám s takovými
lidmi, jejich úzkoprsostí a podrazy osobní velmi špatné zkušenosti, a to často
přímo v místních luzích a hájích. Přitom na druhou stranu mezi rozumně uvažujícími
lidmi opensource funguje a je velmi výhodným způsobem spolupráce,
který nevyžaduje ztrácet většinu času nesmyslnými právními kličkami
a znovuvymýšlením kol. Je ovšem potřeba, aby si komunita pamatovala
ty, co nerespektují pravidla ( http://gpl-violations.org/ ) a ignorovala je
v případech, kdy žádají o další pomoc a čas, za který od nich nelze očekávat
žádný příspěvek ani slušnost, že uvedou, že dostupný kód použili. Měl jsem
chuť zde uvést pár takových jmen, která zaslouží ban, ale kolega, jehož
si vážím se jich zastal. Ti jedinci si to nezaslouží, ale zatím jejich zveřejnění
odložím.
Pokud by měl někdo ze studentů na ČVUT zájem dělat diplomovou
nebo bakalářskou práci v této oblasti, tak tak ho rád povedu.
Pokud kód použije kdokoliv jiný a bude respektovat nabídnuté podmínky
a třeba něčím přispěje tak mě to jen potěší. Rád bych přislíbil i svojí pomoc,
ale vzhledem k nedostatku času mohu nabídnout jen to, že když mi zbude
čas, tak se pokusím odpovědět na případné dotazy.