Obsah:

Laserový skener Raspberry Pi: 9 krokov (s obrázkami)
Laserový skener Raspberry Pi: 9 krokov (s obrázkami)

Video: Laserový skener Raspberry Pi: 9 krokov (s obrázkami)

Video: Laserový skener Raspberry Pi: 9 krokov (s obrázkami)
Video: NRG Laser Know How 3W RGB ILDA 30K 3D Laser Beam Light Show Demonstration 2024, November
Anonim
Image
Image
Laserový skener Raspberry Pi
Laserový skener Raspberry Pi

Laserový skener je zariadenie so vstavaným systémom Raspberry Pi, ktoré je schopné digitalizovať objekty do súborov.obj a reprodukovať ich pomocou 3D tlače. Zariadenie to robí pomocou počítačového videnia pomocou čiarového laseru a integrovaného PiCam. Laser je umiestnený šikmo 45 stupňov od laseru a premieta jasne červenú čiaru na jeden zvislý plátok objektu. Fotoaparát detekuje vzdialenosť rezu od stredu a vytvorí plátok siete. Objekt sa točí na rotujúcom podnose a postup sa opakuje, kým sa naskenuje celý predmet. Vygenerovaný súbor.obj je nakoniec odoslaný e -mailom používateľovi, čím je systém úplne samostatný a vstavaný.

Tento návod vás prevedie tým, ako bolo zariadenie postavené, niektorými výsledkami a budúcimi krokmi.

Krok 1: Inšpirácia

Inšpirácia
Inšpirácia
Inšpirácia
Inšpirácia

Ako zanietený výrobca sa 3D tlači a modelovaniu na pevno venujem už niekoľko rokov. Pracoval som s mnohými rôznymi prototypovacími nástrojmi od CNC smerovačov cez laserové rezačky až po 3D tlačiarne. Jedno zariadenie, ktoré si môj miestny tvorivý priestor ešte musí kúpiť, je 3D skener - a ja vám poviem, prečo.

Lacnejšie (niekoľko stoviek dolárov) boli nespoľahlivé, vyžadovali perfektné podmienky a stále prinášali dosť ošarpané výsledky. Drahé boli … no, drahé, pohybovali sa až do niekoľkých tisíc dolárov, takže jeho funkcia v mnohých prípadoch nestála za to. Navyše sa viackrát rozhodnem vykonať merania a navrhnúť model od nuly, než aby som sa zaoberal povrchovou sieťou generovanou zo skenovania.

Z tohto dôvodu som chcel vytvoriť samostatný cenovo dostupný skener, aby som zistil, ako dobre dokážem naskenovať predmet pomocou súčastí mimo police.

Po vykonaní určitého výskumu som videl, že mnoho 3D skenerov používalo na zostavenie rotačného modelu rotujúcu plošinu a potom rôzne senzory na meranie vzdialenosti od stredu. Mnoho z nich používalo duálne fotoaparáty podobné fotoaparátu Kinect. Nakoniec som narazil na Yscanner, ktorý je skenerom s nízkym rozlíšením a používa laser. Pri pohľade na jednoduchosť a uskutočniteľnosť vyzerala táto laserová technika, v ktorej je laser voči kamere posunutý offset na meranie vzdialenosti od stredu, ako jasná cesta vpred.

Krok 2: Nástroje a diely

Diely:

  • Raspberry Pi 35,00 dolárov
  • Kamera Raspberry Pi V2 30,00 dolárov
  • LED diódy, odpory a vodiče
  • Vlákno pre 3D tlač
  • Drevené dosky 12x12x0,125
  • Hardvér M3
  • Krokový motor - 14 dolárov
  • Čiarový laser - 8 dolárov
  • Ovládače krokových motorov LN298 - 2,65 dolárov
  • Kovové tlačidlo - 5 dolárov

Náradie:

  • Spájkovačka
  • Laserová rezačka
  • 3D tlačiareň
  • Skrutkovač
  • Kliešte

Krok 3: Dizajn na vysokej úrovni

Dizajn na vysokej úrovni
Dizajn na vysokej úrovni
Dizajn na vysokej úrovni
Dizajn na vysokej úrovni

Centrálnou súčasťou tohto návrhu je čiarový laser, ktorý vyčnieva na zvislý rez predmetov. Táto projekcia mohla byť zachytená na pikamere, opravená jej perspektíva a potom filtrovaná pred spracovaním obrazu. Pri spracovaní obrazu bolo možné zozbierať vzdialenosť medzi každým segmentom čiary od stredu objektu. V radiálnych súradniciach by tento obrázok poskytol komponenty r a z. Tretí rozmer, Θ, sa potom dosiahne otočením objektu do nového rezu. Tento koncept je znázornený na prvom obrázku.

Na vykonanie vyššie uvedených akcií som použil Raspberry Pi ako našu centrálnu výpočtovú jednotku. K Pi som pripojil krokový motor a ovládač motora, napájaný externým 5V napájaním a ovládaný pinmi GPIO Pi. Na Pí bol na linku 3,3 V nasadený čiarový laser a na vstup kamery na Pi bol pripevnený PiCam. Nakoniec bolo nainštalované jednoduché stiahnuté tlačidlo a stavová LED dióda indikujúca používateľovi, v akom stave sa systém nachádza. Celý systém je zhrnutý v blokovej schéme systému.

Od začiatku bolo plánované umiestniť elektroniku do laserom rezaného boxu držaného spolu s drážkami T a hardvérom M3. Elektronika by bola skrytá pred zrakom v spodnej priehradke a veko by umožňovalo ľahký prístup k umiestneniu predmetov na otočný podnos. Toto veko je nevyhnutné na minimalizáciu množstva svetla, ktoré uniká do systému, pretože toto vonkajšie svetlo môže pri konečnom skenovaní vytvárať hluk.

Krok 4: Hardvér

Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér

Ako je uvedené vyššie, predtým, ako som začal rezať laserom alebo 3D tlač, použil som Autodesk Fusion 360 na vytvorenie podrobného 3D modelu nášho návrhu. Ako prehľad je zariadenie jednoduchou krabicou s vekom s laserom rezanými závesmi. Existujú dve hlavné vrstvy zariadenia: lôžko elektroniky a hlavné lôžko s otvormi na vedenie drôtov medzi týmito dvoma vrstvami.

Väčšina nášho boxu bola vyrobená laserovým rezačom, pričom návrhy boli vyrobené vo Fusion 360 a rezané na laserovom rezači Epilog Zing 40 W. Naše návrhy sú znázornené na obrázkoch vyššie. Vľavo hore sa pohybujú vpravo kusy sú hlavné lôžko, lôžko elektroniky, dva kusy veka, zadný diel, predný diel a dva bočné diely. V hlavnom lôžku sú tri hlavné výrezy: jeden na montáž krokového motora, jeden na vedenie vodičov z lasera a jeden na vedenie širokého kábla PiCam. Posteľ má montážne otvory na zaistenie Pi, doštičky a ovládača motora a väčší výrez na prístup k krokovému motoru. Kusy veka jednoducho zapadnú a vytvoria trojuholníkový kus, ktorý je vidieť vyššie, a záves je jednoduché vytláčanie, ktoré je šírkou priemeru otvoru bočných dosiek. Zadná časť a jeden z bočných dielov majú bočné otvory, aby bolo možné ľahko pristupovať k portom Pi (HDMI, USB, Ethernet, napájanie). Predná strana je jednoduchý kus, do ktorého som nakoniec urobil diery ručnou vŕtačkou na pripevnenie gombíka a diódy LED. Ako je vidieť na všetkých kusoch, naše diely drží pohromade hardvér M3 pomocou T-spojov a štrbín. Ide o spôsob držania dielov laserom rezaných ortogonálne a bezpečne. Plutvy kusov sú zarovnané so štrbinami ostatných kúskov a výrez v tvare T na okrajoch dáva priestor na to, aby do nich bolo možné zaskrutkovať maticu M3 bez otáčania. To nám potom umožňuje použiť skrutku M3 na uzamknutie dielov spolu s veľmi malým priestorom na otáčanie bez toho, aby bola zostava úplne trvalá.

Vzhľadom na rýchlosť a jednoduchosť som sa rozhodol urobiť väčšinu našich kúskov laserovou rezačkou. Niektoré kusy som však stále musel 3D vytlačiť kvôli ich 3D geometrii, ktorú by bolo ťažšie vytvoriť na fréze. Prvým kusom bol držiak čiarového laseru. Tento kus mal byť namontovaný na hlavnom lôžku pod uhlom 45 stupňov z pohľadu kamery a mal mať taký otvor, aby do neho mohol laser tesne priliehať. Tiež som musel vytvoriť držiak motora, pretože hriadeľ motora bol taký dlhý. Montážne trenie zapadalo do dielov laserom rezaných a znižovalo rovinu, ku ktorej bol motor pripevnený, takže rotujúca plošina bola v jednej rovine s hlavným lôžkom.

Krok 5: Elektronika

Elektronika
Elektronika

Hardvér zapojenia tohto projektu bol veľmi jednoduchý, pretože 3D skener nevyžadoval príliš veľa periférií. K Pi je potrebné pripojiť motor, tlačidlo, LED, laser a kameru. Ako je znázornené, ubezpečil som sa, že odpory zapojíme do série s každým pinom, ktorý sme použili, aby sme chránili kolíky. Jeden kolík GPIO bol určený na ovládanie stavovej diódy LED, ktorá sa rozsvieti, keď je zariadenie pripravené na použitie, a pulzne s PWM, keď bolo zariadenie v prevádzke. K vytiahnutému tlačidlu bol pripojený ďalší kolík GPIO, ktorý pri stlačení tlačidla zaznamenal HIGH a pri stlačení tlačidla LOW. Nakoniec som vyhradil štyri piny GPIO na riadenie krokového motora.

Pretože náš motor musel šliapať iba do určitej miery bez toho, aby vyžadoval riadenie rýchlosti, rozhodli sme sa pre jednoduchší ovládač krokového motora (L298N), ktorý jednoducho stupňuje po riadiacich líniách, aby sa napájal do vstupov motora. Aby sme sa dozvedeli o tom, ako ovládať krokové motory na veľmi nízkej úrovni, odkazovali sme na dátový list L298N a knižnicu Arduino. Krokové motory majú magnetické jadro so zasahujúcimi prstami so striedavou polaritou. Štyri vodiče sú zabalené tak, aby ovládali dva elektromagnety, z ktorých každý napája každý druhý protiľahlý prst v motore. Prepnutím polarity prstov sme teda schopní posunúť stepper o krok. Vďaka týmto znalostiam o tom, ako steppery fungovali z hardvérovej úrovne, sme mohli steppery ovládať oveľa jednoduchšie. Rozhodli sme sa napájať náš krokový motor z 5V zdroja v laboratóriu, a nie z Pi, pretože jeho maximálny prúdový odber je asi 0,8 A, čo je viac, ako by mohol Pi dodať.

Krok 6: Softvér

Softvér
Softvér
Softvér
Softvér
Softvér
Softvér
Softvér
Softvér

Softvér pre tento projekt je možné rozdeliť na štyri hlavné komponenty, ktoré navzájom spolupracujú: spracovanie obrazu, ovládanie motora, vytváranie siete a vstavané funkcie.

Ako súhrn softvéru sa môžeme pozrieť na prvý obrázok. Keď sa systém spustí,.bashrc sa automaticky prihlási do Pi a spustí náš kód pythonu. Systém rozsvieti stavovú kontrolku, aby dal používateľovi vedieť, že bol správne zavedený a čaká na stlačenie tlačidla. Užívateľ potom môže položiť položku na skenovanie a zatvoriť veko. Po stlačení tlačidla LED dióda zabliká, aby používateľovi oznámil, že zariadenie funguje. Zariadenie bude cyklovať medzi spracovaním obrazu a riadením motora, kým sa úplné otočenie nedokončí a nezozbierajú sa všetky údaje o objekte. Nakoniec sa vytvorí pletivo a súbor sa pošle e -mailom na vopred vybratý e -mail. Tým sa cyklus reštartuje a zariadenie je pripravené vykonať ďalšie skenovanie stlačením tlačidla.

Spracovanie obrazu

Prvá vec, ktorú sme implementovali, bolo spracovanie zachyteného obrázku s cieľom extrahovať informácie uložené na obrázku do formy, ktorú by bolo možné použiť na vytvorenie radu bodov v priestore. Aby som to urobil, začal som fotografovaním predmetu na plošine spolu so všetkým hlukom pozadia, ktorý vytvára laser svietiaci na zadnú stranu škatule a rozptyľujúci sa. Tento obrázok mal v surovej forme dva hlavné problémy. Po prvé, objekt bol pozorovaný pod uhlom so zvýšenou perspektívou a po druhé, v pozadí bolo veľa hluku. Prvá vec, ktorú som musel urobiť, bolo zohľadniť tento pozorovací uhol, pretože použitie fotografie tak, ako je, nám neumožnilo určiť konzistentnú výšku objektu. Ako je zrejmé z druhého obrázku, výška tvaru „L“hore dnom je konzistentná; ale pretože jedna strana je dlhšia ako druhá, zdá sa, že majú rôzne výšky na okraji najbližšie k divákovi.

Aby som to vyriešil, musel som transformovať pracovný priestor na obrázku na obdĺžnik z lichobežníkového tvaru, v ktorom bol predtým. Na tento účel som použil kód poskytnutý týmto odkazom, ktorý pri zadaní obrázka a štyroch bodov orezá obrázok medzi štyrmi bodmi a transformuje orezaný obrázok na kompenzáciu perspektívy. Táto transformácia používa štyri body na vytvorenie obdĺžnika namiesto tvaru lichobežníkového typu, ako je vidieť na treťom obrázku.

Ďalším problémom, ktorý bolo potrebné vyriešiť, bol hluk pozadia vo forme vonkajšieho svetla a svetla odrážaného samotným laserom. Za týmto účelom som filtroval svetlo pomocou funkcie inRange () v OpenCV. Nastavil som prah, aby zachytával červené svetlo iba na určitej úrovni. Aby som získal správnu hodnotu, začal som s miernym prahom a prahovú úroveň som stále zvyšoval, až kým sa jediné svetlo, ktoré sa zachytávalo, nachádzalo laserové svetlo na skenovanom objekte. Keď som mal tento obrázok, v každom riadku som našiel najjasnejší pixel. získajte riadok jedného pixelu na riadok, ktorý ohraničuje väčšinu ľavej strany laserovej čiary. Každý pixel bol potom prevedený na vrchol v 3D priestore a uložený v poli, ako je popísané v sekcii vytvárania sietí. Výsledky týchto krokov je možné vidieť na štvrtom obrázku.

Ovládanie motora

Potom, čo som bol schopný úspešne spracovať jeden obrázok, aby som získal plátok objektu, potreboval som byť schopný objekt otočiť, aby som urobil nový obrázok s iným uhlom. Aby som to urobil, ovládal som krokový motor pod plošinou, na ktorej sedí skenovaný objekt. Postavil som základ našej krokovej funkcie vytvorením premennej na sledovanie stavu motora a mikrokrokovania prepnutím každého zo štyroch motorových vstupov.

Na vytvorenie siete zo všetkých spracovaných obrázkov som najskôr musel previesť každý biely pixel v spracovanom obrázku na vrchol v 3D priestore. Pretože zbieram jednotlivé rezy objektu s valcovou symetriou, malo zmysel začať zbierať valcové súradnice. To dávalo zmysel, pretože výška obrázku môže predstavovať os z, vzdialenosť od stredu otočného stola môže predstavovať os R a otáčanie krokového motora môže predstavovať os theta. Pretože som však naše údaje uložil do valcových súradníc, musel som každý z týchto vrcholov previesť na karteziánske súradnice.

Akonáhle boli tieto vrcholy vytvorené, boli uložené v zozname a uvedený zoznam bol uložený v inom zozname, ktorý obsahoval zoznamy vrcholov vytvorené pre každý zachytený obrázok. Keď boli všetky obrázky spracované a prevedené na vrcholy, musel som vybrať vrcholy, ktoré som v skutočnosti chcel reprezentovať v konečnej sieti. Chcel som, aby bol zahrnutý horný a dolný vrchol, a potom som na základe rozlíšenia vybral rovnomerne rozložený počet vrcholov, ktoré použijem pre každý obrázok. Pretože nie všetky zoznamy vrcholov boli rovnako dlhé, musel som ich vyrovnať tak, že som našiel zoznam s najmenším počtom vrcholov a odstránil vrcholy zo všetkých ostatných zoznamov, kým neboli všetky párne. S vytvorenými zoznammi vrcholov som teraz dokázal vytvorte pletivo. Rozhodol som sa formátovať našu sieť podľa štandardu súboru.obj, pretože je jednoduchý a dá sa tlačiť 3D.

Zabudovaná funkcia

Keď bolo zariadenie funkčné, vyleštil som ho pridaním plnej vstavanej funkcionality. To znamenalo odstránenie klávesnice, myši a monitora a po dokončení spracovania nám bezdrôtovo odoslal súbor.obj. Na začiatku som zmenil kód.bashrc, aby sa automaticky prihlásil a spustil hlavný program python pri spustení. To sa vykonalo pomocou sudo raspi-config a zvolením „Console Autologin“a pridaním riadka „sudo python /home/pi/finalProject/FINAL.py“do /home/pi/.bashrc. Kromě toho som tiež pridané tlačidlo a stavová dióda LED pre vstup a výstup používateľa. Toto tlačidlo umožní používateľovi povedať zariadeniu, kedy má začať skenovať, a kontrolka LED mu oznámi stav zariadenia. Ak dióda LED svieti, zariadenie je pripravené na spustenie nového skenovania. Ak LED dióda bliká, zariadenie práve skenuje. Ak LED dióda nesvieti, znamená to, že došlo k softvérovej chybe, ktorá si vyžiadala reštart systému. Nakoniec som zariadeniu povolil odosielať súbor.obj e -mailom. To sa uskutočnilo pomocou knižníc smtplib a e -mailov. Táto schopnosť odosielať e -maily nám poskytla veľmi pohodlný a bezdrôtový spôsob, ako doručiť vytvorený súbor používateľovi, aby k nemu mal prístup na mnohých rôznych platformách.

Krok 7: Integrácia

Integrácia
Integrácia

Po vyrobení rôznych kusov zariadenia som ho zostavil. Vyššie uvedený obrázok ukazuje v poradí:

a) zmontovaný box vonku

b) zostavená krabica vo vnútri s kamerou a laserom

c) vnútorný pohľad na lôžko elektroniky

d) zadná strana Pi s prístupom k portom Pi a vstupom 5V motora

e) tlačidlo s LED krúžkom a stavovou kontrolkou v prednej časti zariadenia

Krok 8: Výsledky

Výsledky
Výsledky
Výsledky
Výsledky
Výsledky
Výsledky
Výsledky
Výsledky

Laserový 3D skener dokázal skenovať objekty so slušnou presnosťou. Vlastnosti objektov sú zreteľné a rozpoznateľné a diely bolo možné veľmi ľahko vytlačiť v 3D pomocou softvéru na krájanie, ako je napríklad Repetier. Vyššie uvedené obrázky zobrazujú niekoľko ukážkových skenov kusa dreva a gumeného káčera.

Jedným z našich najväčších zistení a úspechov, ktoré som počas testovania zistil, bola konzistencia zariadenia. Počas viacerých pokusov s rovnakým objektom bol skener schopný vytvoriť súbor.obj, ktorý bol zakaždým veľmi podobný, aj keď sme mierne zmenili umiestnenie objektu. Ako je vidieť na troch samostatných skenoch, všetky vyzerajú veľmi podobne a zachytávajú rovnaké detaily a rovnaké množstvo podrobností. Celkovo som bol veľmi ohromený konzistenciou a robustnosťou nášho systému.

Jednou z premenných, ktoré som skutočne dokázal vyladiť, je rozlíšenie skenov. Pretože v krokovom kroku je 400 krokov, môžem si vybrať, aký veľký je každý ΔΘ, aby som diktoval uhlové rozlíšenie. Štandardne mám uhlové rozlíšenie nastavené na 20 iterácií, to znamená, že každý snímok sa motor otáča o 20 krokov (400/20 = 20). Toto bolo zvolené hlavne v záujme času - skenovanie týmto spôsobom trvá asi 45 sekúnd. Ak však chcem skenovanie oveľa vyššej kvality, môžem zvýšiť počet iterácií až na 400. To dáva oveľa viac bodov na zostavenie modelu, vďaka čomu je sken oveľa detailnejší. Okrem uhlového rozlíšenia môžem nastaviť aj vertikálne rozlíšenie alebo koľko rôznych bodov sa rozhodnem snímať pozdĺž laserového rezu. Pre podobný záujem v čase mám túto predvolenú hodnotu nastavenú na 20, ale môžem ju zvýšiť, aby som dosiahol lepšie výsledky. Pri hre s týmito parametrami uhlového rozlíšenia a priestorového rozlíšenia som mohol zostaviť výsledky rôznych skenov nižšie na poslednom obrázku. Každý štítok je naformátovaný tak, aby predstavoval uhlové rozlíšenie x priestorové rozlíšenie. Ako je vidieť na predvolených nastaveniach skenovania, funkcie kačice sú rozpoznateľné, ale nie podrobné. Keď však zvyšujem rozlíšenie, začínajú sa prejavovať jednotlivé presné črty vrátane očí, zobáka, chvosta a krídel na kačke. Skenovanie obrázku s najvyšším rozlíšením trvalo asi 5 minút. Vidieť takú vysokú hodnotu dosiahnuteľného rozlíšenia bolo veľmi veľkým úspechom.

Obmedzenia

Napriek úspešným výsledkom projektu stále existuje niekoľko obmedzení návrhu a implementácie. S použitím lasera vzniká množstvo problémov s tým, ako sa svetlo rozptyľuje. Mnoho predmetov, ktoré som sa pokúsil skenovať, ktoré boli buď priesvitné, lesklé alebo veľmi tmavé, bolo problematické s tým, ako sa svetlo odrážalo od povrchu. Ak by bol predmet priesvitný, svetlo by bolo absorbované a rozptýlené, čo by spôsobilo veľmi hlučné čítanie plátkov. V lesklých a tmavých predmetoch by sa svetlo buď odrazilo alebo bolo absorbované do bodu, v ktorom by bolo ťažké ho zachytiť. Ďalej, pretože používam fotoaparát na zachytenie vlastností predmetov, jeho snímanie je obmedzené jeho zorným uhlom, čo znamená, že konkávne objekty a ostré uhly sú často blokované inými časťami objektu. Toto je znázornené na našom príklade gumenej kačice, pretože chvost pri skenovaní niekedy stratí svoje zakrivenie. Kamera môže tiež detekovať iba povrchové štruktúry, čo znamená, že nie je možné zachytiť diery alebo vnútorné geometrie. Toto je však bežný problém, ktorý má aj mnoho ďalších riešení skenovania.

Ďalšie kroky

Napriek tomu, že som bol s výsledkami nášho projektu spokojný, bolo možné implementovať niekoľko vecí, ktoré ho zlepšia. Na začiatok, v súčasnom stave je možné rozlíšenie skenovania zmeniť iba zmenou napevno kódovaných premenných rozlíšenia v našom kóde. Aby bol projekt integrovanejší, mohol by byť zahrnutý potenciometer rozlíšenia, aby používateľ mohol meniť rozlíšenie bez toho, aby musel ku skeneru pripájať monitor a klávesnicu. Skener navyše vytvára obrázky, ktoré môžu niekedy pôsobiť zubato. Na vyriešenie tohto problému je možné implementovať techniky vyhladzovania sietí na vyhladenie nerovností a drsných rohov. Nakoniec som zistil, že súradnice pixelov sa v skutočnom svete nevešujú dostatočne dobre. Oká, ktoré som vytvoril, boli 6 až 7 krát väčšie ako skutočný objekt. V budúcnosti by bolo výhodné implementovať spôsob škálovania ôk, aby boli presnejšie k skutočnej veľkosti objektu.

Krok 9: Zdroje

Zahrnul som kód, súbory STL na tlač a súbory DXF na vystrihnutie pre celý projekt.

Súťaž Raspberry Pi 2020
Súťaž Raspberry Pi 2020
Súťaž Raspberry Pi 2020
Súťaž Raspberry Pi 2020

Prvá cena v súťaži Raspberry Pi Contest 2020

Odporúča: