Sadržaj:

Laserski skener Raspberry Pi: 9 koraka (sa slikama)
Laserski skener Raspberry Pi: 9 koraka (sa slikama)

Video: Laserski skener Raspberry Pi: 9 koraka (sa slikama)

Video: Laserski skener Raspberry Pi: 9 koraka (sa slikama)
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, Srpanj
Anonim
Image
Image
Laserski skener Raspberry Pi
Laserski skener Raspberry Pi

Laserski skener je ugrađeni sustav sustava Raspberry Pi koji može digitalizirati objekte u.obj mesh datoteke za reprodukciju pomoću 3D ispisa. Uređaj to čini korištenjem linijskog lasera i integriranog PiCam -a za izvođenje računalnog vida. Laser je postavljen 45 stupnjeva koso od lasera i projicira jarko crvenu liniju na jednu okomitu krišku objekta. Kamera detektira udaljenost kriške od središta kako bi dala isječak mreže. Objekt se okreće na rotirajućoj ladici i postupak se ponavlja sve dok se cijeli objekt ne skenira. Generirana.obj datoteka konačno se šalje korisniku e -poštom, čineći sustav potpuno samostalnim i ugrađenim.

Ovaj Instructable će proći kroz način izgradnje uređaja, neke rezultate i buduće korake.

Korak 1: Nadahnuće

Inspiracija
Inspiracija
Inspiracija
Inspiracija

Kao strastveni proizvođač, već se nekoliko godina bavim 3D printanjem i solidnim modeliranjem. Radio sam s mnogo različitih alata za izradu prototipova, od CNC usmjerivača do laserskih rezača do 3D pisača. Jedan uređaj koji moj lokalni proizvođač tek treba kupiti bio je 3D skener - i mogu vam reći zašto.

Jeftiniji (nekoliko stotina dolara) bili su nepouzdani, zahtijevali su savršene uvjete i ipak su dali prilično mršave rezultate. Skupi su bili … pa, skupi, kretali su se i do nekoliko tisuća dolara, pa se njegova funkcija u mnogim slučajevima ne isplati. Povrh toga, više puta odlučujem se uzeti mjerenja i osmisliti model ispočetka nego se baviti površinskom mrežom nastalom skeniranjem.

Zbog toga sam htio izgraditi proračunski samostalni skener da vidim koliko dobro mogu skenirati objekt pomoću komponenti s police.

Nakon što sam malo istražio, vidio sam da su mnogi 3D skeneri koristili rotirajuću platformu, a zatim i različite senzore za mjerenje udaljenosti od središta kako bi se izgradio rotacijski model. Mnogi od njih koristili su dvostruke kamere slične onoj u Kinectu. Na kraju sam naletio na Yscanner, skener niske rezolucije koji koristi laser. Gledajući na jednostavnost i izvedivost, ova laserska tehnika, u kojoj se laser sija pomakom u odnosu na kameru radi mjerenja udaljenosti od središta, izgledala je kao jasan put naprijed.

Korak 2: Alati i dijelovi

Dijelovi:

  • Raspberry Pi 35,00 dolara
  • Raspberry Pi kamera V2 30,00 USD
  • LED diode, otpornici i žice
  • 3D niti za tiskanje
  • 12x12x0.125 drveni limovi
  • Hardver M3
  • Koračni motor - 14 USD
  • Line Laser - 8 USD
  • Vozači koračnih motora LN298 - 2,65 USD
  • Metalni gumb - 5 USD

Alati:

  • Lemilica
  • Laserski rezač
  • 3D pisač
  • Odvijač
  • Kliješta

Korak 3: Dizajn na visokoj razini

Dizajn na visokoj razini
Dizajn na visokoj razini
Dizajn na visokoj razini
Dizajn na visokoj razini

Središnja komponenta u ovom dizajnu je linijski laser koji projicira na okomiti dio objekta. Ova se projekcija može snimiti na kameri, ispraviti njezina perspektiva, a zatim filtrirati prije obrade slike. U obradi slike mogla bi se sakupiti udaljenost između svakog segmenta crte od središta objekta. U radijalnim koordinatama ova bi slika dala i r i z komponente. Treća dimenzija, Θ, tada se postiže rotiranjem objekta na novu krišku. Taj je koncept prikazan na prvoj slici.

Za izvršavanje gore opisanih radnji koristio sam Raspberry Pi kao našu središnju računalnu jedinicu. Na Pi sam priključio koračni motor i pokretač motora, napajani vanjskim 5V napajanjem i kontrolirani Pi -jevim GPIO pinovima. Linijski laser postavljen je na liniju od 3,3 V na Pi, a PiCam je priključen na ulaz kamere na Pi. Konačno, instaliran je jednostavni gumb za povlačenje i LED indikator statusa koji korisniku pokazuje u kakvom je stanju sustav. Cijeli sustav sažet je u blok dijagramu sustava.

Od početka je bilo planirano da se elektronika smjesti u kutiju za laserski rez zajedno s T-utorima i hardverom M3. Elektronika bi bila skrivena od pogleda u donjem odjeljku, a poklopac bi omogućio lak pristup postavljanju predmeta na rotirajuću ladicu. Ovaj poklopac je neophodan kako bi se smanjila količina svjetlosti koja prodire u sustav, jer to vanjsko svjetlo može proizvesti šum u završnom skeniranju.

Korak 4: Hardver

Hardver
Hardver
Hardver
Hardver
Hardver
Hardver

Kao što je gore vidljivo, prije nego što sam započeo lasersko rezanje ili 3D ispis, upotrijebio sam Autodesk Fusion 360 za izradu detaljnog 3D modela našeg dizajna. Kao pregled, uređaj je jednostavna kutija s poklopcem sa šarkama za lasersko rezanje. Postoje dva glavna sloja uređaja: elektronički ležaj i glavni krevet, s rupama za žice koje prolaze između dva sloja.

Većina naše kutije izrađena je laserskim rezačem, a dizajni su proizvedeni u Fusion 360 i izrezani na laserskom rezaču Epilog Zing 40 W. Naši dizajni su prikazani na gornjim slikama. Gore gore lijevo, pomičući se desno, dijelovi su glavni krevet, ležaj s elektronikom, dva dijela za poklopac, stražnji dio, prednji dio i dva bočna dijela. U glavnom krevetu postoje tri glavna izreza: jedan za montažu koračnog motora, jedan za usmjeravanje žica od lasera i jedan za usmjeravanje širokog kabela PiCam -a. Komad kreveta ima rupe za pričvršćivanje za pričvršćivanje Pi, matične ploče i pokretača motora te veći izrez za pristup koračnom motoru. Komadi poklopca jednostavno se spajaju i tvore trokutasti komad koji se vidi gore, a šarke su jednostavno istiskivanje koje je širina promjera rupe bočnih ploča. Stražnji dio i jedan od bočnih dijelova imaju proreze sa strane tako da se lako može pristupiti priključcima Pi (HDMI, USB, Ethernet, napajanje). Prednja strana je jednostavan komad u kojem sam na kraju napravio rupe za bušenje ručice za montiranje gumba i LED-a. Kao što se vidi na svim dijelovima, naši dijelovi se drže zajedno pomoću M3 hardvera pomoću T-spojeva i utora. Ovo je metoda držanja laserski izrezanih komada ortogonalno i sigurno. Peraje komada poravnavaju se s prorezima drugih komada, a rez u obliku slova T na rubovima daje prostor za M3 maticu koja se može zabiti u njih bez centrifugiranja. To nam omogućuje da zatim upotrijebimo vijak M3 za zaključavanje komada zajedno s vrlo malo prostora za micanje, a da sklop ne bude potpuno trajan.

Odlučio sam raditi većinu naših komada laserskim rezačem zbog njegove brzine i lakoće. Međutim, ipak sam morao 3D ispisati neke komade zbog njihove 3D geometrije koje bi bilo teže stvoriti na rezaču. Prvi komad bio je linijski laserski držač. Ovaj je komad trebao biti postavljen na glavni krevet pod kutom od 45 stupnjeva od pogleda kamere i imati rupu tako da se laser može čvrsto uklopiti u njega. Također sam morao stvoriti nosač motora jer je osovina motora bila tako duga. Trenje nosača uklopilo se u laserski izrezane komade i spustilo ravninu na koju je motor bio pričvršćen tako da je rotirajuća platforma bila u ravnini s glavnim krevetom.

Korak 5: Elektronika

Elektronika
Elektronika

Ožičenje hardvera ovog projekta bilo je vrlo jednostavno jer 3D skener nije zahtijevao previše perifernih uređaja. Motor, gumb, LED, laser i kamera morali su biti spojeni na Pi. Kao što je prikazano, pobrinuo sam se za povezivanje otpornika uzastopno sa svakim pinom koji smo koristili kako bismo zaštitili pinove. Jedan GPIO pin bio je posvećen kontroli LED statusa, koji bi svijetlio kada je uređaj bio spreman za upotrebu i pulsirao s PWM -om dok je uređaj radio. Još jedan GPIO pin bio je spojen na izvučeni gumb, registrirajući VISOKO kada tipka nije pritisnuta i NISKU kada je tipka pritisnuta. Na kraju, četiri GPIO igle posvetio sam vožnji koračnog motora.

Budući da je naš motor morao koračati samo u određenoj mjeri, a da pritom nije potrebna kontrola brzine, odlučili smo se za jednostavniji upravljački program koračnog motora (L298N) koji jednostavno pojačava upravljačke vodove kako bi ušao u ulaze motora. Da bismo saznali kako upravljati koračnim motorima na vrlo niskoj razini, pozvali smo se na podatkovni list L298N i na Arduino knjižnicu. Koračni motori imaju magnetsku jezgru s isturenim prstima izmjeničnog polariteta. Četiri žice omotane su za upravljanje s dva elektromagneta koji napajaju svaki drugi suprotni prst u motoru. Tako, promjenom polariteta prstiju, možemo gurnuti stepper za jedan korak. S ovim znanjem o tome kako su steperi radili s hardverske razine, bili smo u mogućnosti mnogo lakše kontrolirati stepere. Odlučili smo se za isključivanje našeg koračnog motora s napajanja od 5 V u laboratoriju, a ne iz Pi -a zbog maksimalnog napona struje od oko 0,8 A, što je više nego što bi Pi mogao opskrbiti.

Korak 6: Softver

Softver
Softver
Softver
Softver
Softver
Softver
Softver
Softver

Softver za ovaj projekt može se podijeliti na četiri glavne komponente koje međusobno djeluju: Obrada slike, Kontrola motora, Kreiranje mreže i Ugrađene funkcije.

Kao sažetak softvera, možemo pogledati prvu sliku. Dok se sustav pokreće,.bashrc se automatski prijavljuje u Pi i počinje izvoditi naš python kod. Sustav svijetli statusno svjetlo kako bi korisniku dao do znanja da je pravilno pokrenut i čeka pritisak tipke. Korisnik tada može staviti stavku za skeniranje i zatvoriti poklopac. Nakon pritiska na tipku, LED dioda pulsira kako bi korisnik znao da uređaj radi. Uređaj će se kretati između obrade slike i upravljanja motorom sve dok se ne završi puna rotacija i prikupe svi podaci o objektu. Konačno, mreža se stvara i datoteka se šalje e -poštom na unaprijed odabranu e -poštu. Ovo ponovno pokreće ciklus i stroj je spreman za ponovno skeniranje pritiskom na gumb.

Obrada slike

Prva stvar koja je implementirana bila je obrada snimljene slike kako bi se podaci pohranjeni na slici izdvojili u oblik koji se može koristiti za stvaranje niza točaka u prostoru. Da bih to učinio, počeo sam slikajući objekt na platformi zajedno sa svom pozadinskom bukom koju stvara laser koji sja na stražnju stranu kutije i raspršuje se. Ova je slika imala dva glavna problema u sirovom obliku. Prvo, objekt se promatrao pod kutom s povišenom perspektivom, a drugo, bilo je mnogo pozadinske buke. Prvo što sam trebao učiniti je uzeti u obzir ovaj kut gledanja jer nam upotreba takve fotografije ne dopušta određivanje dosljedne visine objekta. Kao što se vidi na drugoj slici, visina naopako okrenutog oblika "L" je dosljedna; međutim zbog jedne strane koja je dulja od druge čini se da imaju različite visine na rubu najbližem gledatelju.

Da bih to ispravio, morao sam transformirati radni prostor na slici u pravokutnik iz trapezoidnog oblika u kojem je prethodno bio. Da bih to učinio, upotrijebio sam kôd koji se nalazi na ovoj vezi, a koji kad dobije sliku i četiri točke, izrezuje sliku između četiri točke i transformira izrezanu sliku kako bi kompenzirao perspektivu. Ova transformacija koristi četiri točke za stvaranje pravokutnika umjesto oblika tipa trapeza kao što se vidi na trećoj slici.

Sljedeći problem koji je trebalo riješiti bio je pozadinska buka u obliku vanjskog svjetla i svjetla koje reflektira sam laser. Da bih to učinio, filtrirao sam svjetlo pomoću funkcije inRange () programa OpenCV. Postavio sam prag da samo pokupi crveno svjetlo na određenoj razini. Da bih dobio točnu vrijednost, počeo sam s blagim pragom i nastavio povećavati razinu praga sve dok jedino svjetlo koje se uhvati nije bilo lasersko svjetlo na objektu koji se skenira. Jednom kad sam dobio ovu sliku, pronašao sam najsvjetliji piksel u svakom retku do dobiti liniju od jednog piksela po retku koja graniči s lijevom stranom laserske linije. Svaki piksel je zatim pretvoren u vrh u 3D prostoru i pohranjen u niz, kako je opisano u odjeljku o stvaranju mreže. Rezultati ovih koraka mogu se vidjeti na četvrtoj slici.

Upravljanje motorom

Nakon što sam uspio uspješno obraditi jednu sliku kako bih dobio krišku objekta, morao sam moći rotirati objekt kako bih snimio novu sliku s drugačijim kutom. Da bih to učinio, kontrolirao sam koračni motor ispod platforme na koju se nalazi objekt koji se skenira. Izgradio sam temelje naše koračne funkcije stvaranjem varijable za praćenje stanja motora i mikrokorakama prebacivanjem svakog od četiri ulaza motora.

Kreiranje mrežeZa stvaranje mreže od svih obrađenih slika, prvo sam morao pretvoriti svaki bijeli piksel u obrađenoj slici u vrh u 3D prostoru. Budući da prikupljam pojedinačne kriške objekta cilindrične simetrije, imalo je smisla početi prikupljati cilindrične koordinate. To je imalo smisla jer visina slike može predstavljati os z, udaljenost od središta rotirajućeg stola mogla bi predstavljati os R, a rotacija koračnog motora mogla bi predstavljati teta os. Međutim, budući da sam naše podatke spremao u cilindrične koordinate, morao sam pretvoriti svaki od ovih vrhova u kartezijanske koordinate.

Nakon što su ti vrhovi stvoreni, pohranjeni su u popis, a spomenuti popis u drugi popis koji je sadržavao popise vrhova stvorene za svaku snimljenu sliku. Nakon što su sve slike obrađene i pretvorene u vrhove, morao sam odabrati vrhove koje sam zapravo želio prikazati u konačnoj mreži. Htio sam da se uključe gornji vrh i donji vrh, a zatim sam na temelju rezolucije odabrao ravnomjerno raspoređen broj vrhova za svaku sliku. Budući da nisu svi popisi vrhova bili iste duljine, morao sam ih izravnati tako što sam pronašao popis s najmanjim brojem vrhova i uklonio vrhove sa svih ostalih popisa sve dok nisu svi ujednačeni. S izrađenim popisima vrhova sada sam mogao stvoriti mrežu. Odlučio sam formatirati našu mrežu prema.obj datotečnom standardu jer je jednostavan i 3D ispis.

Ugrađena funkcija

Nakon što je uređaj bio funkcionalan, polirao sam ga dodavanjem potpune ugrađene funkcije. To je značilo uklanjanje tipkovnice, miša i monitora te njihovo bežično slanje.obj datoteke nakon završetka obrade. Za početak sam promijenio.bashrc kôd da se automatski prijavi i pokrenem glavni program python pri pokretanju. To je učinjeno korištenjem sudo raspi-config i odabirom "Automatske prijave na konzolu" te dodavanjem retka "sudo python /home/pi/finalProject/FINAL.py" u /home/pi/.bashrc. Osim toga, također sam dodao gumb i LED status za korisnički unos i izlaz. Gumb bi korisniku omogućio da kaže uređaju kada treba započeti skeniranje, a LED dioda će mu reći stanje stroja. Ako LED svijetli, uređaj je spreman za početak novog skeniranja. Ako LED pulsira, uređaj trenutno skenira. Ako je LED dioda uredska, došlo je do softverske pogreške koja zahtijeva ponovno pokretanje sustava. Na kraju, omogućio sam uređaju slanje.obj datoteke putem e -pošte. To je učinjeno korištenjem biblioteka smtplib i e -pošte. Ova mogućnost slanja e -pošte dala nam je vrlo zgodan i bežičan način za isporuku proizvedene datoteke korisniku za pristup na mnogim različitim platformama.

Korak 7: Integracija

Integracija
Integracija

Nakon proizvodnje različitih dijelova uređaja, sastavio sam ga zajedno. Gornja slika prikazuje redoslijed:

(a) sklopljena kutija izvana

(b) sastavljena kutija unutra s kamerom i laserom

(c) iznutra krevet elektronike

(d) stražnji dio Pi s pristupom priključcima Pi i ulazu motora 5V

(e) gumb s LED prstenom i svjetlom statusa na prednjoj strani uređaja

Korak 8: Rezultati

Rezultati
Rezultati
Rezultati
Rezultati
Rezultati
Rezultati
Rezultati
Rezultati

Laserski 3D skener mogao je skenirati objekte s pristojnom preciznošću. Značajke objekata su različite i prepoznatljive, a dijelove je bilo vrlo lako 3D ispisati pomoću softvera za rezanje poput Repetiera. Gore navedene slike prikazuju neke uzorke skenova komada drveta i gumene patke.

Jedan od naših najvećih nalaza i uspjeha koje sam otkrio tijekom testiranja bila je dosljednost uređaja. Tijekom višestrukih ispitivanja istog objekta, skener je uspio proizvesti.obj datoteku koja je svaki put bila vrlo slična, čak i ako smo malo promijenili položaj objekta. Kao što se vidi u tri odvojena skeniranja, svi izgledaju vrlo slično, bilježeći iste detalje i istu količinu detalja. Sveukupno sam bio impresioniran dosljednošću i robusnošću našeg sustava.

Jedna od varijabli koje sam zaista uspio prilagoditi je razlučivost skeniranja. Budući da u steperu postoji 400 koraka, mogu odabrati koliko svaki ΔΘ diktira kutnu razlučivost. Prema zadanim postavkama, kutna rezolucija postavljena je na 20 ponavljanja, što znači da se svaki okvir, motor rotira za 20 koraka (400/20 = 20). To je odabrano uglavnom u interesu vremena - potrebno je oko 45 sekundi da se skeniranje završi na ovaj način. Međutim, ako želim mnogo kvalitetnije skeniranje, mogu povećati broj iteracija sve do 400. To daje mnogo više bodova za izradu modela, što omogućuje mnogo detaljnije skeniranje. Osim kutne razlučivosti, mogu podesiti i okomitu razlučivost, odnosno koliko različitih točaka izaberem za anketiranje duž laserskog presjeka. Za sličan interes u vremenu, zadano sam postavio 20, ali ga mogu povećati za bolje rezultate. Igrajući se s ovim parametrima kutne razlučivosti i prostorne razlučivosti, uspio sam sastaviti rezultate različitih skeniranja u nastavku na posljednjoj slici. Svaka je oznaka oblikovana tako da je kutna razlučivost x prostorna razlučivost. Kao što se vidi u zadanim postavkama skeniranja, značajke patke su prepoznatljive, ali nisu detaljne. Međutim, kako povećavam razlučivost, počinju se prikazivati pojedinačne precizne značajke, uključujući oči, kljun, rep i krila na patki. Skeniranje slike najveće rezolucije trajalo je oko 5 minuta. Vidjeti ovako visoku rezoluciju bio je veliki uspjeh.

Ograničenja

Unatoč uspješnim rezultatima projekta, postoji još nekoliko ograničenja u dizajnu i provedbi. Korištenjem lasera dolazi do mnogih problema s načinom na koji se svjetlo raspršuje. Mnogi predmeti koje sam pokušao skenirati, a koji su bili ili prozirni, sjajni ili vrlo tamni, pokazali su se problematičnim u načinu na koji se svjetlo reflektiralo s površine. Da je objekt proziran, svjetlost bi se apsorbirala i raspršila, što bi činilo vrlo bučno čitanje kriški. U sjajnim i tamnim objektima svjetlost bi se ili reflektirala ili apsorbirala do točke do koje bi bilo teško uhvatiti. Nadalje, budući da kamerom snimam značajke objekata, njegovo je osjećanje ograničeno vidokrugom, što znači da udubljeni objekti i oštri kutovi često blokiraju drugi dijelovi objekta. To je prikazano u našem primjeru gumene patke jer će rep ponekad izgubiti zakrivljenost u skeniranju. Kamera također može detektirati samo površinske strukture što znači da se rupe ili unutarnje geometrije ne mogu snimiti. Međutim, to je uobičajen problem koji imaju i mnoga druga rješenja za skeniranje.

Sljedeći koraci

Iako sam bio zadovoljan rezultatima našeg projekta, bilo je nekoliko stvari koje bi se mogle provesti kako bi se poboljšalo. Za početak, u trenutnom stanju, razlučivost skeniranja može se promijeniti samo promjenom varijabli rezolucije tvrdo kodirane u našem kodu. Kako bi projekt bio ugrađeniji, mogao bi se uključiti potenciometar razlučivosti kako bi korisnik mogao promijeniti rezoluciju bez potrebe za uključivanjem monitora i tipkovnice u skener. Osim toga, skener stvara slike koje ponekad mogu izgledati nazubljene. Kako bi se to popravilo, mogle bi se primijeniti tehnike zaglađivanja mreže kako bi se izgladile nepravilnosti i oštri uglovi. Na kraju, otkrio sam da se koordinate piksela ne uklapaju dobro u stvarni svijet. Mreže koje sam stvorio bile su 6 do 7 puta veće od stvarnog objekta. U budućnosti bi bilo povoljno implementirati način skaliranja mreža kako bi bile točnije prema stvarnoj veličini objekta.

Korak 9: Resursi

Uključio sam kod, STL datoteke za ispis i DXF datoteke za rezanje za cijeli projekt.

Raspberry Pi natjecanje 2020
Raspberry Pi natjecanje 2020
Raspberry Pi natjecanje 2020
Raspberry Pi natjecanje 2020

Prva nagrada na natjecanju Raspberry Pi 2020

Preporučeni: