Projekt 12″

Luděk H↻ 16. 11. 2020

Modulární systém ovládání víceosých posuvů II

137μGUN
Luděk H

Po několika měsících se mi konečně povedlo prokousat sto dvaceti osmi snímky první animované produktovky, tedy s možností rotace ve svislé ose o 360°. Byl to nápad na poslední chvíli, takže focení víc než provizorní včetně narychlo připravené metrové točny z dřevotřísky.

Aneb μGUN vlastního návrhu s ručně zpracovanými profily. Převážně použitý byl hliník tvaru L, 120x80x10 a horní prstence držící tubus jsou z trubky 100x10. Opracované díly z hliníku AW 6060, o váze cca 10.5 kg, jsem nakonec nechal tvrdě eloxovat.

Určeno pro profocování metodou stack and stitch, tedy s možností profotit do hloubky více míst v ploše. Ne jen jedno místo jako u běžného posuvu pro skládané makro nebo mikro. Umožňuje to v tomto případě tříosý posuv. Rozsah posuvů je cca 35 mm v každé z těchto tří os. Tedy možnost profotit "objem" až 35x35x35 mm. Primárně byla sestava připravena pro mikroskopický objektiv se zvětšením 20x, se záběrem velikosti cca 1.7mm x 1.1 mm, to znamená možnost profotit objekt klidně až mnoha statisíci snímků. To už je takové množství, že by 35mm rozsah posuvů neměl být nikdy omezující. K omezení by mohlo dojít jedině tehdy, že by se použil mikroskopický objektiv s mnohem menším zvětšením.

V budoucnu ještě uvažuji o rozšíření počtu os přidáním dalších dvou až tří (rotace, klopení, výtah) na přední část zařízení, pod upnutí scény. Takto by se mohly možnosti rozrůst na focení miniaturních předmětů ze všech stran, což by přidalo možnost detailní 3D vizualizace nafoceného objektu, a to ať už na obrazovce nebo třeba vytištěním na 3D tiskárně.

137Již je tomu pomalu rok, co spolehlivost vykonávání příkazů spadla na nulu. Co REST požadavek, to následoval pád HTTP služby se signálem SIGSEGV. Bylo to docela nečekané, ale jak jsem byl velmi spokojený se spolehlivostí Raspberry Pi 3B+, tak najednou přišlo takové jako by vystřízlivění, až zděšení. První co mě napadlo vyzkoušet bylo, zda-li není problém v SD kartě. Trefa, problém nalezen hned na první dobrou.

SD karta vydržela asi rok, kdy navíc nebyla až tolik zatěžovaná. To není únosná spolehlivost vzhledem ke způsobu používání, a tak musím zvolit jiné řešení.

Změn oproti původnímu článku je ovšem víc, včetně rozšíření možností způsobů krokování.

V prvním článku o modulárním systému jsem zmínil zálohu obrazu SD karty, ale to jsem netušil, jak brzy nastanou s SD kartou problémy při zvoleném způsobu používání. V závislosti na četnosti používání by v konečném důsledku bylo například co půl roku potřeba pořídit novou kartu. Místo toho už se vyplatí použít raději externí úložiště připojené přes USB port. Mít data a systém třeba na flash disku připojeném přes USB je od verze Raspberry Pi 3B+ bezproblémové. I tak jsem si prošel přes problémy, kde jsem nejprve chtěl využít SSD disk přes adaptér. Nedařilo se tak jak bych potřeboval, takže nakonec volba zůstala u rychlého flash disku.

Druhý problém, kterého jsem si nejdřív nevšiml, byl v podstatě díky použití frameworku Ulfius. Jedna služba naslouchající na jednom portu využívala naplno jedno jádro. Protože jsou obsluhovány tři osy a tři služby tak naslouchaly na třech portech, hned bylo Raspberry Pi 3B+ vytížené téměř na sto procent procesorového výkonu. To není únosné pro stabilní chod, a tak bylo na řadě další rozhodování co s tím. Nabízí se například udělat si vlastní jednoúčelový HTTP server. Pro daný účel je to rozhodně možnost, kterou bych měl zkusit jako jednu z prvních, protože bude k systémovým prostředkům nejohleduplnější. Druhá možnost je zbavení se mezivrstvy Ulfius a využít knihovnu, kterou používá i samotný Ulfius, tedy GNU Libmicrohttpd. Tato knihovna má mezi klíčovými vlastnostmi i možnost vytvoření HTTP serveru naslouchajícího na více portech, co je právě to, což se hodí pro výsledné řešení. Výsledkem by pak byla místo tří služeb služba pouze jedna, obsluhující tři porty a spouštějící potřebné krokovací programy pro všechny tři osy dle portu, na kterém obdrží ovládací příkaz.

Nakonec jsem nejprve zkusil vytvořit vlastní úzce zaměřený HTTP server, který slouží pouze a jen ke zpracování několika REST požadavků ovládajících krokování. Naopak tedy nemá spousty dalších možností, jaké nabízel dříve využitý framework Ulfius. Řešení funguje velmi spolehlivě. Navíc jsou pro tři osy běžící tři služby při pouhém naslouchání na třech portech v podstatě s nulovou náročností na procesorový čas.

Program webové služby (jazyk C, soubor uhttprest.c a hlavičky axis1.h, axis2.h a axis3.h)

Obdoba kapitoly z prvního článku, jen zde již po novu není vytvořena z příkladového programu simple_example.c, který byl součástí frameworku Ulfius, ale tentokrát je to samostatný a jednoduchý nový program uhttprest.c, kdy k instalaci již není nutné stahovat nic, co by v systému (nově) Raspberry Pi OS nebylo přibaleno. Na instalaci stačí z adresáře Uhttprest spustit soubor Makefile příkazem:

sudo make

Přípustné příkazy jsou v podstatě stejné, jako u předešlé verze postavené na frameworku Ulfius. Hlavní rozdíl je mizivá náročnost na procesor a navíc je zde i několik nových příkazů pro eliminaci vůle při změně směru posuvu.

Povoleny jsou tyto příkazy: /forward, /backward, /pos, /zero, /stop, /shutdown a nově ještě /laxforward a /laxbackward

Nové příkazy s předponou lax fungují stejně jako příkazy bez této předpony - spouští krokování vpřed nebo vzad, pokud aktuálně žádné krokování neběží. Pokud aktuálně v dané ose nějaké krokování běží, příkazy nejsou provedeny a vrací o tomto informaci v podobě textu NO. Rozdíl u lax příkazů je hlavně ten, že provedené kroky nejsou započítávány do souboru relativní pozice. Po jejich dokončení je obsah souboru relativní nakrokované pozice stejný, jako před spuštěním těchto příkazů.

K novým příkazům je připravena i změna v programu pro krokování zároveň s novým programem pro jalové (nezapočítané - lax) krokování.

V průběhu roku jsem byl navíc požádán o vytvoření příkladu na používání mého ovládání přes lokální síť pomocí HTML (JavaScript) stránky. Pro ten účel bylo potřeba udělat malou úpravu webové služby, aby tento způsob použití byl ve webovém prohlížeči povolen. Povolení je dáno nastavením v hlavičce odpovědí:

Access-Control-Allow-Origin: *

Krokovací programy (jazyk C, soubor steps.c, free.c a hlavičky axis1.h, axis2.h a axis3.h)

Již zmíněné změny se týkají i krokovací části ovládání. Přidal jsem nový program, obdobu původního, pro jalové krokování free.c. Pro sestavení stále stačí spustit Makefile z adresáře Steps příkazem:

sudo make

A tím je připraveno vše potřebné. Soubory pos*.txt byly slabinou v případě použití SD karty, protože bylo na kartě přepisováno stále stejné místo a brzy tak došlo k jeho opotřebení. V případě použití USB paměťového zařízení je fyzické místo ukládání souboru řízeno samotným USB zařízením, a tak k opotřebování stále stejných paměťových buněk nedochází. V případě krokovacích programů tedy zůstává logika zachována, je u nich i nadále potřeba mít v systému přidanou knihovnu pro ovládání GPIO portu knihovna pro BCM 2835 a je možné krokovat buď se změnou pozice v souboru pos*.txt, nebo beze změny, např.:

sudo steps1 1000 1 500 0
sudo free1 1000 1 500 0

Instalace služeb (soubory httprest1.service, httprest2.service a httprest3.service)

Nové soubory jsou připraveny také pro instalaci služeb do systému. Zkusil jsem přidat trochu jiná nastavení, ale hlavně jsou v těchto souborech uvedeny nové názvy uhttprest.

Pokud se v systému nachází běžící předešlé verze služeb, je nejprve třeba provést jejich zastavení a zakázání:

sudo systemctl stop httprest1.service
sudo systemctl disable httprest1.service

sudo systemctl stop httprest2.service
sudo systemctl disable httprest2.service

sudo systemctl stop httprest3.service
sudo systemctl disable httprest3.service

Pro nové verze služeb je postup vložení a instalace do systému stejný jako v předchozím článku:

sudo cp httprest1.service /usr/lib/systemd/system/httprest1.service
sudo cp httprest2.service /usr/lib/systemd/system/httprest2.service
sudo cp httprest3.service /usr/lib/systemd/system/httprest3.service

A spuštění:

sudo systemctl enable httprest1.service
sudo systemctl start httprest1.service

sudo systemctl enable httprest2.service
sudo systemctl start httprest2.service

sudo systemctl enable httprest3.service
sudo systemctl start httprest3.service

Připravené programy v ZIP archivu dávám opět k dispozici ke stažení pod licencí GPL. Tentokrát vše v jednom zip archivu pohromadě.

Praktický příklad využívající navržený systém

Našel se jeden zájemce, alespoň o kterém vím, který tento systém dle návodu z prvního článku chce používat. Sám mám pro ovládání vytvořenu WPF aplikaci pod Windows. Ta navíc využívá Canon SDK a umožňuje s ovládáním os ovládat také fotoaparát. Ale k posílání REST příkazů stačí doslova jen jednoduchá HTML stránka. Nebo alespoň jednoduše se tvářící. A tu jsem připravil pro příklad ukázky "jak na to". Při dotazech jsem dostal screenshot aplikace od WeMacro, a tak jsem připravil HTML/JavaScript/CSS stránku v tomto duchu, aby bylo při jejím použití snadnější pochopit co a jak funguje a snadněji šlo udělat i nějaké změny a přizpůsobit si ovládání dle osobních preferencí.

Opět dávám příklad ke stažení.

Zdrojové soubory použité v článku

zip   •   example.zip

Zazipovaný HTML soubor s příkladem ovládání posuvů

ZIP soubor obsahuje HTML stránku, která poskytuje jednoduché rozhraní k ovládání posuvů přes zasílání HTTP REST příkazů.

zip   •   all_from_pi_new.zip

Nové zdrojové kódy modulárního systému ovládání

Balíček programů kolem krokování pomocí Raspberry Pi přes HTTP REST příkazy.

Zařazení pod klíčové výrazy

Fototechnika: 20X Mitutoyo Plan Apo Infinity Corrected Long WD Canon EOS 5D Mark IV Elinchrom ELC Pro HD 1000 Raynox DCR-150

Kategorie: Dokument Mikro (při zvětšení nad 30:1 po 10:1) Technika Zátiší Zlepšovák

Projekt: 3D Mikro CNC

Záznamové médium: 24x36 mm digi (FF)