B10. Otočný 3D skener BROB Vedoucí: Adam Chromý Autoři: Jiří Soviš (198589), Miroslav Zelený (192301), Martin Sejkora (195429) V Brně květen 2018
1 Obsah 1 Obsah... 2 2 Seznam obrázků... 3 3 Seznam tabulek... 3 4 Zadání... 4 5 Konstrukční řešení... 4 5.1 Pohony... 6 Easy Driver... 6 Krokové motory NEMA 14... 6 Testovací zapojení pohonů... 7 5.2 Proximitní snímač... 8 Upravení výstupu snímače... 8 Realizace zesilovače... 8 Převodní charakteristika proximitního snímače... 9 6 Řídící program... 10 6.1 Hardwarová část... 10 6.2 Softwarová část... 11 Knihovna RS-232... 11 7 Formát PLY Polygon File Format... 12 7.1 Struktura souboru... 12 7.2 Postup... 13 8 Výsledky... 15 9 Závěr... 18 10 Citace... 19 11 Použitý software... 19 2
2 Seznam obrázků Obrázek 1 - Nákres skeneru... 4 Obrázek 2 - Zpracování Z osy... 5 Obrázek 3 - Výsledná podoba skeneru... 5 Obrázek 4 - Easy driver... 6 Obrázek 5 - Bipolární krokový motor typ NEMA14... 6 Obrázek 6 - Testovací zapojení pohonů... 7 Obrázek 7 - Sharp GP2Y0A41SK0F... 8 Obrázek 8 - Zesilovací člen... 8 Obrázek 9 - Měřecí aparatura... 9 Obrázek 10 - Převodní charakteristika... 9 Obrázek 11 - Program pro obsluhu 3D scanneru... 11 Obrázek 12 - Přepočítávání souřadnic... 11 Obrázek 13 - Spojování vertexů... 14 Obrázek 14 - Points... 15 Obrázek 15 - Wireframe... 15 Obrázek 16 - Flat lines... 15 Obrázek 17 - Rozměr výsledného modelu... 16 Obrázek 18 - Naskenovaná plechovka... 16 Obrázek 19 - První naskenovaný model... 17 3 Seznam tabulek Tabulka 1 - Nastavení mikrokrokování... 6 Tabulka 2 Součástky... 8 3
4 Zadání Sestavte 3D skener s otočným podstavcem a bodovým proximitním snímačem pohybovaným ve směru osy Z. Navrhněte jeho mechanické uspořádání, způsob řízení motorů a získávání dat. Naměřená data zpracujte a vizualizujte v libovolném vybraném prostředí, např. MATLAB. 5 Konstrukční řešení Výsledná podoba skeneru (viz Obrázek 3 - Výsledná podoba skeneru) se mnoho neliší od prvního návrhu (viz Obrázek 1 - Nákres skeneru). Hlavní rozdíl je v podobě Z osy, která měla klouzat na tyčích (principiálně podobný způsob je využíván nejen u 3D tiskáren). Ve výsledné podobě bylo využito výkresových hliníkových profilů, které nám umožnily tyče vynechat. Obrázek 1 - Nákres skeneru 4
K translačnímu pohybu ramena se snímačem je využitá závitová tyč M8, kterou otáčí krokový motor. Obrázek 2 - Zpracování Z osy Obrázek 3 - Výsledná podoba skeneru 5
5.1 Pohony Rozbor použitých součástí (krokové motory, řídící členy a signály). Easy Driver Řídící člen pro bipolární krokové motory. Deska umožňuje mikrokrokování (1/1, ½, ¼, 1/8 kroku) jednoduchým nastavováním logické úrovně na vstupních pinech MS1 a MS2. Pro určení směru otáčení je pin DIR. Pootočení motoru lze dosáhnout signálem z kontroleru, respektive jeho náběžnou hranou přivedenou na pin STEP. Deska umožňuje omezit proud do motoru na 150 ma až 750 ma. Pro naši aplikaci jsme zvolili co nejmenší proud, protože není nevyžadováno velkého kroutícího momentu. Tabulka 1 - Nastavení mikrokrokování Obrázek 4 - Easy driver Krokové motory NEMA 14 Jedná se bipolární typ motoru, počet kroků na otáčku je 200, což odpovídá 1,8 na jeden celý krok. Jsou zde využity dva, jeden pro otáčení podstavy a druhý pro vertikální osu, která zajišťuje translační pohyb Z osy pomocí závitové tyče. Obrázek 5 - Bipolární krokový motor typ NEMA14 6
Testovací zapojení pohonů Pro vytvoření programu (Řídící program) bylo nutné vytvořit testovací zapojení řídících členů, motoru a mikrokontroleru Arduino Nano. V tomto kroku probíhalo seznamování s jednotlivými komponenty, proces programování a následné hrubé odladění. Obrázek 6 - Testovací zapojení pohonů 7
5.2 Proximitní snímač Jako snímač byl zvolen optický snímač Sharp GP2Y0A41SK0F [2] založený na triangulačním principu. Používá infračervenou diodu pro vysílání signálu a PSD detektoru citlivého na polohu osvětlení. Výstupem je analogová hodnota napětí. Měřicí rozsah je výrobcem uveden 4 30 cm, v našem případě využíváme 5-11cm. Uplatňuje se hodně míra osvětlení místnosti. Jelikož má vysílací člen malý výkon, přímé světlo např. z lampičky ovlivňuje funkci. Obrázek 7 - Sharp GP2Y0A41SK0F Upravení výstupu snímače V základním nastavením zůstává nevyužitý rozsah AD převodníku, proto je signál upraven pomocí zesilovacího členu. Zapojení umožňuje nastavit minimální hodnotu vstupního signálu (na R2) ve voltech, při určité vzdálenosti a zesílení. Výstup je omezen zenerovou diodou (5,1 V), aby nedošlo ke zničení převodníku. 5V Obrázek 8 - Zesilovací člen Součástka R1 R2 R3 R4 R5 Potenciometr Hodnota [Ω] 4k7 4k7 4k7 4k7 1k 10k Tabulka 2 Součástky Realizace zesilovače Po proměřování převodních charakteristik bylo zjištěno, že tento člen zesiluje nejen výstupní signál, ale i superponovaný šum. Rozdíl mezi přesností bez zesilovače a s ním byla zanedbatelná, tudíž nebyl tento zesilovací prvek použit. 8
l [mm] Převodní charakteristika proximitního snímače Měřením analogového výstupu snímače byla stanovena převodní charakteristika (viz Obrázek 10 - Převodní charakteristika). Výsledná polynomická závislost 4. řádu je použitá v mikrokontroleru pro převedení naměřeného signálu na vzdálenost v mm. Využíváme měřící rozsah od 50 110 mm. V této části je závislost přibližně ještě lineární. Použitá převodní charakteristika je však zmíněná polynomická. Obrázek 9 - Měřecí aparatura Závislost vzdálenosti od snímače na hodnotě z AD převodníku 160 150 y = 4,80035E-09x 4-9,33659E-06x 3 + 7,00363E-03x 2-2,53379E+00x + 4,43718E+02 140 130 120 110 100 90 80 70 60 50 180,0 230,0 280,0 330,0 380,0 430,0 480,0 530,0 580,0 630,0 Hodnota z AD převodníku Obrázek 10 - Převodní charakteristika 9
6 Řídící program Výsledný systém má dvě složky. První je zastoupena mikrokontrolerem Arduino nano, který řídí veškerý hardware. Nastavuje úhel podstavy, výšku snímače, provádí měření vzdálenosti. Druhou složku tvoří program, běžící na počítači, který přebírá data z kontroleru a dále zpracovává (viz Softwarová část). 6.1 Hardwarová část Spuštění programu se provádí pomocí sériové komunikaci do Arduina se odešle hodnota 1 typu char. Po spuštění proběhne seřízení výšky snímače do počáteční polohy. Indikace nulové výšky se provádí pomocí koncového spínače. Poté se spustí skenování objektu. Pro každý bod se provádí dvacet měření a výsledná hodnota se získá průměrováním. Vzdálenost je získána pomocí rovnice převodní charakteristiky (viz Převodní charakteristika proximitního snímače). Po měření se základna pootočí o daný úhel a měření probíhá znovu. Takto je objekt snímán, dokud se nedosáhne úhlu 360. Poté následuje zvýšení polohy snímače. Naměřené hodnoty se spolu s údaji o úhlu natočení základny a poloze snímače odesílají přes sériovou komunikaci ve tvaru výška(mezera)vzdálenost(mezera)úhel(mezera) Skenování končí na základě jednoho ze tří případů: 1. Naměřená vzdálenost je maximální možná jsme nad objektem. Program neskončí na základě jednoho měření maximální vzdálenosti, například pro případ, kdy je v objektu díra. Pro ukončení programu je nutné, aby se naměřilo alespoň 15 hodnot maximální vzdálenosti. V tomto případě se po sériové komunikaci odešle hodnota -1. 2. Dosáhneme maximální možné výšky snímače. Tato poloha je indikována horním koncovým spínačem. Odesílá se hodnota -2. 3. Tlačítko pro okamžité ukončení programu pomocí stop tlačítka je program ukončen a odesílá se hodnota -3. Po ukončení je možné opět spustit skenování a celý proces se opakuje. 10
6.2 Softwarová část Hlavní řídící složka celého systému 3D skeneru. Program nefunguje od začátku až do konce autonomně. Má tři možnosti, které může provádět (viz Obrázek 11 - Program pro obsluhu 3D scanneru). Obrázek 11 - Program pro obsluhu 3D scanneru Měření (1. varianta) se započne odesláním znaku 1 po sériové lince a započne celý proces snímání (Hardwarová část). Program se přepne do režimu naslouchání, kdy přebírá znaky ze sériové komunikace a ukládá je do souboru ve formátu, v jakém je přijal. Měření končí po přijetí některého z ukončovacích znaků. Převedení naměřených dat do formátu kartézských souřadnic xyz (2. varianta) probíhá čtením dat z kroku měření, převedením (viz Obrázek 12 - Přepočítávání souřadnic) a následným uložením do druhého souboru (*.xyz) ve tvaru x(mezera)y(mezera)z(mezera). Tento formát již lze otevřít v programech typu MeshLab. Obrázek 12 - Přepočítávání souřadnic Převedení dat do PLY (3. varianta) je blíže popsaná v kapitole Formát PLY Polygon File Format. Knihovna RS-232 Knihovna [3], která nám umožňuje používat rozhraní RS-232. Publikováno pod licencí GPL verze 3. Funkce, které byly použity v programu, jsou následující: int RS232_OpenComport(int comport_number, int baudrate, const char * mode) o otevře vybraný port int RS232_PollComport(int comport_number, unsigned char *buf, int size) o uloží do pole načtené znaky a vrací číselnou hodnotu počtu načtených znaků void RS232_cputs(int comport_number, const char *text) o odešle po lince pole znaků void RS232_CloseComport(int comport_number) o zavře požadovaný port 11
7 Formát PLY Polygon File Format Po naměření dat je nutno nějakým způsobem zpracovat do formátu, ve kterém by se daly zobrazit, jako 3D objekt. Byl nám doporučen formát PLY vzhledem k jeho jednoduché struktuře. Formát PLY je souborový formát určený pro ukládání grafických objektů. Umožňuje uložit 3D objekty popsané souborem polygonů. Původně byl tento formát určen k ukládání dat z 3D scannerů. Cílem jeho vývoje bylo vytvořit formát, jenž se bude snadno implementovat a zároveň bude dostatečně obecný a jednoduchý pro široké využití při ukládání 3D modelů. Formát PLY popisuje objekt jako soubor bodů v prostoru (vertex), ploch (jejichž vrcholovými body jsou právě ony vertexy) a dalších prvků spolu s vlastnostmi, jako je barva a směr normály, které lze k těmto prvkům přiřadit. Soubor PLY obsahuje popis právě jednoho 3D objektu. 7.1 Struktura souboru Soubor PLY začíná hlavičkou: Header Hlavička se skládá z několika řádků textu, které popisují, co se nachází ve zbytku souboru. Hlavička obsahuje popis každého typu prvku, který se v souboru objevuje, počínaje názvem prvku (např. face ), kolik takových prvků je v souboru a seznam jejich vlastností. V hlavičce je také uvedeno, zda je soubor binární nebo ASCII. Může obsahovat též komentář. Hlavička určuje, kolik vrcholů a mnohoúhelníků je v souboru, uvádí také, jaké vlastnosti jsou přiděleny každému vrcholem, jako jsou souřadnice (x, y, z), normály a barvy. Plochy/polygony jsou popsány seznamem indexů bodů tvořících jejich vrcholy, a každý seznam začíná počtem bodů v každém polygonu. Po hlavičce následuje výčet vrcholů a následně výčet polygonů, poté popřípadě výčty ostatních prvků. Hlavička je ohraničena klíčovými slovy pro začátek ply a pro konec hlavičky end_header. Po začátku hlavičky následuje klíčové slovo formát a specifikace použitého formátování (ASCII, binární formát, pořadové číslo verze formátu). Níže je uveden příklad pro krychli. Komentáře ve složených závorkách jsou vysvětlivky ke kódu, ty nejsou součástí výsledného kódu. ply format ascii 1.0 comment author: Greg Turk { vynálezce tohoto formátu/ komentář} comment object: cube { se jménem autora a popisem objektu } element vertex 8 property float x property float y property float z property uchar red { začátek barev bodů } property uchar green property uchar blue element face 7 { počet bodů } property list uchar int vertex_index { počet vrcholů ploch } element edge 5 { počet hran v souboru } property int vertex1 { index prvního bodu hrany } property int vertex2 { index druhého bodu hrany } 12
property uchar red { začátek barev hran } property uchar green property uchar blue end_header 0 0 0 255 0 0 { začátek výčtu bodů } 0 0 1 255 0 0 0 1 1 255 0 0 0 1 0 255 0 0 1 0 0 0 0 255 1 0 1 0 0 255 1 1 1 0 0 255 1 1 0 0 0 255 3 0 1 2 { začátek výčtu ploch, počínaje trojúhelníkem } 3 0 2 3 4 7 6 5 4 { toto je definice čtverce } 4 0 4 5 1 4 1 5 6 2 4 2 6 7 3 4 3 7 4 0 0 1 255 255 255 { začátek výčtu hran } 1 2 255 255 255 2 3 255 255 255 3 0 255 255 255 2 0 0 0 0 { konec } 7.2 Postup Vstupem je soubor, obsahující nasnímané body v kartézské soustavě souřadnic xyz. Body se načtou a uloží do polí. Tyto pole se dále předávají jako parametry funkce pro vytvoření formátu PLY, spolu s dalšími parametry: počet snímaných bodů na otáčku a počet bodů celkově a název výstupního souboru. Tato funkce plycreator (viz program v příloze) vytváří soubor formátu PLY. Nejprve vytvoří hlavičku (viz kapitola Struktura souboru), kterou doplní o informace odpovídající předaným parametrům. Poté postupně vypíše souřadnice všech nasnímaných bodů v pořadí, jak byly nasnímány. Následuje seznam, kde jsou tyto body spojeny do polygonů, v našem případě trojúhelníků, jak je znázorněno na Obrázek 13 - Spojování vertexů. Spojování probíhá tak, že je na jednom řádku vypsán nejdříve počet bodů v polygonu, a pak jsou vypsány indexy spojovaných bodů, které se řídí podle pořadí, kdy byl tento bod na začátku vypsán v seznamu všech bodů. Výsledný soubor se dá otevřít ve většině 3D grafických programů. 13
Obrázek 13 - Spojování vertexů 14
8 Výsledky Bylo provedeno několik experimentálních měření. Výsledné naskenované předměty se blíží k reálným předmětům. Obrázek 14 - Points Obrázek 15 - Wireframe Obrázek 16 - Flat lines 15
Změřené rozměry naskenovaného modelu se blíží k modelu reálnému. Naskenovaný předmět měl průměr 100 mm, na obrázku (Obrázek 17 - Rozměr výsledného modelu) je změřený průměr 100 mm. Obrázek 17 - Rozměr výsledného modelu Na obrázku (Obrázek 18 - Naskenovaná plechovka) je demonstrace reálného modelu, naskenovaného modelu, naskenovaného modelu po použití vyhlazovacího filtru. Výška modelů zde není způsobena skenováním nýbrž poruchou při tisku (ucpala se tryska) na 3D tiskárně, tudíž na výšku předmětu nelze brát ohled. Parametry skenování: počet snímání na otáčku: 80, posun v Z ose 4 mm. Obrázek 18 - Naskenovaná plechovka 16
První naskenovaný model (Obrázek 19 - První naskenovaný model) ukázal limity našeho skeneru. Ty jsou takové, že nelze skenovat předmět, který má hodně složitý povrch a že záleží z jakého materiálu je předmět vyroben. Při skenování se zaseklo měřící rameno, proto se muselo skenování předčasně ukončit. Výška zeleného naskenovaného modelu je tedy menší. Obrázek 19 - První naskenovaný model 17
9 Závěr I když je princip skeneru je jednoduchý, jeho realizace byla poměrně obtížná, zvláště ve výběru a opatření cenově dostupných materiálů pro konstrukci. Proto jsme si také některé součásti konstrukce navrhli a vytiskly na 3D tiskárně. Při realizaci skeneru jsme se museli vypořádat s řadou vzniklých problémů. Chyby v kódu, které nebylo snadné zoptimalizovat, nepřesnost výtisků, samotný návrh konstrukce (viz Obrázek 3 - Výsledná podoba skeneru), apod. Po sestavení a prvním skenování se projevila nepřesnost samotného snímače, která také závisí nejen na kvalitě snímače (cena snímače se pohybuje okolo 200-300Kč), ale i na materiálu, ze kterého je snímaný předmět vyroben. První pokus nedopadl moc dobře, kdy výsledný model nepřipomínal reálný předmět (viz Obrázek 19 - První naskenovaný model), ale to jsme do jisté míry přepokládali. Další pokusy u předmětů jednodušších tvarů dopadli podstatně lépe a již vypadají jako snímaný předmět (viz Obrázek 18 - Naskenovaná plechovka). 18
10 Citace [1] Paul Buourke: formát PLY [online]. [cit. 2018-05-02]. Dostupné z: http://paulbourke.net/dataformats/ply/ [2] Proximitní snímač Sharp. POLOLU [online]. [cit. 2018-05-02]. Dostupné z: https://www.pololu.com/file/0j713/gp2y0a41sk0f.pdf [3] Teuniz: Knihovna RS232 [online]. [cit. 2018-05-02]. Dostupné z: https://www.teuniz.net/rs- 232/index.html 11 Použitý software Arduino IDE 1.8.5 MeshLab v. 1.3.4BETA Microsoft Studio 2017 Repertier-Host Autodesk Fusion 360 Solidworks 19