Kazalo:

Laserski skener Raspberry Pi: 9 korakov (s slikami)
Laserski skener Raspberry Pi: 9 korakov (s slikami)

Video: Laserski skener Raspberry Pi: 9 korakov (s slikami)

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

Laserski optični bralnik je vgrajena sistemska naprava Raspberry Pi, ki lahko digitalizira predmete v datoteke.obj, za reprodukcijo s 3D -tiskanjem. Naprava to počne z uporabo linijskega laserja in integriranega PiCam -a za računalniški vid. Laser je postavljen 45 stopinj nagnjeno od laserja in na eno navpično rezino predmeta projicira svetlo rdečo črto. Kamera zazna razdaljo rezine od središča, da dobi rezino mreže. Predmet se vrti na vrtljivem pladnju in postopek se ponavlja, dokler se ne skenira celoten predmet. Ustvarjena datoteka.obj je uporabniku končno poslana po e -pošti, zaradi česar je sistem popolnoma samostojen in vgrajen.

Ta Instructable bo predstavil, kako je bila naprava zgrajena, nekatere rezultate in prihodnje korake.

1. korak: Navdih

Navdih
Navdih
Navdih
Navdih

Kot navdušen izdelovalec se že nekaj let ukvarjam s 3D tiskanjem in trdnim modeliranjem. Delal sem z veliko različnimi orodji za izdelavo prototipov od CNC usmerjevalnikov do laserskih rezalnikov do 3D tiskalnikov. Ena naprava, ki jo moj lokalni proizvajalec še ni kupil, je 3D -skener - in povem vam, zakaj.

Cenejše (nekaj sto dolarjev) so bile nezanesljive, zahtevale so popolne pogoje in so še vedno dale precej slabe rezultate. Dragi so bili … no, dragi, segali so tudi do nekaj tisoč dolarjev, zaradi česar njegova funkcija v mnogih primerih ni vredna. Poleg tega se večkrat odločim, da opravim meritve in oblikujem model iz nič, kot da se ukvarjam s površinsko mrežo, ki nastane pri skeniranju.

Zaradi tega sem želel zgraditi proračunski samostojni optični bralnik, da vidim, kako dobro lahko skeniram predmet z uporabo sestavnih delov police.

Po nekaj raziskavah sem videl, da so številni 3D skenerji uporabili vrtljivo platformo in nato različne senzorje za merjenje razdalje od središča za izgradnjo rotacijskega modela. Mnogi od teh so uporabljali dvojne kamere, podobne tisti pri Kinectu. Na koncu sem naletel na Yscanner, skener z nizko ločljivostjo, ki uporablja laser. Če pogledamo preprostost in izvedljivost, je bila ta laserska tehnika, pri kateri se laser osvetli s premikom glede na kamero za merjenje razdalje od središča, videti kot jasna pot naprej.

Korak: Orodja in deli

Deli:

  • Raspberry Pi 35,00 $
  • Raspberry Pi Camera V2 30,00 USD
  • LED, upori in žice
  • 3D tiskalna nit
  • 12x12x0,125 lesene pločevine
  • Strojna oprema M3
  • Koračni motor - 14 USD
  • Line Laser - 8 USD
  • Gonilniki koračnih motorjev LN298 - 2,65 USD
  • Kovinski gumb - 5 USD

Orodja:

  • Spajkalnik
  • Laserski rezalnik
  • 3D tiskalnik
  • Izvijač
  • Klešče

3. korak: Oblikovanje na visoki ravni

Oblikovanje na visoki ravni
Oblikovanje na visoki ravni
Oblikovanje na visoki ravni
Oblikovanje na visoki ravni

Osrednja komponenta te zasnove je linijski laser, ki projicira na navpično rezino predmetov. To projekcijo bi lahko posneli na kamero, popravili njeno perspektivo in nato filtrirali pred obdelavo slike. Pri obdelavi slik bi lahko zbrali razdaljo med vsakim segmentom črte od središča predmeta. V radialnih koordinatah bi ta slika dala komponente r in z. Tretja dimenzija, Θ, se nato doseže z vrtenjem predmeta na novo rezino. Ta koncept je prikazan na prvi sliki.

Za izvedbo zgoraj opisanih dejanj sem kot osrednjo računalniško enoto uporabil Raspberry Pi. Na Pi sem priklopil koračni motor in gonilnik motorja, ki ga napaja zunanji 5V napajalnik in ga krmilijo Pi -jevi zatiči GPIO. Linijski laser je bil postavljen na linijo 3,3 V na Pi in PiCam je bil pritrjen na vhod kamere na Pi. Nazadnje je bil nameščen preprost spustni gumb in LED -lučka stanja, ki uporabniku pokaže, v kakšnem stanju je sistem. Celoten sistem je povzetek v sistemski blok shemi.

Od začetka je bilo načrtovano, da se elektronika shrani v lasersko razrezano škatlo, skupaj s T-režami in strojno opremo M3. Elektronika bi bila skrita pred očmi v spodnjem predalu, pokrov pa bi omogočal enostaven dostop do postavitve predmetov na vrtljivem pladnju. Ta pokrov je potreben za zmanjšanje količine svetlobe, ki uhaja v sistem, saj lahko ta zunanja svetloba povzroči hrup pri končnem skeniranju.

4. korak: Strojna oprema

Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema

Kot je prikazano zgoraj, sem pred začetkom laserskega rezanja ali 3D tiskanja uporabil Autodesk Fusion 360 za izdelavo podrobnega 3D modela našega oblikovanja. Pregled je naprava preprosta škatla s pokrovom z lasersko odrezanimi tečaji. Obstajata dve glavni plasti naprave: elektronska postelja in glavna postelja z luknjami za vodenje žic med obema plastema.

Večina naše škatle je bila izdelana z laserskim rezalnikom, modeli pa so bili izdelani v Fusion 360 in razrezani na laserskem rezalniku Epilog Zing 40 W. Naši modeli so prikazani na zgornjih slikah. Zgoraj levo, premikajoč se desno, so deli glavno ležišče, ležišče elektronike, dva dela za pokrov, zadnji del, sprednji del in dva stranska dela. V glavnem ležišču so trije glavni izrezi: eden za namestitev koračnega motorja, eden za napeljavo žic od laserja in drugi za napeljavo širokega kabla PiCam. Posteljni del ima pritrdilne luknje za pritrditev Pi, plošče in gonilnika motorja ter večji izrez za dostop do koračnega motorja. Kosi pokrova se preprosto spajajo, da tvorijo trikotni kos, viden zgoraj, tečaj pa je preprosto iztiskanje, ki je širina premera luknje stranskih plošč. Zadnji del in eden od stranskih delov imata reže na strani, tako da lahko preprosto dostopate do vrat Pi (HDMI, USB, Ethernet, napajanje). Sprednji del je preprost kos, ki sem ga na koncu naredil z ročnim vrtalnikom za pritrditev gumba in LED. Kot je vidno na vseh kosih, naše dele drži strojna oprema M3 s pomočjo T-spojev in rež. To je metoda držanja lasersko rezanih kosov pravokotno in varno. Plavuti kosov so poravnani z režami drugih kosov, rez v obliki črke T na robovih pa daje prostor za pritrditev matice M3 brez vrtenja. To nam omogoča, da nato z vijakom M3 zaklenemo kose skupaj z zelo malo prostora za premikanje, ne da bi bil sklop popolnoma stalen.

Večino naših kosov sem se odločil narediti z laserskim rezalnikom zaradi njegove hitrosti in enostavnosti. Vseeno sem moral zaradi 3D geometrije 3D natisniti nekaj kosov, ki bi jih bilo težje ustvariti na rezalniku. Prvi kos je bil linijski laserski nosilec. Ta kos naj bi bil nameščen na glavno posteljo pod kotom 45 stopinj od pogleda kamere in imel luknjo, tako da se laser lahko tesno prilega vanj. Moral sem ustvariti tudi nosilec motorja, ker je bila gred motorja tako dolga. Montažno trenje se je prilegalo lasersko izrezanim kosom in spustilo ravnino, na katero je bil pritrjen motor, tako da je bila vrtljiva ploščad poravnana z glavno posteljo.

5. korak: Elektronika

Elektronika
Elektronika

Strojna oprema za ožičenje tega projekta je bila zelo preprosta, saj 3D -skener ni zahteval preveč zunanjih naprav. Na Pi morate priključiti motor, gumb, LED, laser in kamero. Kot je prikazano, sem poskrbel, da sem uporabil zaporedje z vsakim zatičem, ki smo ga uporabili za zaščito nožic. En pin GPIO je bil namenjen nadzoru statusne LED, ki bi zasvetila, ko je bila naprava pripravljena za uporabo, in utripala s PWM, ko je naprava delovala. Drugi vtič GPIO je bil povezan z izvlečenim gumbom, pri čemer je bil registriran VISOKO, ko tipke ni bilo pritisnjeno, in NIZKO, ko je bil pritisnjen. Nazadnje sem štiri korake GPIO namenil vožnji koračnega motorja.

Ker je naš motor moral stopiti le do določene mere, ne da bi potreboval nadzor hitrosti, smo se odločili za enostavnejši gonilnik koračnega motorja (L298N), ki preprosto povečuje krmilne črte, da se poda do vhodov motorja. Če želite izvedeti, kako uporabljati koračne motorje na zelo nizki ravni, smo se sklicevali na podatkovni list L298N in knjižnico Arduino. Koračni motorji imajo magnetno jedro s štrlečimi prsti izmenične polarnosti. Štiri žice so ovite za krmiljenje dveh elektromagnetov, ki napajata vsak drug nasprotni prst v motorju. Tako lahko s preklopom polarnosti prstov potisnemo korak za en korak. S tem vedenjem o tem, kako koraki delujejo s strojne ravni, smo lahko veliko lažje nadzorovali korake. Odločili smo se za izklop napajanja našega koračnega motorja iz 5V napajanja v laboratoriju in ne zaradi Pi zaradi njegove največje porabe toka približno 0,8 A, kar je več, kot bi lahko dal Pi.

6. korak: Programska oprema

Programska oprema
Programska oprema
Programska oprema
Programska oprema
Programska oprema
Programska oprema
Programska oprema
Programska oprema

Programsko opremo tega projekta lahko razdelimo na štiri glavne komponente, ki medsebojno delujejo: obdelava slik, nadzor motorja, ustvarjanje mrež in vdelane funkcije.

Kot povzetek programske opreme lahko pogledamo prvo sliko. Ko se sistem zažene, se.bashrc samodejno prijavi v Pi in začne izvajati našo kodo python. Sistem prižge lučko stanja, da uporabniku sporoči, da je bil pravilno zagnan, in počaka na pritisk gumba. Uporabnik lahko nato da predmet za skeniranje in zapre pokrov. Ko pritisnete gumb, LED utripa, da uporabniku sporoči, da naprava deluje. Naprava bo preklapljala med obdelavo slike in krmiljenjem motorja, dokler ni popolna rotacija končana in se zberejo vsi podatki o objektu. Končno se ustvari mreža in datoteka se po e -pošti pošlje na vnaprej izbrano e -pošto. S tem se cikel znova zažene in stroj je s pritiskom na gumb pripravljen za ponovno skeniranje.

Obdelava slik

Prva stvar, ki je bila izvedena, je bila obdelava posnete slike, da se informacije, shranjene na sliki, izvlečejo v obliko, ki bi jo lahko uporabili za ustvarjanje niza točk v vesolju. Za to sem začel s fotografiranjem predmeta na ploščadi skupaj z vsem hrupom v ozadju, ki ga je ustvaril laser, ki je sijal na zadnjo stran škatle in se razpršil. Ta slika je imela v svoji surovi obliki dve glavni težavi. Prvič, predmet smo gledali pod kotom s povišano perspektivo, drugič pa je bilo veliko hrupa v ozadju. Najprej sem moral upoštevati ta vidni kot, ker nam uporaba takšne fotografije ne bi omogočila določitve konsistentne višine predmeta. Kot je prikazano na drugi sliki, je višina obrnjene glave "L" skladna; ker pa je ena stran daljša od druge, se zdi, da imajo na robu, ki je najbližje gledalcu, različne višine.

Da bi to odpravili, sem moral spremeniti delovni prostor na sliki v pravokotnik iz trapezne oblike, v kateri je bil prej. Za to sem uporabil kodo, ki jo ponuja ta povezava, ki ob podaritvi slike in štirih točk sliko obreže med štiri točke in pretvori obrezano sliko, da kompenzira perspektivo. Ta transformacija uporablja štiri točke za ustvarjanje pravokotnika namesto oblike trapeza, kot je prikazano na tretji sliki.

Naslednji problem, ki ga je bilo treba rešiti, je bil hrup v ozadju v obliki zunanje svetlobe in svetlobe, ki jo odseva laser sam. V ta namen sem filtriral svetlobo s funkcijo inRange () OpenCV. Prag sem nastavil tako, da na določeni ravni pobere samo rdečo luč. Da bi dobili pravilno vrednost, sem začel z blagim pragom in stopnjo praga povečeval, dokler ni bila ujeta le laserska svetloba na objektu, ki ga skeniram. Ko sem imel to sliko, sem v vsaki vrstici našel najsvetlejšo slikovno piko. dobite črto enega piksla na vrstico, ki meji na levo stran laserske črte. Vsak piksel je bil nato pretvorjen v točko v 3D prostoru in shranjen v matriki, kot je opisano v razdelku o ustvarjanju mrež. Rezultati teh korakov so vidni na četrti sliki.

Nadzor motorja

Ko sem lahko uspešno obdelal eno samo sliko, da sem dobil rezino predmeta, sem moral imeti možnost, da zavrtim predmet, da naredim novo sliko z drugačnim kotom. V ta namen sem nadzoroval koračni motor pod ploščadjo, na kateri sedi predmet, ki ga skeniramo. Temelj naše koračne funkcije sem zgradil tako, da sem ustvaril spremenljivko za spremljanje stanja motorja in mikrokorake s preklapljanjem vsakega od štirih vhodov motorja.

Ustvarjanje mreže Če želite ustvariti mrežo iz vseh obdelanih slik, sem najprej moral pretvoriti vsako belo slikovno piko na obdelani sliki v točko v 3D prostoru. Ker zbiram posamezne rezine predmeta z valjasto simetrijo, je bilo smiselno začeti zbirati valjaste koordinate. To je bilo smiselno, saj bi višina slike lahko predstavljala os z, razdalja od središča vrtljive mize bi lahko predstavljala os R, vrtenje koračnega motorja pa teta os. Ker pa sem naše podatke shranil v valjastih koordinatah, sem moral vsako od teh točk pretvoriti v kartezične koordinate.

Ko so bila ta oglišča ustvarjena, so bila shranjena na seznamu, naveden pa je bil na drugem seznamu, ki je vseboval sezname točk, ustvarjenih za vsako posneto sliko. Ko so bile vse slike obdelane in pretvorjene v točke, sem moral izbrati oglišča, ki sem jih dejansko želel predstaviti v končni mreži. Želel sem, da se vključi zgornje in spodnje oglišče, nato pa sem na podlagi ločljivosti izbral enakomerno razporejeno število točk za vsako sliko. Ker niso bili vsi seznami točk enake dolžine, sem jih moral izravnati tako, da sem našel seznam z najmanjšim številom točk in odstranil oglišča z vseh drugih seznamov, dokler niso vsi izenačeni. ustvarite mrežo. Odločil sem se, da našo mrežo oblikujem po standardu datoteke.obj, saj je preprosta in natisljiva v 3D.

Vgrajena funkcija

Ko je naprava delovala, sem jo polirala z dodajanjem popolne vgrajene funkcije. To je pomenilo odstranitev tipkovnice, miške in monitorja ter nam po končani obdelavi brezžično poslalo datoteko.obj. Za začetek sem spremenil kodo.bashrc, da se samodejno prijavi in ob zagonu zažene glavni program python. To je bilo storjeno z uporabo sudo raspi-config in izbiro »Samodejna prijava v konzolo« ter z/z vrstico »sudo python /home/pi/finalProject/FINAL.py« v /home/pi/.bashrc. Poleg tega sem tudi dodal gumb in LED status za vnos in izhod uporabnika. Gumb bi uporabniku omogočil, da napravi pove, kdaj naj začne skeniranje, LED pa uporabniku stanje stroja. Če LED sveti, je naprava pripravljena za začetek novega skeniranja. Če LED utripa, naprava trenutno išče. Če je LED v pisarni, je prišlo do programske napake, ki zahteva ponovni zagon sistema. Nazadnje sem napravi omogočil pošiljanje datoteke.obj po e -pošti. To je bilo storjeno z uporabo knjižnic smtplib in e -pošte. Ta sposobnost pošiljanja e -poštnih sporočil nam je omogočila zelo priročen in brezžičen način, da uporabnikom dostavljeno proizvedeno datoteko omogoči dostop do številnih različnih platform.

7. korak: Integracija

Integracija
Integracija

Po izdelavi različnih kosov naprave sem jo sestavil skupaj. Zgornja slika prikazuje vrstni red:

(a) sestavljena škatla zunaj

(b) sestavljena škatla v notranjosti s kamero in laserjem

(c) od znotraj pogled na posteljo elektronike

(d) zadnji del Pi z dostopom do vrat Pi in vhodom motorja 5V

(e) potisni gumb z obročem LED in lučko stanja na sprednji strani naprave

8. korak: Rezultati

Rezultati
Rezultati
Rezultati
Rezultati
Rezultati
Rezultati
Rezultati
Rezultati

Laserski 3D skener je lahko skeniral predmete z dostojno natančnostjo. Značilnosti predmetov so različne in prepoznavne, dele pa je bilo zelo enostavno natisniti v 3D s programsko opremo za rezanje, kot je Repetier. Zgornje slike prikazujejo nekaj vzorčnih posnetkov lesa in gumijaste račke.

Ena naših največjih ugotovitev in uspehov, ki sem jih odkril med preskušanjem, je bila doslednost naprave. Skozi več poskusov istega predmeta je skener lahko ustvaril datoteko.obj, ki je bila vsakič zelo zelo podobna, tudi če smo nekoliko spremenili postavitev predmeta. Kot je razvidno iz treh ločenih pregledov, so si vsi zelo podobni in zajemajo iste podrobnosti in enako količino podrobnosti. Na splošno sem bil zelo navdušen nad doslednostjo in robustnostjo našega sistema.

Ena od spremenljivk, ki sem jih res uspel nastaviti, je ločljivost skeniranja. Ker je v koraku 400 korakov, lahko izberem, kako velik je vsak ΔΘ, da narekuje kotno ločljivost. Privzeto imam kotno ločljivost nastavljeno na 20 ponovitev, kar pomeni, da se vsak okvir, motor vrti za 20 korakov (400/20 = 20). To je bilo izbrano predvsem zaradi časa - tako skeniranje traja približno 45 sekund. Če pa želim bolj kakovostno skeniranje, lahko število ponovitev povečam vse do 400. To daje veliko več točk za izdelavo modela, kar omogoča veliko bolj podrobno skeniranje. Poleg kotne ločljivosti lahko prilagodim tudi navpično ločljivost ali koliko različnih točk izberem za iskanje vzdolž laserske rezine. Za podobne časovne obresti imam to privzeto vrednost nastavljeno na 20, vendar jo lahko za boljše rezultate povečam. Pri igranju s temi parametri kotne ločljivosti in prostorske ločljivosti sem spodaj na zadnji sliki lahko sestavil rezultate različnih pregledov. Vsaka oznaka je oblikovana tako, da je kotna ločljivost x prostorska ločljivost. Kot je razvidno iz privzetih nastavitev skeniranja, so značilnosti rac prepoznavne, vendar niso podrobne. Ko pa povečujem ločljivost, se začnejo kazati posamezne natančne lastnosti, vključno z očmi, kljunom, repom in krili na raci. Skeniranje slike z najvišjo ločljivostjo je trajalo približno 5 minut. Videti tako visoko dosegljivo ločljivost je bil zelo velik uspeh.

Omejitve

Kljub uspešnim rezultatom projekta je pri oblikovanju in izvedbi še nekaj omejitev. Z uporabo laserja prihaja do številnih težav pri razpršitvi svetlobe. Številni predmeti, ki sem jih poskušal skenirati, bodisi prosojni, sijoči ali zelo temni, so se izkazali za moteče pri odbijanju svetlobe od površine. Če bi bil predmet prosojen, bi se svetloba absorbirala in razpršila, kar bi povzročilo zelo hrupno branje rezin. V svetlečih in temnih predmetih bi se svetloba odbijala ali absorbirala do te mere, da bi jo bilo težko pobrati. Poleg tega, ker uporabljam kamero za zajemanje značilnosti predmetov, je njeno zaznavanje omejeno z vidnim poljem, kar pomeni, da vbočene predmete in ostre kote pogosto blokirajo drugi deli predmeta. To je prikazano v našem primeru gumijaste race, saj bo rep včasih pri skeniranju izgubil ukrivljenost. Kamera lahko zazna tudi samo površinske strukture, kar pomeni, da lukenj ali notranjih geometrij ni mogoče zajeti. Vendar je to pogosta težava, ki jo imajo tudi številne druge rešitve skeniranja.

Naslednji koraki

Čeprav sem bil zadovoljen z rezultati našega projekta, je bilo nekaj stvari mogoče izvesti, da bi bilo bolje. Za začetek je v trenutnem stanju mogoče ločljivost skeniranja spremeniti le s spreminjanjem spremenljivk ločeno ločene ločljivosti v naši kodi. Da bi bil projekt bolj vgrajen, bi lahko vključili potenciometer ločljivosti, tako da lahko uporabnik spremeni ločljivost, ne da bi mu bilo treba na optični bralnik priključiti monitor in tipkovnico. Poleg tega optični bralnik ustvari slike, ki so včasih videti nazobčane. Če želite to odpraviti, bi lahko uporabili tehnike glajenja mrež, da bi izravnali nepravilnosti in ostre vogale. Nazadnje sem ugotovil, da se koordinate slikovnih pik ne ujemajo dobro z resničnim svetom. Mreže, ki sem jih ustvaril, so bile 6 do 7 -krat večje od dejanskega predmeta. V prihodnosti bi bilo koristno uvesti način povečevanja mrežnih očes, da bodo natančnejša glede na dejansko velikost predmeta.

9. korak: Viri

Vključil sem kodo, datoteke STL za tiskanje in datoteke DXF za rezanje za celoten projekt.

Natečaj Raspberry Pi 2020
Natečaj Raspberry Pi 2020
Natečaj Raspberry Pi 2020
Natečaj Raspberry Pi 2020

Prva nagrada na tekmovanju Raspberry Pi 2020

Priporočena: