Sadržaj:
- Korak 1: Sklapanje vozila
- Korak 2: Montiranje motora
- Korak 3: Stvaranje Vivado Block Design -a
- Korak 4: Komunikacija s LiDAR -om
- Korak 5: Popunjavanje mreže preprekama
- Korak 6: Komunikacija s motorima
- Korak 7: Planiranje puta
Video: Autonomno vozilo: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Ovaj je projekt 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 okolici. 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 taj način robot neće ponovno pokušati neuspješan put do cilja. Umjesto toga pokušat će putove koji 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. Cijeli sustav će se napajati LiPo baterijom.
Korak 1: Sklapanje vozila
Robota pokreću dva motora pričvršćena na bočne kotače, a zatim su dodatno podržana s 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 rupa glavčine razlikovao od uzorka rupa u kotaču.
Odabrani motor je Port Escap 12V DC motor s ugrađenim enkoderima. Ovaj motor se može kupiti na ebayu po vrlo povoljnoj cijeni (vidi Bill of Materials). Ključne riječi za pretraživanje "12V Escap 16 jednosmjerni istosmjerni motor bez kodera s enkoderima" na ebayu kako biste pronašli motor. Obično postoji priličan broj prodavača koje možete izabrati. Specifikacije i raspoznavanje motora prikazani su na donjim dijagramima.
Montaža robota započela 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 mogla se rezati i trakastom 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 stupnjeva. Pomoću ovog dijela motor se može pričvrstiti konzolom 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 može se vidjeti na gornjoj slici.
Zatim se Pololu motorno čvorište (vidi Opis materijala) postavlja na osovinu motora i učvršćuje priloženim vijkom i imbus ključem. Uzorak rupa u glavčini motora Pololu ne podudara se s uzorkom rupa VEX kotača pa je potrebno izraditi prilagođenu međupoveznicu. Predlaže se da se za izradu spojke koristi metalni otpadni aluminijski lim za izradu platforme šasije. 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 stanu na dio.
Korak 3: Stvaranje 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 navedene XPS postavke za Zynq. Zatim omogućite UART0 s MIO 10..11 na kartici MIO konfiguracije, a također provjerite jesu li omogućeni Timer 0 i Watchdog timer.
- U dizajn bloka dodajte dva AXI GPIOS -a. 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 krpelja koje koder mjeri procesoru. Za GPIO 1 postavite samo jedan kanal na sve ulaze sa širinom kanala od 4 bita. To će se koristiti za primanje podataka od kodera. Neka svi GPIO portovi budu vanjski.
- Sljedeće Dodajte dva AXI mjerača vremena. Učinite priključke pwm0 na oba timera vanjskim. To će biti pwms koji kontroliraju brzinu kojom se motori okreću.
- Na kraju pokrenite automatizaciju blokova i automatizaciju veze. Provjerite podudara li se dizajn bloka s ponuđenim.
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 stupnjeva do 210 stupnjeva s korakom od 0,351 stupnja.
- 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 tražeći 18 podatkovnih točaka odjednom za ft u UARTS 64 -bajtnom FIFO -u. Podaci vraćeni iz LiDAR -a zatim se analiziraju i pohranjuju u globalni niz SCANdata.
- 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 putem 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 dohvaćanje 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
Pohranjeni GRID 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 izmjenom definicije GRID_SIZE.
Nakon što se skenira novi skup podataka o udaljenosti iz LiDAR -a poziva se updateGrid (). To će ponavljati svaku podatkovnu točku 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 podatkovnoj točki. Da biste odredili gdje se nalazi prepreka, jednostavno pomnožite odgovarajuću udaljenost s cos/sin kuta. 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 Timeru omogućuje nam postavljanje stvari poput razdoblja i radnog ciklusa koji izravno upravljaju brzina kojom se motor okreće.
Korak 7: Planiranje puta
Provesti 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 putanja na kojoj se nalazi još uvijek valjana
Preporučeni:
Super FAST RC Ground Effect vozilo (Ekranoplan): 5 koraka (sa slikama)
Super BRZO RC vozilo s efektom tla (Ekranoplan): Znate kako tijekom slijetanja zrakoplovi lebde nekoliko metara iznad zemlje neko vrijeme prije nego što im kotači stvarno 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 izradio za Victorian Winter Ball u Krakovu. Pametna balska haljina koja prilagođava veličinu dekoltea ovisno o blizini gospode koja stoji ispred nje
Arduino autonomno posuda za filtriranje: 6 koraka
Arduino autonomno filtrirno plovilo: U ovom Instructableu 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 putno računalo i vremenski modul za vaše vozilo: 11 koraka (sa slikama)
TripComputer - GPS putno računalo i vremenski modul za vaše vozilo: cool projekt maline pi koji koristi GPS probojni modul i 2 mala zaslona Digole za navigacijsko računalo na vašoj crtici
KEVIN potpuno autonomno vozilo: 17 koraka (sa slikama)
KEVIN potpuno autonomno vozilo: Ovo je Kevin. Radijski upravljani automobil sa sposobnošću potpunog autonomnog pogona. Moj prvi cilj bio je napraviti autonomno vozilo pod kontrolom Arduina. Pa sam kupio jeftino kinesko podvozje. Ali bilo je užasno jer nisam mogao priložiti nijedan c