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, Juli
Anonim
Image
Image
Laserski skener Raspberry Pi
Laserski skener Raspberry Pi

Laserski skener je ugrađeni sistemski uređaj u 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čunarskog vida. Laser je postavljen 45 stepeni koso od lasera i projicira svijetlocrvenu 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 e -poštom korisniku, čineći sistem potpuno samostalnim i ugrađenim.

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

Korak 1: Inspiracija

Inspiracija
Inspiracija
Inspiracija
Inspiracija

Kao strastveni proizvođač, već nekoliko godina radim 3D štampanje i solidno modeliranje. Radio sam sa mnogo različitih alata za izradu prototipova, od CNC rutera do laserskih rezača do 3D štampača. Jedan uređaj koji moj lokalni proizvođač prostora 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 jadne rezultate. Skupi su bili … pa, skupi, kretali su se i do nekoliko hiljada dolara, pa se njegova funkcija u mnogim slučajevima nije isplatila. Povrh toga, više puta odlučujem se uzeti mjerenja i dizajnirati 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 sa police.

Nakon nekog istraživanja, vidio sam da su mnogi 3D skeneri koristili rotirajuću platformu, a zatim i različite senzore za mjerenje udaljenosti od središta za izgradnju rotacijskog modela. 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 izvodljivost, ova laserska tehnika, u kojoj se laser sija pomakom u odnosu na kameru radi mjerenja udaljenosti od centra, izgledala je kao jasna putanja prema naprijed.

Korak 2: Alati i dijelovi

Dijelovi:

  • Raspberry Pi $ 35.00
  • Raspberry Pi kamera V2 30,00 USD
  • LED diode, otpornici i žice
  • 3D filament za štampanje
  • 12x12x0.125 drveni limovi
  • M3 hardver
  • Koračni motor - 14 USD
  • Line Laser - 8 USD
  • Upravljački programi koračnih motora LN298 - 2,65 USD
  • Metalni taster - 5 USD

Alati:

  • Lemilica
  • Laserski rezač
  • 3D štampač
  • Šrafciger
  • Kliješta

Korak 3: Dizajn na visokom nivou

Dizajn na visokom nivou
Dizajn na visokom nivou
Dizajn na visokom nivou
Dizajn na visokom nivou

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

Da bih izveo gore opisane radnje, koristio sam Raspberry Pi kao našu centralnu računarsku jedinicu. Priključio sam koračni motor i pokretač motora na Pi, napajani vanjskim 5V napajanjem i kontrolirani Pi -jevim GPIO pinovima. Linijski laser je postavljen na liniju od 3,3 V na Pi, a PiCam je priključen na ulaz kamere na Pi. Na kraju, instalirano je jednostavno povučeno dugme i statusna LED lampica koja pokazuje korisniku u kakvom je stanju sistem. Cijeli sistem je sažet u sistemskom blok dijagramu.

Od početka je planirano da se elektronika smjesti u kutiju za lasersko rezanje koja se drži 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 sistem, jer ovo 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 štampanje, koristio 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. Sa gornje lijeve strane, pomičući se desno, komadi su glavni krevet, elektronički ležaj, dva dijela za poklopac, stražnji dio, prednji dio i dva bočna dijela. U glavnom krevetu postoje tri glavna izreza: jedan za postavljanje koračnog motora, jedan za usmjeravanje žica od lasera i jedan za postavljanje širokog kabela PiCam -a. Komad kreveta ima rupe za pričvršćivanje za pričvršćivanje Pi, matične ploče i upravljačkog programa 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). Prednji dio 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 zaglaviti u njih bez okretanja. To nam omogućuje da tada 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 svoje 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 komad je trebao biti montiran na glavni krevet pod uglom od 45 stepeni od pogleda kamere i imao rupu tako da se laser može čvrsto uklopiti u njega. Morao sam i stvoriti nosač motora jer je osovina motora bila tako duga. Montažno trenje 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, dugme, LED, laser i kamera morali su biti povezani na Pi. Kao što je prikazano, pobrinuo sam se da priključim otpornike u seriju sa svakim pinom koji smo koristili kako bismo zaštitili pinove. Jedan GPIO pin bio je posvećen kontroli statusa LED -a, koji bi svijetlio kada je uređaj bio spreman za upotrebu i pulsirao sa PWM -om dok je uređaj radio. Još jedan GPIO pin je spojen na izvučeno dugme, registrujući HIGH kada dugme nije pritisnuto i LOW kada je dugme pritisnuto. Na kraju, četiri GPIO igle sam posvetio pokretanju koračnog motora.

Budući da je naš motor morao koračati samo u određenoj mjeri bez potrebe za kontrolom 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 niskom nivou, pozvali smo se i na podatkovnu tablicu L298N i na Arduino biblioteku. Koračni motori imaju magnetsko jezgro s izbočenim prstima promjenjivog polariteta. Četiri žice su omotane za kontrolu dva elektromagneta koji napajaju svaki suprotni prst u motoru. Tako, promjenom polariteta prstiju, možemo gurnuti stepper za jedan korak. S ovim znanjem o tome kako steperi rade s hardverskog nivoa, uspjeli smo mnogo lakše kontrolirati stepere. Odlučili smo se za napajanje našeg koračnog motora s napajanja od 5 V u laboratoriji, a ne iz Pi -a zbog maksimalne potrošnje 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 sistem pokreće,.bashrc se automatski prijavljuje u Pi i počinje izvršavati naš python kod. Sistem pali statusnu lampicu kako bi korisniku dao do znanja da je pravilno pokrenut i čeka pritisak na dugme. Korisnik tada može staviti stavku za skeniranje i zatvoriti poklopac. Nakon pritiska na dugme, 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 potpuna rotacija ne završi i dok se ne 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 ponovo pokreće ciklus i mašina je spremna za ponovno skeniranje pritiskom na dugme.

Obrada slike

Prva stvar koja je implementirana bila je obrada snimljene slike kako bi se informacije pohranjene na slici izdvojile u oblik koji se može koristiti za stvaranje niza tač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 slika je imala dva glavna problema u sirovom obliku. Prvo, objekt se posmatrao pod uglom 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 da odredimo konzistentnu visinu objekta. Kao što se vidi na drugoj slici, visina naopako okrenutog oblika „L“je dosljedna; međutim, s obzirom da je jedna strana duža 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 ranije 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 problem pozadinske buke u obliku vanjskog svjetla i svjetla koje reflektira sam laser. Da bih to učinio, filtrirao sam svjetlo pomoću funkcije inRange () OpenCV -a. Postavio sam prag da samo pokupi crveno svjetlo na određenom nivou. Da bih dobio ispravnu vrijednost, počeo sam s blagim pragom i povećavao nivo 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 redu do dobijte liniju od jednog piksela po redu koja graniči sa krajnje lijevom stranom laserske linije. Svaki piksel je zatim pretvoren u vrh u 3D prostoru i pohranjen u niz, kako je opisano u odjeljku za stvaranje mreže. Rezultati ovih koraka mogu se vidjeti na četvrtoj slici.

Kontrola motora

Nakon što sam uspio uspješno obraditi jednu sliku kako bih dobio dio objekta, morao sam moći rotirati objekt kako bih snimio novu sliku pod drugim 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že Da bih stvorio mrežu 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 pohranio u cilindrične koordinate, morao sam pretvoriti svaki od ovih vrhova u kartezijanske koordinate.

Nakon što su ti vrhovi stvoreni, oni su pohranjeni u listu, a navedena lista je pohranjena u drugu listu koja sadrži popis vrhova stvorenih za svaku snimljenu sliku. Nakon što su sve slike obrađene i pretvorene u vrhove, morao sam odabrati vrhove za koje sam zapravo želio da budu predstavljeni u konačnoj mreži. Htio sam da gornji vrh i donji vrh budu uključeni, a zatim sam na osnovu rezolucije odabrao ravnomjerno raspoređen broj vrhova za svaku sliku. Budući da nisu sve liste vrhova bile iste dužine, morao sam ih izravnati tako što sam pronašao popis s najmanjim brojem vrhova i uklonio vrhove sa svih ostalih lista sve dok nisu svi bili jednaki. S kreiranim listama vrhova sada sam mogao stvoriti mrežu. Odlučio sam formatirati našu mrežu prema.obj standardu datoteke jer je jednostavna i može se ispisivati 3D.

Ugrađena funkcija

Nakon što je uređaj postao funkcionalan, polirao sam ga dodavanjem potpune ugrađene funkcije. To je značilo uklanjanje tastature, miša i monitora i njihovo bežično slanje.obj datoteke nakon završetka obrade. Za početak, promijenio sam.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 “Console Autologin” te dodavanjem retka “sudo python /home/pi/finalProject/FINAL.py” u /home/pi/.bashrc. Osim toga, ja sam također dodano dugme i LED status za korisnički unos i izlaz. Dugme bi omogućilo korisniku da kaže uređaju kada treba započeti skeniranje, a LED će reći korisniku stanje mašine. Ako je LED lampica uključena, uređaj je spreman za početak novog skeniranja. Ako LED dioda pulsira, uređaj trenutno skenira. Ako je LED lampica uredska, došlo je do softverske greške koja zahtijeva ponovno pokretanje sistema. Na kraju, omogućio sam uređaju da pošalje.obj datoteku 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 redoslijedom:

(a) sklopljena kutija spolja

(b) sastavljena kutija unutra sa kamerom i laserom

(c) pogled iznutra na krevet elektronike

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

(e) dugme sa LED prstenom i lampicom 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. Osobine objekata su različite i prepoznatljive, a dijelove je bilo vrlo lako 3D ispisati pomoću softvera za rezanje poput Repetier -a. Gore navedene slike prikazuju neke uzorke skeniranja komada drveta i gumene patke.

Jedan od naših najvećih nalaza i uspjeha koje sam otkrio tokom 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 sistema.

Jedna od varijabli koje sam zaista uspio podesiti je rezolucija skeniranja. Budući da u steperu postoji 400 koraka, mogu odabrati koliko svaki ΔΘ treba diktirati kutnu rezoluciju. Prema zadanim postavkama, kutna rezolucija je postavljena na 20 iteracija, što znači da se svaki okvir, motor rotira za 20 koraka (400/20 = 20). Ovo 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 konstrukciju modela, što čini mnogo detaljnije skeniranje. Osim kutne rezolucije, mogu podesiti i vertikalnu rezoluciju ili 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 rezolucije i prostorne rezolucije, uspio sam sastaviti rezultate različitih skeniranja ispod na posljednjoj slici. Svaka oznaka je oblikovana tako da je ugaona rezolucija x prostorna rezolucija. Kao što se vidi u zadanim postavkama skeniranja, karakteristike patke su prepoznatljive, ali nisu detaljne. Međutim, kako povećavam rezoluciju, 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, još uvijek postoji nekoliko ograničenja u dizajnu i implementaciji. 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 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 te mjere da bi je bilo teško pokupiti. Nadalje, budući da kamerom snimam značajke objekata, njeno je osjećanje ograničeno linijom vidljivosti, š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 otkriti samo površinske strukture što znači da se rupe ili unutrašnje geometrije ne mogu snimiti. Međutim, ovo 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, rezolucija skeniranja može se promijeniti samo promjenom varijabli rezolucije u kodu koje su kodirane u našem kodu. Kako bi projekt bio ugrađeniji, mogao bi se uključiti potenciometar rezolucije kako bi korisnik mogao promijeniti rezoluciju bez potrebe za uključivanjem monitora i tastature u skener. Osim toga, skener stvara slike koje ponekad mogu izgledati nazubljene. Da bi se ovo 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 preciznije prema stvarnoj veličini objekta.

Korak 9: Resursi

Uključio sam kod, STL datoteke za štampanje i DXF datoteke za sečenje za čitav projekat.

Raspberry Pi takmičenje 2020
Raspberry Pi takmičenje 2020
Raspberry Pi takmičenje 2020
Raspberry Pi takmičenje 2020

Prva nagrada na takmičenju Raspberry Pi 2020

Preporučuje se: