Sadržaj:

Autonomno vozilo: 7 koraka (sa slikama)
Autonomno vozilo: 7 koraka (sa slikama)

Video: Autonomno vozilo: 7 koraka (sa slikama)

Video: Autonomno vozilo: 7 koraka (sa slikama)
Video: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, Novembar
Anonim
Autonomno vozilo
Autonomno vozilo
Autonomno vozilo
Autonomno vozilo

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

Sklapanje vozila
Sklapanje vozila
Sklapanje vozila
Sklapanje vozila
Sklapanje vozila
Sklapanje vozila
Sklapanje vozila
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

Montažni motori
Montažni motori
Montažni motori
Montažni motori

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

Kreiranje Vivado Block Design -a
Kreiranje Vivado Block Design -a
Kreiranje Vivado Block Design -a
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

Napunjavanje mreže s preprekama
Napunjavanje mreže s preprekama
Napunjavanje mreže s preprekama
Napunjavanje mreže s 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: