Sisukord:
- Samm: inspiratsioon
- Samm: tööriistad ja osad
- 3. samm: kõrgetasemeline disain
- Samm: riistvara
- Samm: elektroonika
- 6. samm: tarkvara
- 7. samm: integreerimine
- 8. samm: tulemused
- 9. samm: ressursid
Video: Raspberry Pi laserskanner: 9 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Laserskanner on Raspberry Pi sisseehitatud süsteemiseade, mis suudab 3D -printimise abil objektid digiteerida.obj võrgusilma failideks. Seade teeb seda, kasutades arvuti nägemise teostamiseks joonlaserit ja integreeritud PiCami. Laser paikneb laserist 45 kraadise nurga all ja projitseerib objekti ühele vertikaalsele lõigule erkpunase joone. Kaamera tuvastab viilu kauguse keskelt, et saada võrgusilma. Objekt tsentrifuugitakse pöörleval kandikul ja protsessi korratakse, kuni kogu objekt on skaneeritud. Loodud.obj -fail saadetakse lõpuks kasutajale meilile, muutes süsteemi täielikult eraldiseisvaks ja manustatud.
See juhend juhendab seadme ehitamist, mõningaid tulemusi ja tulevasi samme.
Samm: inspiratsioon
Innuka tegijana olen juba mitu aastat tegelenud 3D -printimise ja kindla modelleerimisega. Olen töötanud paljude erinevate prototüüpimisvahenditega alates CNC ruuteritest kuni laserlõikuriteni ja lõpetades 3D -printeritega. Üks seade, mida minu kohalik tegijaruum on veel ostmata, on olnud 3D -skanner - ja ma võin teile öelda, miks.
Odavamad (mõnisada dollarit) olid ebausaldusväärsed, nõudsid ideaalseid tingimusi ja andsid ikka päris räbedaid tulemusi. Kallid olid… noh, kallid, ulatudes mitme tuhande dollarini, mistõttu ei olnud selle funktsioon paljudel juhtudel seda väärt. Peale selle valin ma sagedamini mõõtmisi ja kavandan mudeli nullist, kui tegelen skaneerimisel loodud pindvõrguga.
Seetõttu tahtsin ehitada eraldiseisva eelarve skanneri, et näha, kui hästi saan objekti riiulil olevate komponentide abil skannida.
Pärast mõningast uurimistööd nägin, et paljud 3D -skannerid kasutasid pöörleva mudeli loomiseks pöörlevat platvormi ja seejärel erinevaid andureid, et mõõta kaugust keskusest. Paljud neist kasutasid Kinectiga sarnaseid topeltkaameraid. Lõpuks sattusin Yscannerile, mis on madala eraldusvõimega skanner, mis kasutab laserit. Vaadates lihtsust ja teostatavust, tundus see lasertehnika, mille puhul laser on kaamera suhtes nihutatud, et mõõta kaugust keskusest, nagu selge tee edasi.
Samm: tööriistad ja osad
Osad:
- Vaarika Pi 35,00 dollarit
- Raspberry Pi kaamera V2 30,00 dollarit
- LEDid, takistid ja juhtmed
- 3D printimise hõõgniit
- 12x12x0,125 puidust lehte
- M3 riistvara
- Sammumootor - 14 dollarit
- Liini laser - 8 dollarit
- LN298 samm -mootoridraiverid - 2,65 dollarit
- Metallist nupp - 5 dollarit
Tööriistad:
- Jootekolb
- Laserlõikur
- 3D printer
- Kruvikeeraja
- Tangid
3. samm: kõrgetasemeline disain
Selle disaini keskne komponent on joonlaser, mis projitseerib objektide vertikaalsele viilule. Seda projektsiooni saab pildistada kaameraga, selle perspektiivi korrigeerida ja enne pilditöötlust filtreerida. Pilditöötluses võiks koguda joone iga segmendi vahelist kaugust objekti keskpunktist. Radiaalsete koordinaatide korral annaks see pilt nii r- kui ka z -komponendi. Seejärel saavutatakse kolmas mõõde Θ, pöörates objekti uuele viilule. See mõiste on näidatud esimesel joonisel.
Ülalkirjeldatud toimingute tegemiseks kasutasin meie keskseks arvutusüksuseks Raspberry Pi. Ma ühendasin Pi -ga samm -mootori ja mootorijuhi, mida toidab väline 5 V toide ja mida juhivad Pi GPIO -tihvtid. Pi 3,3 V liinile pandi joonlaser ja Pi kaamera kaamera sisendisse kinnitati PiCam. Lõpuks paigaldati lihtne alla tõmmatud nupp ja oleku LED, mis näitab kasutajale, millises olekus süsteem on. Kogu süsteem on kokku võetud süsteemi plokkskeemil.
Algusest peale oli kavas paigutada elektroonika laserlõigatud kasti, mida hoiti koos T-pilude ja M3 riistvaraga. Elektroonika oleks peidetud silma all alumisse lahtrisse ja kaas võimaldaks hõlpsat juurdepääsu objektide paigutamisele pöörleval kandikul. See kaas on vajalik selleks, et minimeerida süsteemi lekkiva valguse hulka, kuna see väline valgus võib viimasel skaneerimisel müra tekitada.
Samm: riistvara
Nagu eespool näha, kasutasin enne laserlõikamise või 3D -printimise alustamist Autodesk Fusion 360, et teha meie disainist üksikasjalik 3D -mudel. Ülevaates on seade lihtne laseriga lõigatud hingedega kaanega karp. Seadmel on kaks peamist kihti: elektroonikavoodi ja põhivoodi, aukudega juhtmete jaoks kahe kihi vahel.
Suurem osa meie karbist valmistati laserlõikuriga, disainilahendused toodeti Fusion 360 -s ja lõigati Epilog Zing 40 W laserlõikuriga. Meie kujundused on näidatud ülaltoodud joonistel. Ülevalt vasakult paremale liikudes on tükid põhivoodi, elektroonikavoodi, kaks tükki kaane jaoks, tagaosa, esiosa ja kaks küljetükki. Põhivoodil on kolm peamist väljalõiget: üks samm -mootori paigaldamiseks, teine laserist juhtmete juhtimiseks ja teine PiCami laia kaabli juhtimiseks. Voodil on kinnitusavad Pi, leivalaua ja mootorijuhi kinnitamiseks ning suurem väljalõige astmemootorile juurdepääsuks. Kaanetükid klõpsatavad kokku, moodustades ülaloleva kolmnurkse tüki ja liigend on lihtne väljapressimine, mis on külgplaatide ava läbimõõdu laius. Tagaosal ja ühel külgmisel küljel on pilud, nii et Pi portidele (HDMI, USB, Ethernet, toide) pääseb hõlpsasti juurde. Esikülg on lihtne tükk, mille lõpuks tegin nupu ja LED-i kinnitamiseks käsipuuriga augud. Nagu kõikidel tükkidel näha, hoiab meie osi koos M-riistvara, kasutades T-liigeseid ja pilusid. See on meetod laserlõigatud tükkide hoidmiseks risti ja kindlalt. Tükkide uimed joonduvad teiste tükkide piludega ja servadel olev t-kujuline lõige annab ruumi M3 mutri keeramiseks nendesse. See võimaldab meil seejärel kasutada M3 kruvi, et lukustada tükid kokku väga väikese keerutamisruumiga, ilma et komplekt oleks täielikult püsiv.
Valisin suurema osa meie osadest laserlõikuri abil selle kiiruse ja lihtsuse tõttu. Kuid ma pidin siiski 3D -geomeetria tõttu mõned tükid 3D -printima, mida oleks lõikuril raskem luua. Esimene tükk oli joonlaserihoidik. See tükk pidi olema paigaldatud põhivoodile kaamera vaatepunktist 45 kraadi võrra ja sellel peaks olema auk, mis sobiks laseriga tihedalt hõõrdumisele. Pidin looma ka mootorikinnituse, kuna mootori võll oli nii pikk. Kinnituse hõõrdumine sobis laserlõigatud osadega ja alandas mootori kinnitamise tasapinda nii, et pöörlev platvorm oleks põhipõhjaga samal tasemel.
Samm: elektroonika
Selle projekti juhtmestik oli väga lihtne, kuna 3D -skanner ei vajanud liiga palju välisseadmeid. Mootor, nupp, LED, laser ja kaamera tuli ühendada Pi -ga. Nagu näidatud, ühendasin tihvtide kaitsmiseks takistid järjestikku iga tihvtiga, mida kasutasime. Üks GPIO tihvt oli pühendatud oleku LED -i juhtimisele, mis süttib, kui seade on kasutusvalmis, ja pulseerib PWM -iga, kui seade töötas. Teine GPIO tihvt oli ühendatud üles tõmmatud nupuga, registreerides HIGH, kui nuppu ei vajutatud, ja LOW, kui nuppu vajutati. Lõpuks pühendasin samm -mootori juhtimiseks neli GPIO tihvti.
Kuna meie mootor pidi astuma ainult teatud ulatuses ilma kiiruse juhtimist nõudmata, valisime lihtsama samm -mootoriga draiveri (L298N), mis lihtsalt tõstab juhtjooned mootori sisenditesse. Et teada saada, kuidas astmelisi mootoreid väga madalal tasemel kasutada, viitasime nii L298N andmelehele kui ka Arduino raamatukogule. Sammumootoritel on magnetiline südamik, millel on vahelduva polaarsusega sõrmed. Neli juhtmest on mähitud kahe elektromagneti juhtimiseks, millest igaüks toidab mootori kõiki vastaskülgi. Seega, muutes sõrmede polaarsust, oleme võimelised astuma sammu ühe sammu võrra. Selle teadmisega, kuidas stepperid riistvaratasandilt töötasid, suutsime astmeid palju kergemini juhtida. Otsustasime oma samm -mootori välja lülitada laboris 5V toiteallikast, mitte Pi -st, kuna selle maksimaalne voolutugevus on umbes 0,8 A, mis on rohkem kui Pi suudab toita.
6. samm: tarkvara
Selle projekti tarkvara saab jagada nelja põhikomponenti, mis omavahel suhtlevad: pilditöötlus, mootorijuhtimine, võrgusilma loomine ja manustatud funktsioonid.
Tarkvara kokkuvõttena võime vaadata esimest joonist. Süsteemi käivitamisel logib.bashrc automaatselt Pi -sse sisse ja hakkab meie python -koodi käitama. Süsteem süttib olekutuld, andes kasutajale teada, et see on õigesti käivitatud, ja ootab nupuvajutust. Seejärel saab kasutaja skannitava objekti paigutada ja kaane sulgeda. Pärast nupule vajutamist süttib LED, andes kasutajale teada, et seade töötab. Seade pöörleb pilditöötluse ja mootori juhtimise vahel, kuni täielik pöörlemine on lõppenud ja kõik objekti andmed on kogutud. Lõpuks luuakse võrk ja fail saadetakse e -postiga eelnevalt valitud e -posti aadressile. See taaskäivitab tsükli ja masin on valmis nupuvajutusega uuesti skannima.
Pildi töötlemine
Esimese asjana rakendati jäädvustatud pildi töötlemine, et eraldada pildile salvestatud teave vormi, mida saaks kasutada ruumipunktide massiivi loomiseks. Alustuseks pildistasin platvormil olevat objekti koos kogu taustamüraga, mille laser tekitas kasti tagaküljele ja hajus. Sellel pildil oli toores vormis kaks peamist probleemi. Esiteks vaadati objekti kõrgendatud perspektiiviga nurga all ja teiseks oli palju taustamüra. Esimese asjana pidin arvestama selle vaatenurgaga, sest foto kasutamine sellisena, nagu see on, ei võimaldaks meil objekti ühtlast kõrgust määrata. Nagu näha teisel joonisel, on tagurpidi oleva L -kuju kõrgus ühtlane; kuid kuna üks külg on teisest pikem, näivad nad vaatajale kõige lähemal asuvas servas erineva kõrgusega.
Selle parandamiseks pidin kujutise tööruumi muutma ristkülikuks sellest trapetsikujulisest vormist, milles see varem oli. Selleks kasutasin selle lingi pakutavat koodi, mis pildi ja nelja punkti andmisel kärbib pildi nelja punkti vahel ja muudab kärbitud pildi perspektiivi kompenseerimiseks. See teisendus kasutab nelja punkti trapetsikujulise kuju asemel ristküliku loomiseks, nagu on näha kolmandal joonisel.
Järgmine probleem, mis tuli lahendada, oli taustamüra välisvalguse ja laser ise peegelduva valguse näol. Selleks filtreerisin valguse OpenCV funktsiooni inRange () abil. Seadsin läve punaseks tuleks ainult teatud tasemel. Õige väärtuse saamiseks alustasin leebe lävega ja suurendasin läve taset seni, kuni ainsaks valguseks oli skaneeritava objekti laservalgus. Kui see pilt oli, leidsin iga rea heledaima piksli saada rida ühe piksli kohta rea kohta, mis piirnes laserjoone kõige vasakpoolsema küljega. Seejärel muudeti iga piksel 3D -ruumis tipuks ja salvestati massiivi, nagu on kirjeldatud võrgusilma loomise osas. Nende sammude tulemusi on näha neljandal joonisel.
Mootori juhtimine
Pärast seda, kui olin suutnud ühe pildi edukalt töödelda objekti viilu saamiseks, pidin saama objekti pöörata, et teha uus pilt teise nurga all. Selleks juhtisin astmemootorit selle platvormi all, millel skannitav objekt asub. Ehitasin meie astmefunktsiooni aluse, luues muutuja, mis jälgib mootori olekut, ja mikrosamm, lülitades kõiki nelja mootori sisendit.
Võrgu loomine Kõigist töödeldud piltidest võrgusilma loomiseks pidin esmalt teisendama iga töödeldud kujutise valge piksli 3D -ruumi tipuks. Kuna kogun silindrilise sümmeetriaga objekti üksikuid viilusid, oli mõistlik hakata silindrilisi koordinaate koguma. See oli loogiline, kuna pildi kõrgus võib tähistada z-telge, kaugus pöörleva laua keskpunktist võib kujutada R-telge ja samm-mootori pöörlemine võib kujutada teeta-telge. Kuna aga salvestasin meie andmed silindrilistesse koordinaatidesse, pidin kõik need tipud teisendama ristkoordinaatideks.
Kui need tipud olid loodud, salvestati need loendisse ja nimetatud loend salvestati teise loendisse, mis sisaldas iga jäädvustatud pildi jaoks loodud tippude loendeid. Kui kõik pildid olid töödeldud ja tippudeks teisendatud, pidin valima tipud, mida ma tegelikult soovisin, et need oleksid viimases võrgus. Tahtsin, et kaasataks ülemine ja alumine tipp ning seejärel valisin eraldusvõime põhjal iga pildi jaoks ühtlaselt jaotatud tippude arvu. Kuna mitte kõik tippude loendid ei olnud ühepikkused, pidin need ühtlustama, leides väikseima arvu tippudega loendi ja eemaldades tipud kõigist teistest loenditest, kuni need kõik on ühtlased. Loodud tippude loenditega sain nüüd luua võrk. Valisin meie võrgu vormindamise.obj -failistandardi järgi, kuna see on lihtne ja 3D -printitav.
Sisseehitatud funktsioon
Pärast seadme funktsionaalsust lihvisin selle, lisades täieliku sisseehitatud funktsionaalsuse. See tähendas klaviatuuri, hiire ja monitori eemaldamist ning selle saatmist juhtmevabalt meile pärast töötlemise lõppu.obj -faili. Alustuseks muutsin.bashrc koodi, et automaatselt sisse logida ja käivitada käivitamisel peamine pythoni programm. Seda tehti, kasutades sudo raspi-config ja valides “Console Autologin” ning lisades reale “sudo python /home/pi/finalProject/FINAL.py” /home/pi/.bashrc. Lisaks sellele lisatud nupp ja oleku LED kasutaja sisendiks ja väljundiks. Nupp laseb kasutajal seadmel öelda, millal skannimist alustada, ja LED -indikaator teavitab kasutajat masina olekust. Kui LED -tuli põleb, on seade uue skannimise alustamiseks valmis. Kui valgusdiood vilgub, skaneerib seade praegu. Kui valgusdiood on kontoris, on tarkvara viga, mis nõuab süsteemi taaskäivitamist. Lõpuks lubasin seadmel saata.obj -faili e -posti teel. Seda tehti smtplibi ja meiliteekide abil. See võimalus e -kirju saata andis meile väga mugava ja juhtmevaba viisi edastada toodetud fail kasutajale, et pääseda juurde paljudele erinevatele platvormidele.
7. samm: integreerimine
Pärast seadme erinevate osade valmistamist panin selle kokku. Ülaltoodud joonis näitab järjekorda:
a) kokkupandud kast väljaspool
b) kaamera ja laseriga kokkupandud kast
c) elektroonikaseadme sisevaade
d) Pi tagaküljel on juurdepääs Pi -portidele ja 5 V mootorisisendile
e) LED -rõnga ja olekutulega vajutatav nupp seadme esiküljel
8. samm: tulemused
Laser -3D -skanner suutis objekte korraliku täpsusega skaneerida. Objektide omadused on selged ja äratuntavad ning osi oli väga lihtne 3D -printida, kasutades viilutamistarkvara, näiteks Repetier. Ülaltoodud joonistel on näidatud mõned puidutüki ja kummipartii näidisskaneeringud.
Üks meie suurimaid avastusi ja õnnestumisi, mille testimisel avastasin, oli seadme järjepidevus. Sama objekti mitme katse jooksul suutis skanner toota.obj -faili, mis oli iga kord väga sarnane, isegi kui me objekti paigutust veidi muutsime. Nagu näha kolmes eraldi skaneerimises, näevad nad kõik välja väga sarnased, jäädvustades samu detaile ja sama palju detaile. Üldiselt avaldas mulle väga muljet meie süsteemi järjepidevus ja vastupidavus.
Üks muutujaid, mida ma tõesti suutsin häälestada, on skaneeringute eraldusvõime. Kuna stepperis on 400 sammu, saan valida nurga eraldusvõime dikteerimiseks, kui suur on iga ΔΘ. Vaikimisi on mul nurga eraldusvõimeks seatud 20 iteratsiooni, mis tähendab, et iga kaadri korral pöörleb mootor 20 sammu võrra (400/20 = 20). See valiti peamiselt aja huvides - sel viisil skannimiseks kulub umbes 45 sekundit. Kui aga soovin palju kvaliteetsemat skannimist, võin suurendada iteratsioonide arvu kuni 400. See annab mudeli koostamiseks palju rohkem punkte, mis muudab skaneerimise palju üksikasjalikumaks. Lisaks nurga eraldusvõimele saan reguleerida ka vertikaalset eraldusvõimet või seda, kui palju erinevaid punkte valin mööda laserlõiku küsitlemiseks. Sarnase ajahuvi korral on mul vaikeseadeks seatud 20, kuid paremate tulemuste saamiseks saan seda suurendada. Nende nurgelise eraldusvõime ja ruumilise eraldusvõime parameetritega mängides suutsin viimasel joonisel kokku panna erinevate skaneeringute tulemused. Iga silt on vormindatud selliselt, et see oleks nurga eraldusvõime x ruumiline eraldusvõime. Nagu näha skannimise vaikeseadetest, on pardi omadused äratuntavad, kuid mitte üksikasjalikud. Kuid resolutsiooni suurendades hakkavad ilmnema üksikud täpsed omadused, sealhulgas pardi silmad, nokk, saba ja tiivad. Kõrgeima eraldusvõimega pildi skannimiseks kulus umbes 5 minutit. Selle kõrge saavutatava resolutsiooni nägemine oli väga suur edu.
Piirangud
Vaatamata projekti edukatele tulemustele on projekteerimisel ja teostamisel siiski mõned piirangud. Laseri kasutamisega kaasneb palju probleeme valguse hajumisega. Paljud objektid, mida proovisin skannida ja mis olid kas poolläbipaistvad, läikivad või väga tumedad, osutusid pinna pinnalt peegelduvale tülikaks. Kui objekt oleks poolläbipaistev, neelduks ja hajuks valgus, tekitades viilude väga mürarikka lugemise. Läikivates ja tumedates objektides peegeldub valgus või neeldub see nii kaugele, et seda on raske üles võtta. Lisaks, kuna kasutan objektide omaduste jäädvustamiseks kaamerat, on selle tajumine piiratud vaateväljaga, mis tähendab, et nõgusad objektid ja teravad nurgad on sageli objekti teiste osade poolt blokeeritud. See on näidatud meie kummist pardi näites, sest saba kaotab skannimisel mõnikord oma kumeruse. Kaamera suudab tuvastada ka ainult pinnastruktuure, mis tähendab, et auke või sisemist geomeetriat ei saa jäädvustada. See on aga tavaline probleem, mis esineb ka paljudel teistel skannimislahendustel.
Järgmised sammud
Kuigi ma olin meie projekti tulemustega rahul, oli paar asja, mida saaks selle paremaks muutmiseks rakendada. Alustuseks saab praeguses olekus skaneerimise eraldusvõimet muuta ainult meie koodi kõvakodeeritud eraldusvõime muutujate muutmisega. Projekti integreeritumaks muutmiseks võiks lisada eraldusvõime potentsiomeetri, et kasutaja saaks resolutsiooni muuta ilma monitori ja klaviatuuri skanneriga ühendamata. Lisaks loob skanner pilte, mis võivad mõnikord näida sakilised. Selle parandamiseks võiks ebatasasuste ja karmide nurkade silumiseks rakendada võrgusilma silumisvõtteid. Lõpuks leidsin, et pikslite koordinaadid ei skaleeru pärismaailma hästi. Minu loodud võrgusilmad olid tegelikust objektist 6–7 korda suuremad. Tulevikus oleks kasulik rakendada võrgusilma skaleerimise meetodit, et need oleksid objekti tegeliku suuruse suhtes täpsemad.
9. samm: ressursid
Olen lisanud koodi, STL -failid printimiseks ja DXF -failid lõikamiseks kogu projekti jaoks.
Raspberry Pi konkursi 2020 esimene auhind
Soovitan:
Nutikas kodu Raspberry Pi poolt: 5 sammu (piltidega)
Nutikas kodu Raspberry Pi poolt: Seal on juba mitu toodet, mis muudavad teie korteri nutikamaks, kuid enamik neist on patenteeritud lahendused. Aga miks on vaja nutitelefoniga valguse vahetamiseks Interneti -ühendust? See oli üks põhjus, miks ma oma Smar'i üles ehitasin
Kuidas: Raspberry PI 4 peata (VNC) installimine RPI-pildistaja ja piltidega: 7 sammu (koos piltidega)
Kuidas: Raspberry PI 4 peata (VNC) installimine Rpi-pildistaja ja piltidega: kavatsen seda Rapsberry PI-d kasutada oma blogis hunniku lõbusate projektide jaoks. Vaadake seda julgelt. Tahtsin uuesti oma Raspberry PI kasutamist alustada, kuid mul polnud uues asukohas klaviatuuri ega hiirt. Vaarika seadistamisest oli tükk aega möödas
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
Arvuti demonteerimine lihtsate sammude ja piltidega: 13 sammu (piltidega)
Arvuti demonteerimine lihtsate sammude ja piltidega: see on juhis arvuti demonteerimiseks. Enamik põhikomponente on modulaarsed ja kergesti eemaldatavad. Siiski on oluline, et oleksite selles osas organiseeritud. See aitab vältida osade kaotamist ja ka kokkupanekut