Sadržaj:
- Korak 1: Sklapanje vozila
- Korak 2: Montiranje motora
- Korak 3: Kreiranje Vivado Block Design -a
- Korak 4: Komunikacija s LiDAR -om
- Korak 5: Popunjavanje mreže preprekama
- Korak 6: Komunikacija s motorima
- Korak 7: Planiranje putanje
Video: Autonomno vozilo: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Ovaj projekt je autonomni navigacijski robot koji pokušava doći do svoje ciljne pozicije izbjegavajući prepreke na svom putu. Robot će biti opremljen LiDAR senzorom koji će se koristiti za otkrivanje objekata u njegovoj okolini. Kako se objekti otkrivaju i robot se kreće, ažurirat će se karta u stvarnom vremenu. Karta će se koristiti za spremanje lokacija prepreka koje su identificirane. Na ovaj način robot neće ponovo pokušati neuspješan put do cilja. Umjesto toga će pokušati staze koje ili nemaju prepreke ili staze koje još nisu provjerene.
Robot će se kretati pomoću dva istosmjerna motora i dva kotača. Motori će biti pričvršćeni na dno kružne platforme. Motorima će upravljati dva vozača motora. Vozači motora će primati PWM naredbe od Zynq procesora. Svi koderi na svakom motoru koriste se za praćenje položaja i orijentacije vozila. Čitav sistem će se napajati LiPo baterijom.
Korak 1: Sklapanje vozila
Robota pokreću dva motora pričvršćena na bočne kotače, a zatim ih dodatno podržavaju dva kotača, jedan sprijeda i jedan straga. Nosači platforme i motora izrađeni su od aluminijskog lima. Kupljeno je čvorište motora za pričvršćivanje kotača na motor. Međutim, trebalo je izraditi prilagođenu srednju spojnicu jer se uzorak rupe u glavčini razlikovao od uzorka rupa u kotaču.
Odabrani motor je Port Escap 12V DC motor sa ugrađenim enkoderima. Ovaj motor se može kupiti na ebayu po vrlo povoljnoj cijeni (pogledajte Bilten materijala). Ključne riječi za pretraživanje „12V Escap 16 jednosmjerni istosmjerni motor bez jezgri s enkoderima“na ebayu kako biste pronašli motor. Obično postoji priličan broj prodavača za odabir. Specifikacije i raspoznavanje motora prikazani su na donjim dijagramima.
Sastavljanje robota započelo je CAD modelarnim dizajnom šasije. Donji model prikazuje pogled odozgo na profil 2D oblika dizajniran za šasiju.
Predlaže se da se šasija dizajnira kao 2D profil tako da se može lako proizvesti. Izrezali smo aluminijski lim dimenzija 12”X12” u oblik šasije pomoću rezača mlaza vode. Platforma šasije se također može rezati tračnom pilom.
Korak 2: Montiranje motora
Sljedeći korak je izrada nosača motora. Predlaže se da nosači motora budu izrađeni od aluminijskog lima od 90 stepeni. Pomoću ovog dijela motor se može montirati konzolno na jednu stranu lima pomoću dva
M2 rupe motora i druge strane mogu se pričvrstiti na platformu. U nosač motora moraju se izbušiti rupe tako da se vijcima može pričvrstiti motor na nosač motora, a nosač motora na platformu. Nosač motora se može vidjeti na gornjoj slici.
Zatim se Pololu motorno čvorište (vidi Opis materijala) postavlja na osovinu motora i priteže priloženim zavrtnjem i imbus ključem. Uzorak rupa u glavčini motora Pololu ne podudara se s uzorkom rupa VEX kotača pa se mora izraditi prilagođena srednja spojnica. Predlaže se da se aluminijski otpadni lim od aluminija koji se koristi za izradu platforme šasije koristi za izradu spojnice. Uzorak rupa i dimenzije ovog para prikazani su na donjoj slici. Vanjski promjer i oblik (ne mora biti krug) prilagođene aluminijske spojnice nije bitan sve dok sve rupe pristaju na dijelu.
Korak 3: Kreiranje Vivado Block Design -a
- Počnite stvaranjem novog Vivado projekta i odaberite Zybo Zynq 7000 Z010 kao ciljani uređaj.
- Sljedeći klik na stvoriti novi dizajn bloka i dodati Zynq IP. Dvaput kliknite na Zynq IP i uvezite ponuđene XPS postavke za Zynq. Zatim omogućite UART0 s MIO 10..11 na kartici MIO konfiguracije, a također provjerite jesu li Timer 0 i Watchdog timer omogućeni.
- Dodajte dva AXI GPIOS -a u dizajn bloka. Za GPIO 0 omogućite dvokanalni i postavite oba na sve izlaze. Postavite širinu GPIO -a za kanal 1 do 4 bita, a za kanal 2 do 12 bita, ti će se kanali koristiti za postavljanje smjera motora i slanje količine otkucaja koje koder mjeri procesoru. Za GPIO 1 postavite samo jedan kanal na sve ulaze sa širinom kanala od 4 bita. Ovo će se koristiti za primanje podataka od kodera. Neka svi GPIO portovi budu vanjski.
- Sljedeće Dodajte dva AXI tajmera. Učinite pwm0 portove na oba tajmera vanjskim. To će biti pwms koji kontroliraju brzinu kojom se motori okreću.
- Na kraju pokrenite automatizaciju blokova i automatizaciju veze. Provjerite da li dizajn bloka odgovara ponuđenom.
Korak 4: Komunikacija s LiDAR -om
Ovaj LiDAR koristi protokol SCIP 2.0 za komunikaciju putem UART -a, priložena datoteka opisuje cijeli protokol.
Za komunikaciju s LiDAR -om koristit ćemo UART0. LiDAR vraća 682 podatkovne točke od kojih svaka predstavlja udaljenost do objekta pod tim kutom. LiDAR skenira u smjeru kazaljke na satu od -30 stepeni do 210 stepeni sa korakom od 0,351 stepena.
- Sva komunikacija s LiDAR -om vrši se s ASCI znakovima, za format koji se koristi pogledajte SCIP protokol. Počinjemo slanjem QT naredbe za uključivanje LiDAR -a. Zatim nekoliko puta šaljemo GS naredbu sa zahtjevom od 18 tačaka podataka odjednom za ft u UARTS 64 -bajtnom FIFO -u. Podaci vraćeni iz LiDAR -a se zatim analiziraju i pohranjuju u SCANdata globalni niz.
- Svaka pohranjena podatkovna točka ima 2 bajta kodiranih podataka. Prosljeđivanje ovih podataka u dekoder vratit će udaljenost u milimetrima.
U datoteci main_av.c pronaći ćete sljedeće funkcije za komunikaciju s LiDAR -om
sendLIDARcmd (naredba)
- Ovo će poslati ulazni niz u LiDAR preko UART0
recvLIDARdata ()
- Ovo će primati podatke nakon što je naredba poslana na LiDAR i pohraniti podatke u RECBuffer
requestDistanceData ()
- Ova funkcija će poslati niz naredbi za dohvat svih 682 podatkovnih točaka. Nakon što se primi svaki skup od 18 podatkovnih točaka, parseLIDARinput () se poziva za raščlanjivanje podataka i postupno spremanje podatkovnih točaka u SCANdata.
Korak 5: Popunjavanje mreže preprekama
GRID koji je pohranjen je 2D niz sa svakom vrijednošću indeksa koja predstavlja lokaciju. Podaci pohranjeni u svakom indeksu su 0 ili 1, Nema prepreka, odnosno prepreka. Kvadratna udaljenost u milimetrima koju svaki indeks predstavlja može se promijeniti definicijom GRID_SCALE u datoteci vehicle.h. Veličina 2D niza također se može mijenjati kako bi se omogućilo vozilu da skenira veće područje promjenom definicije GRID_SIZE.
Nakon što se skenira novi skup podataka o udaljenosti iz LiDAR -a poziva se updateGrid (). Ovo će ponavljati svaku točku podataka pohranjenu u nizu SCANdata kako bi se utvrdilo koji indeksi u mreži imaju prepreke. Koristeći trenutnu orijentaciju vozila možemo odrediti kut koji odgovara svakoj tački podataka. Da biste odredili gdje se nalazi prepreka, jednostavno pomnožite odgovarajuću udaljenost s cos/sin ugla. Dodavanjem ove dvije vrijednosti u trenutni položaj vozila x i y vratit će se indeks u rešetki prepreke. Dijeljenje udaljenosti koju ova operacija vraća GRID_SCALE omogućit će nam da promijenimo koliko je velika kvadratna udaljenost svakog indeksa.
Gornje slike prikazuju trenutno okruženje vozila i rezultirajuću mrežu.
Korak 6: Komunikacija s motorima
Za komunikaciju s motorima započinjemo inicijalizacijom GPIO -a kako bismo kontrolirali smjer vrtnje motora. Zatim upisivanje izravno na baznu adresu PWM -ova u AXI Tajmer omogućuje nam postavljanje stvari poput razdoblja i radnog ciklusa koji izravno kontroliraju brzinom kojom se motor okreće.
Korak 7: Planiranje putanje
Biće implementirano u bliskoj budućnosti.
Koristeći prethodno opisane funkcije mreže i motora, vrlo je lako implementirati algoritme poput A*. Dok se vozilo kreće, nastavit će skenirati okolno područje i utvrditi je li staza na kojoj se nalazi još uvijek važeća
Preporučuje se:
Super FAST RC Ground Effect vozilo (Ekranoplan): 5 koraka (sa slikama)
Super BRZO RC vozilo sa efektom zemlje (Ekranoplan): Znate kako, prilikom slijetanja, avioni lebde nekoliko metara iznad zemlje neko vrijeme prije nego što im točkovi zaista padnu na pistu? Ovo ne samo da omogućuje putnicima glatko slijetanje, već je to i prirodni rezultat efekta tla, u kojem
Viktorijanska balska haljina s autonomno podesivim izrezom: 8 koraka (sa slikama)
Viktorijanska balska haljina s autonomno podesivim dekolteom: Ovo je projekt koji sam napravio za Viktorijansku zimsku loptu u Krakovu. Pametna balska haljina koja prilagođava veličinu dekoltea na osnovu blizine gospode koja stoji ispred nje
Arduino autonomno posuda za filtriranje: 6 koraka
Arduino autonomno filtrirno plovilo: U ovom uputstvu pokazat ću vam kako sam dizajnirao i napravio svoje predloženo rješenje za trenutni problem crvenih algi u vodama obale Zaljeva. Za ovaj projekt želio sam dizajnirati potpuno autonomnu letjelicu sa solarnim pogonom koja bi mogla ploviti
TripComputer - GPS putni računar i vremenski modul za vaše vozilo: 11 koraka (sa slikama)
TripComputer - GPS putni računar i vremenski modul za vaše vozilo: Sjajan projekat maline pi koji koristi GPS modul za probijanje i 2 mala ekrana Digole za navigacijski računar na vašoj tabli
KEVIN potpuno autonomno vozilo: 17 koraka (sa slikama)
KEVIN Potpuno autonomno vozilo: Ovo je Kevin. Radi se o automobilu s radijskim upravljanjem sa mogućnošću potpune autonomne vožnje. Moj prvi cilj je bio napraviti autonomno vozilo pod kontrolom Arduina. Pa sam kupio jeftino kinesko podvozje. Ali bilo je užasno jer nisam mogao priložiti nijedan c