Obsah:

Laserový skener Raspberry Pi: 9 kroků (s obrázky)
Laserový skener Raspberry Pi: 9 kroků (s obrázky)

Video: Laserový skener Raspberry Pi: 9 kroků (s obrázky)

Video: Laserový skener Raspberry Pi: 9 kroků (s obrázky)
Video: Things Mr. Welch is No Longer Allowed to do in a RPG #1-2450 Reading Compilation 2024, Listopad
Anonim
Image
Image
Laserový skener Raspberry Pi
Laserový skener Raspberry Pi

Laser Scanner je zařízení s integrovaným systémem Raspberry Pi, které dokáže digitalizovat objekty do souborů.obj pro reprodukci pomocí 3D tisku. Zařízení toho dosahuje využitím liniového laseru a integrovaného PiCam k provádění počítačového vidění. Laser je umístěn šikmo 45 stupňů od laseru a promítá jasně červenou čáru na jeden svislý řez objektu. Fotoaparát detekuje vzdálenost řezu od středu a vytvoří plátek sítě. Předmět se odstředí na otočném podnosu a postup se opakuje, dokud není naskenován celý předmět. Vygenerovaný soubor.obj je nakonec odeslán e -mailem uživateli, čímž je systém plně samostatný a integrovaný.

Tento Instructable vás provede postupem, jakým bylo zařízení postaveno, některými výsledky a budoucími kroky.

Krok 1: Inspirace

Inspirace
Inspirace
Inspirace
Inspirace

Jako vášnivý výrobce se 3D tisku a solidnímu modelování věnuji již několik let. Pracoval jsem se spoustou různých prototypovacích nástrojů od CNC routerů přes laserové řezačky až po 3D tiskárny. Jedno zařízení, které si můj místní tvůrce musí ještě koupit, byl 3D skener - a já vám řeknu, proč.

Ty levnější (několik stovek dolarů) byly nespolehlivé, vyžadovaly perfektní podmínky a stále přinášely dost ošuntělé výsledky. Ty drahé byly … no, drahé, pohybovaly se až do několika tisíc dolarů, takže jeho funkce v mnoha případech nestála za to. Kromě toho jsem se vícekrát rozhodl provést měření a navrhnout model od nuly, než se zabývat povrchovou sítí generovanou skenováním.

Z tohoto důvodu jsem chtěl vybudovat samostatný rozpočtový skener, abych zjistil, jak dobře mohu skenovat objekt pomocí komponent mimo polici.

Poté, co jsem provedl nějaký průzkum, viděl jsem, že mnoho 3D skenerů využívalo k vytvoření rotačního modelu rotační platformu a poté řadu různých senzorů k měření vzdálenosti od středu. Mnoho z nich používalo duální kamery podobné kamerám Kinect. Nakonec jsem narazil na Yscanner, což je skener s nízkým rozlišením využívající laser. Při pohledu na jednoduchost a proveditelnost vypadala tato laserová technika, ve které je laser vyzařován offset vzhledem k fotoaparátu pro měření vzdálenosti od středu, jako jasná cesta vpřed.

Krok 2: Nástroje a součásti

Díly:

  • Raspberry Pi 35,00 USD
  • Raspberry Pi Camera V2 30,00 $
  • LED diody, odpory a dráty
  • Vlákno pro 3D tisk
  • Desky dřeva 12x12x0,125
  • Hardware M3
  • Krokový motor - 14 $
  • Čárový laser - 8 $
  • Ovladače krokových motorů LN298 - 2,65 $
  • Kovové tlačítko - 5 $

Nástroje:

  • Páječka
  • Laserová řezačka
  • 3D tiskárna
  • Šroubovák
  • Kleště

Krok 3: Design na vysoké úrovni

Design na vysoké úrovni
Design na vysoké úrovni
Design na vysoké úrovni
Design na vysoké úrovni

Ústřední součástí tohoto návrhu je čárový laser, který promítá na svislý řez objektů. Tuto projekci bylo možné zachytit na pikameru, upravit její perspektivu a poté filtrovat před zpracováním obrazu. Při zpracování obrazu bylo možné sbírat vzdálenost mezi každým segmentem čáry od středu objektu. V radiálních souřadnicích by tento obrázek poskytl komponenty r a z. Třetí dimenze, Θ, je pak dosaženo otočením objektu na nový řez. Tento koncept je znázorněn na prvním obrázku.

K provedení výše popsaných akcí jsem použil Raspberry Pi jako naši centrální výpočetní jednotku. K Pi jsem připojil krokový motor a ovladač motoru, napájený externím 5V napájením a ovládaný GPIO piny Pi. Na linku 3,3 V na Pi byl nasazen čárový laser a ke vstupu kamery na Pi byl připojen PiCam. Nakonec bylo nainstalováno jednoduché stažené tlačítko a stavová LED dioda indikující uživateli, v jakém stavu se systém nachází. Celý systém je shrnut v blokovém schématu systému.

Od začátku bylo plánováno umístění elektroniky do laserem řezaného boxu drženého pohromadě s T-sloty a hardwarem M3. Elektronika by byla skryta před zraky ve spodní přihrádce a víko by umožňovalo snadný přístup k umístění předmětů na otočný podnos. Toto víko je nezbytné k minimalizaci množství světla, které uniká do systému, protože toto vnější světlo může při konečném skenování vytvářet hluk.

Krok 4: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Jak je vidět výše, než jsem začal řezat laserem nebo 3D tisk, použil jsem Autodesk Fusion 360 k vytvoření podrobného 3D modelu našeho návrhu. Pro přehled je zařízení jednoduchá krabice s víkem s laserem řezanými závěsy. Existují dvě hlavní vrstvy zařízení: lůžko elektroniky a hlavní lůžko s otvory pro vedení vodičů mezi oběma vrstvami.

Většina našeho boxu byla vyrobena laserovou řezačkou, přičemž designy byly vyrobeny ve Fusion 360 a řezány na laserové řezačce Epilog Zing 40 W. Naše návrhy jsou uvedeny na obrázcích výše. Pohybující se vpravo nahoře jsou hlavní postel, postel s elektronikou, dva kusy pro víko, zadní díl, přední díl a dva boční díly. V hlavním lůžku jsou tři hlavní výřezy: jeden pro montáž krokového motoru, jeden pro vedení vodičů z laseru a jeden pro vedení širokého kabelu PiCam. Lůžko má montážní otvory pro zajištění Pi, prkénka a ovladače motoru a větší výřez pro přístup k krokovému motoru. Kusy víka k sobě jednoduše zapadnou a vytvoří trojúhelníkový kus, který je vidět nahoře, a závěs je jednoduchým vysunutím, které je šířkou průměru otvoru bočních desek. Zadní část a jeden z postranních dílů mají na bocích štěrbiny, takže jsou snadno přístupné porty Pi (HDMI, USB, Ethernet, napájení). Přední část je jednoduchý kus, do kterého jsem nakonec vytvořil otvory pomocí ruční vrtačky pro montáž tlačítka a LED. Jak je vidět na všech kusech, naše části drží pohromadě hardware M3 pomocí T-spojů a slotů. Toto je metoda držení kusů řezaných laserem ortogonálně a bezpečně. Žebra dílků jsou v zákrytu se štěrbinami ostatních kusů a řez ve tvaru písmene T na okrajích poskytuje prostor pro zasunutí matice M3, aniž by se točil. To nám umožňuje použít šroub M3 k uzamčení kusů společně s velmi malým kroutícím se prostorem, aniž by byla sestava plně trvalá.

Kvůli své rychlosti a snadnosti jsem se rozhodl udělat většinu našich kousků laserovou řezačkou. Stále jsem však musel 3D kusy vytisknout kvůli jejich 3D geometrii, kterou by bylo obtížnější vytvořit na řezačce. Prvním kusem byl držák čárového laseru. Tento kus měl být namontován na hlavní lůžko pod úhlem 45 stupňů z pohledu kamery a měl mít takový otvor, aby do něj mohl laser těsně přiléhat. Také jsem musel vytvořit držák motoru, protože hřídel motoru byla tak dlouhá. Montážní tření zapadalo do laserem řezaných kusů a snížilo letadlo, ke kterému byl připojen motor, takže rotující plošina byla v jedné rovině s hlavním ložem.

Krok 5: Elektronika

Elektronika
Elektronika

Hardware zapojení tohoto projektu byl velmi jednoduchý, protože 3D skener nevyžadoval příliš mnoho periferií. K Pi bylo potřeba připojit motor, tlačítko, LED, laser a kameru. Jak je znázorněno, ujistil jsem se, že s každým pinem, který jsme použili, zapojíme odpory do série, abychom chránili piny. Jeden pin GPIO byl věnován ovládání stavové LED diody, která se rozsvítí, když je zařízení připraveno k použití, a pulzuje s PWM, když je zařízení v provozu. K vytaženému tlačítku byl připojen další GPIO pin, který registroval HIGH, když tlačítko nebylo stisknuto, a LOW, když bylo tlačítko stisknuto. Nakonec jsem věnoval čtyři GPIO piny řízení krokového motoru.

Protože náš motor musel šlapat jen do určité míry, aniž by vyžadoval řízení rychlosti, rozhodli jsme se pro jednodušší ovladač krokového motoru (L298N), který jednoduše zesiluje řídicí linie, aby se napájel do vstupů motoru. Abychom se dozvěděli, jak ovládat krokové motory na velmi nízké úrovni, odkazovali jsme se na datový list L298N a knihovnu Arduino. Krokové motory mají magnetické jádro s pertrudujícími prsty se střídavou polaritou. Čtyři vodiče jsou zabaleny tak, aby ovládaly dva elektromagnety, z nichž každý napájí každý druhý protilehlý prst v motoru. Přepnutím polarity prstů jsme tedy schopni tlačit krokovač o jeden krok. Díky těmto znalostem o tom, jak steppery fungovaly z hardwarové úrovně, jsme byli schopni steppery ovládat mnohem snadněji. Rozhodli jsme se napájet náš krokový motor z 5V zdroje v laboratoři spíše než z Pi, protože jeho maximální proudový odběr je asi 0,8 A, což je více, než by mohl Pi dodat.

Krok 6: Software

Software
Software
Software
Software
Software
Software
Software
Software

Software pro tento projekt lze rozdělit na čtyři hlavní součásti, které na sebe vzájemně působí: zpracování obrazu, řízení motoru, vytváření sítě a vestavěné funkce.

Jako souhrn softwaru se můžeme podívat na první obrázek. Při zavádění systému se.bashrc automaticky přihlásí do Pi a spustí náš kód pythonu. Systém rozsvítí stavovou kontrolku, aby dal uživateli vědět, že byl správně spuštěn a čeká na stisknutí tlačítka. Uživatel pak může umístit skenovanou položku a zavřít víko. Po stisknutí tlačítka začne LED dioda informovat uživatele, že zařízení funguje. Zařízení bude procházet mezi zpracováním obrazu a řízením motoru, dokud nebude úplné otočení dokončeno a všechna data objektu nebudou shromážděna. Nakonec se vytvoří síť a soubor se odešle e -mailem na předem vybraný e -mail. Tím se cyklus restartuje a zařízení je připraveno provést další skenování stisknutím tlačítka.

Zpracování obrazu

První implementovanou věcí bylo zpracování zachyceného obrázku za účelem extrahování informací uložených na obrázku do podoby, kterou bylo možné použít k vytvoření pole bodů v prostoru. Abych to udělal, začal jsem tím, že jsem vyfotil předmět na plošině spolu se vším hlukem pozadí vytvořeným laserem svítícím na zadní stranu krabice a rozptylujícím se. Tento obrázek měl ve své surové podobě dva hlavní problémy. Za prvé, objekt byl pozorován pod úhlem se zvýšenou perspektivou a za druhé, v pozadí byl velký hluk. První věc, kterou jsem musel udělat, bylo vysvětlit tento pozorovací úhel, protože použití fotografie tak, jak je, nám neumožnilo určit konzistentní výšku objektu. Jak je vidět na druhém obrázku, výška vzhůru nohama tvaru „L“je konzistentní; ale vzhledem k tomu, že jedna strana je delší než druhá, zdá se, že mají různé výšky na okraji nejblíže k divákovi.

Abych to napravil, musel jsem transformovat pracovní prostor na obrázku na obdélník z lichoběžníkového tvaru, ve kterém byl dříve. K tomu jsem použil kód poskytnutý tímto odkazem, který po zadání obrázku a čtyř bodů ořízne obrázek mezi čtyři body a transformuje oříznutý obrázek, aby kompenzoval perspektivu. Tato transformace používá čtyři body k vytvoření obdélníku namísto tvaru lichoběžníkového typu, jak je vidět na třetím obrázku.

Dalším problémem, který bylo třeba vyřešit, byl hluk pozadí ve formě vnějšího světla a světla odraženého samotným laserem. Za tímto účelem jsem filtroval světlo pomocí funkce inRange () OpenCV. Nastavil jsem práh, abych zachytil červené světlo pouze na určité úrovni. Abych získal správnou hodnotu, začal jsem s mírným prahem a prahovou úroveň jsem stále zvyšoval, dokud jediné světlo, které bylo zachyceno, bylo laserové světlo na snímaném objektu. Jakmile jsem měl tento obrázek, našel jsem v každém řádku nejjasnější pixel získejte řádek o jednom pixelu na řádek, který ohraničuje většinu levé strany laserové čáry. Každý pixel byl poté převeden na vrchol ve 3D prostoru a uložen v poli, jak je popsáno v části vytváření sítě. Výsledky těchto kroků lze vidět na čtvrtém obrázku.

Ovládání motoru

Poté, co jsem byl schopen úspěšně zpracovat jeden obrázek, abych získal řez objektu, potřeboval jsem být schopen otočit objekt a pořídit nový obrázek s jiným úhlem. Za tímto účelem jsem ovládal krokový motor pod plošinou, na které sedí skenovaný objekt. Postavil jsem základ naší krokové funkce vytvořením proměnné pro sledování stavu motoru a mikrokrokem přepínáním každého ze čtyř motorových vstupů.

Vytvoření sítě Abych vytvořil síť ze všech zpracovaných obrázků, musel jsem nejprve převést každý bílý pixel ve zpracovaném obrázku na vrchol ve 3D prostoru. Protože sbírám jednotlivé řezy objektu s válcovou symetrií, mělo smysl začít sbírat válcové souřadnice. To dávalo smysl, protože výška obrázku by mohla představovat osu z, vzdálenost od středu otočného stolu by mohla představovat osu R a otáčení krokového motoru by mohlo představovat osu theta. Protože jsem však uložil naše data do válcových souřadnic, musel jsem každý z těchto vrcholů převést na kartézské souřadnice.

Jakmile byly tyto vrcholy vytvořeny, byly uloženy do seznamu a uvedený seznam byl uložen do jiného seznamu, který obsahoval seznamy vrcholů vytvořené pro každý zachycený obrázek. Jakmile byly všechny obrázky zpracovány a převedeny na vrcholy, musel jsem vybrat vrcholy, které jsem ve skutečnosti chtěl reprezentovat v konečné síti. Chtěl jsem, aby byl zahrnut horní vrchol a spodní vrchol, a pak jsem na základě rozlišení vybral rovnoměrně rozmístěný počet vrcholů, které použiji pro každý obrázek. Protože ne všechny seznamy vrcholů byly stejně dlouhé, musel jsem je vyrovnat vyhledáním seznamu s nejmenším počtem vrcholů a odstraněním vrcholů ze všech ostatních seznamů, dokud nebyly všechny sudé. S vytvořenými seznamy vrcholů jsem nyní dokázal vytvořit pletivo. Rozhodl jsem se formátovat naši síť standardem souboru.obj, protože je jednoduchý a lze jej tisknout 3D.

Integrovaná funkce

Poté, co bylo zařízení funkční, jsem jej vyleštil přidáním plné vestavěné funkce. To znamenalo odebrání klávesnice, myši a monitoru a bezdrátové odeslání souboru.obj po dokončení zpracování. Chcete -li začít, změnil jsem kód.bashrc, aby se automaticky přihlásil a při spuštění spustil hlavní program pythonu. To bylo provedeno pomocí sudo raspi-config a výběrem „Console Autologin“a přidáním řádku „sudo python /home/pi/finalProject/FINAL.py“do /home/pi/.bashrc. Kromě toho jsem také přidáno tlačítko a stavová LED pro vstup a výstup uživatele. Tlačítko by uživateli umožnilo sdělit zařízení, kdy má začít skenovat, a LED dioda uživateli sdělí stav stroje. Pokud kontrolka LED svítí, je zařízení připraveno zahájit nové skenování. Pokud LED dioda bliká, zařízení právě skenuje. Pokud kontrolka LED svítí, došlo k softwarové chybě, která vyžaduje restart systému. Nakonec jsem zařízení povolil odesílat soubor.obj e -mailem. To bylo provedeno pomocí knihoven smtplib a e -mailů. Tato schopnost odesílat e -maily nám poskytla velmi pohodlný a bezdrátový způsob, jak doručit vytvořený soubor uživateli k přístupu na mnoha různých platformách.

Krok 7: Integrace

Integrace
Integrace

Po výrobě různých kusů zařízení jsem jej sestavil dohromady. Výše uvedený obrázek ukazuje v pořadí:

a) sestavená krabice venku

b) sestavená krabice uvnitř s kamerou a laserem

c) vnitřní pohled na lůžko elektroniky

d) zadní část Pi s přístupem k portům Pi a vstupem 5V motoru

(e) tlačítko s LED kroužkem a stavovou kontrolkou v přední části zařízení

Krok 8: Výsledky

Výsledek
Výsledek
Výsledek
Výsledek
Výsledek
Výsledek
Výsledek
Výsledek

Laserový 3D skener dokázal skenovat objekty se slušnou přesností. Vlastnosti objektů jsou zřetelné a rozpoznatelné a části bylo možné snadno vytisknout pomocí 3D softwaru, jako je Repetier. Obrázky nahoře ukazují několik ukázkových skenů kusu dřeva a gumové kachny.

Jedním z našich největších zjištění a úspěchů, které jsem během testování objevil, byla konzistence zařízení. Během několika pokusů se stejným objektem byl skener schopen vytvořit soubor.obj, který byl pokaždé velmi podobný, i když jsme mírně změnili umístění objektu. Jak je vidět na třech samostatných skenech, všechny vypadají velmi podobně a zachycují stejné detaily a stejné množství detailů. Celkově jsem byl velmi ohromen konzistencí a robustností našeho systému.

Jednou z proměnných, které jsem opravdu dokázal vyladit, je rozlišení skenů. Protože v stepperu je 400 kroků, mohu si vybrat, jak velký je každý ΔΘ, aby diktoval úhlové rozlišení. Ve výchozím nastavení mám úhlové rozlišení nastaveno na 20 iterací, což znamená, že každý snímek se motor otáčí o 20 kroků (400/20 = 20). Toto bylo vybráno hlavně v zájmu času - dokončení skenování tímto způsobem trvá asi 45 sekund. Pokud však chci mnohem vyšší kvalitu skenování, mohu zvýšit počet iterací až na 400. To dává mnohem více bodů pro konstrukci modelu, což umožňuje mnohem podrobnější skenování. Kromě úhlového rozlišení mohu také upravit svislé rozlišení nebo kolik různých bodů zvolím k vyzvednutí podél laserového řezu. Pro podobný zájem v čase mám tuto výchozí hodnotu nastavenou na 20, ale pro lepší výsledky ji mohu zvýšit. Při hraní s těmito parametry úhlového rozlišení a prostorového rozlišení se mi podařilo sestavit výsledky různých skenů níže na posledním obrázku. Každý štítek je formátován tak, že je to úhlové rozlišení x prostorové rozlišení. Jak je vidět ve výchozím nastavení skenování, funkce kachny jsou rozpoznatelné, ale nejsou podrobné. Jak však zvyšuji rozlišení, začínají se projevovat jednotlivé přesné rysy, včetně očí, zobáku, ocasu a křídel na kachně. Skenování obrázku s nejvyšším rozlišením trvalo přibližně 5 minut. Vidět tak vysoké dosažitelné rozlišení byl velmi velký úspěch.

Omezení

Navzdory úspěšným výsledkům projektu stále existuje několik omezení návrhu a implementace. S použitím laseru přichází mnoho problémů s tím, jak se světlo rozptyluje. Mnoho předmětů, které jsem zkoušel skenovat, buď průsvitných, lesklých nebo velmi tmavých, bylo problematické s tím, jak se světlo odráželo od povrchu. Pokud by byl předmět průsvitný, světlo by bylo absorbováno a rozptýleno, což by způsobilo velmi hlučné čtení řezů. U lesklých a tmavých předmětů by se světlo buď odráželo, nebo bylo absorbováno do bodu, ve kterém by bylo obtížné ho zachytit. Kromě toho, protože používám kameru k zachycení vlastností objektů, je její snímání omezeno jeho zorným úhlem, což znamená, že konkávní předměty a ostré úhly jsou často blokovány jinými částmi objektu. To je ukázáno na našem příkladu gumové kachny, protože ocas někdy při skenování ztratí své zakřivení. Kamera může také detekovat pouze povrchové struktury, což znamená, že nelze zachytit otvory nebo vnitřní geometrii. Toto je však běžný problém, který má také mnoho dalších skenovacích řešení.

Další kroky

Ačkoli jsem byl s výsledky našeho projektu spokojený, bylo možné implementovat několik věcí, aby byl lepší. Pro začátek, v aktuálním stavu lze rozlišení skenování změnit pouze změnou pevně kódovaných proměnných rozlišení v našem kódu. Aby byl projekt více integrovaný, mohl by být zahrnut potenciometr rozlišení, aby uživatel mohl změnit rozlišení, aniž by musel ke skeneru připojovat monitor a klávesnici. Skener navíc vytváří obrázky, které někdy mohou vypadat zubatě. Aby to bylo možné opravit, mohly by být implementovány techniky vyhlazování sítí k vyhlazení nerovností a drsných rohů. Nakonec jsem zjistil, že souřadnice pixelů se do skutečného světa příliš nevejdou. Mřížky, které jsem vytvořil, byly 6 až 7krát větší než skutečný objekt. V budoucnu by bylo výhodné implementovat způsob škálování sítí, aby byly přesnější ke skutečné velikosti objektu.

Krok 9: Zdroje

Zahrnul jsem kód, soubory STL pro tisk a soubory DXF pro řezání pro celý projekt.

Raspberry Pi Contest 2020
Raspberry Pi Contest 2020
Raspberry Pi Contest 2020
Raspberry Pi Contest 2020

První cena v soutěži Raspberry Pi Contest 2020

Doporučuje: