Kazalo:

Avtonomno vozilo: 7 korakov (s slikami)
Avtonomno vozilo: 7 korakov (s slikami)

Video: Avtonomno vozilo: 7 korakov (s slikami)

Video: Avtonomno vozilo: 7 korakov (s slikami)
Video: ЮЛЯ ФИНЕСС: Как я вышла с 8 этажа! Групповое изнасилование под мефедроном, психиатрическая больница 2024, November
Anonim
Avtonomno vozilo
Avtonomno vozilo
Avtonomno vozilo
Avtonomno vozilo

Ta projekt je avtonomno krmarljiv robot, ki poskuša doseči svoj cilj, pri tem pa se izogiba oviram na svoji poti. Robot bo opremljen s senzorjem LiDAR, ki bo uporabljen za zaznavanje predmetov v njegovi okolici. Ko zaznamo predmete in se robot premika, se bo posodobil zemljevid v realnem času. Zemljevid bo uporabljen za shranjevanje lokacij ugotovljenih ovir. Na ta način robot ne bo znova poskusil neuspešne poti do cilja. Namesto tega bo poskušal poti, ki nimajo ovir, ali poti, ki še niso bile preverjene.

Robot se bo premikal z dvema kolescema na enosmerni pogon in dvema kolescema. Motorji bodo pritrjeni na dno okrogle ploščadi. Motorja bosta upravljala dva voznika motorja. Vozniki motorja bodo prejemali ukaze PWM od procesorja Zynq. Dajalniki na vsakem motorju se uporabljajo za spremljanje položaja in orientacije vozil. Celoten sistem bo napajal LiPo baterijo.

1. korak: Sestavljanje vozila

Sestavljanje vozila
Sestavljanje vozila
Sestavljanje vozila
Sestavljanje vozila
Sestavljanje vozila
Sestavljanje vozila
Sestavljanje vozila
Sestavljanje vozila

Robot poganjata dva motorja, pritrjena na stranska kolesa, nato pa sta dodatno podprta z dvema kolescema, eno spredaj in eno zadaj. Nosilec ploščadi in motorja je izdelan iz aluminijaste pločevine. Za pritrditev koles na motor je bilo kupljeno pesto za motor. Vendar je bilo treba izdelati vmesni spenjač po meri, ker je bil vzorec lukenj pesto drugačen od vzorca lukenj kolesa.

Izbran je bil motor Port Escap 12V DC z vgrajenimi dajalniki. Ta motor je mogoče kupiti na ebayu za zelo ugodno ceno (glej Zbirka materialov). Poiščite ključne besede “12V Escap 16 brezžični enosmerni motor z dajalniki” na ebayu, da poiščete motor. Običajno je med dobrimi prodajalci na izbiro. Specifikacije in odmiki motorjev so prikazani na spodnjih diagramih.

Sestavljanje robota se je začelo s CAD modelarstvom oblikovanja podvozja. Spodnji model prikazuje pogled od zgoraj na profil 2D oblike, namenjen podvozju.

Predlagano je, da je ohišje zasnovano kot 2D profil, da ga je mogoče enostavno izdelati. Z rezalnikom z vodnim curkom smo izrezali 12-palčni aluminijasti list v obliko ohišja. Platformo podvozja bi lahko rezali tudi s tračno žago.

2. korak: Montaža motorjev

Montažni motorji
Montažni motorji
Montažni motorji
Montažni motorji

Naslednji korak je izdelava nosilcev motorja. Predlagano je, da so nosilci motorja izdelani iz 90-stopinjskega aluminijaste pločevine. S tem delom lahko motor pritrdite konzolno na eno stran pločevine z dvema

Luknje M2 motorja in drugo stran lahko pritrdite na ploščad. V nosilec motorja je treba izvrtati luknje, tako da lahko z vijaki pritrdite motor na nosilec motorja in nosilec motorja na ploščad. Nosilec motorja lahko vidite na zgornji sliki.

Nato motorno pesto Pololu (glej kosovnico) postavite na gred motorja in ga privijte s priloženim vijakom in imbus ključem. Vzorec lukenj motornega vozlišča Pololu se ne ujema z vzorcem lukenj kolesa VEX, zato je treba izdelati vmesni spojnik po meri. Predlagano je, da se za izdelavo sklopke uporabi odpadna pločevina iz aluminija, uporabljena za izdelavo platforme. Vzorec lukenj in mere tega para so prikazani na spodnji sliki. Zunanji premer in oblika (ni nujno, da je krog) aluminijaste spojke po meri nista pomembna, dokler se vse luknje prilegajo delu.

3. korak: Ustvarite Vivado Block Design

Ustvarjanje Vivado Block Design
Ustvarjanje Vivado Block Design
Ustvarjanje Vivado Block Design
Ustvarjanje Vivado Block Design

- Začnite z ustvarjanjem novega projekta Vivado in kot ciljno napravo izberite Zybo Zynq 7000 Z010.

- Nato kliknite na ustvarjanje nove zasnove bloka in dodajte IP Zynq. Dvokliknite Zynq IP in uvozite priložene nastavitve XPS za Zynq. Nato omogočite UART0 z MIO 10..11 na zavihku MIO konfiguracije in se prepričajte, da sta Timer 0 in Timer Watchdog omogočena.

- Zasnovi bloka dodajte dva AXI GPIOS. Za GPIO 0 omogočite dvokanalne in nastavite oba na vse izhode. Širino GPIO nastavite za kanal 1 do 4 bite in za kanal 2 do 12 bitov, ti kanali bodo uporabljeni za nastavitev smeri motorja in pošiljanje količine klopov, ki jih kodirnik meri v procesor. Za GPIO 1 nastavite samo en kanal na vse vhode s širino kanala 4 bitov. To bo uporabljeno za sprejem podatkov od kodirnikov. Naj bodo vsa vrata GPIO zunanja.

- Naprej Dodajte dva časovnika AXI. Vrata pwm0 na obeh časovnikih naj bodo zunanja. To bodo pwms, ki nadzorujejo hitrost, pri kateri se motorji vrtijo.

- Končno zaženite avtomatizacijo blokov in avtomatizacijo povezav. Preverite, ali se zasnova bloka ujema s priloženim.

4. korak: Komunicirajte z LiDAR

Ta LiDAR uporablja protokol SCIP 2.0 za komunikacijo prek UART, priložena datoteka opisuje celoten protokol.

Za komunikacijo z LiDAR -om bomo uporabljali UART0. LiDAR vrne 682 podatkovnih točk, od katerih vsaka predstavlja razdaljo do predmeta pod tem kotom. LiDAR skenira v nasprotni smeri urinega kazalca od -30 stopinj do 210 stopinj s korakom 0,351 stopinje.

- Vsa komunikacija z LiDAR poteka z znaki ASCI, za uporabljeno obliko glejte protokol SCIP. Začnemo s pošiljanjem ukaza QT za vklop LiDAR. Nato večkrat pošljemo ukaz GS, ki zahteva 18 podatkovnih točk naenkrat, da se ft vstavi v 64 -bajtni FIFO UARTS. Podatki, vrnjeni iz LiDAR, se nato razčlenijo in shranijo v globalno matriko SCANdata.

- Vsaka shranjena podatkovna točka je 2 bajta kodiranih podatkov. Posredovanje teh podatkov v dekoder bo vrnilo razdaljo v milimetrih.

V datoteki main_av.c boste našli naslednje funkcije za komunikacijo z LiDAR

sendLIDARcmd (ukaz)

- To bo poslalo vhodni niz v LiDAR prek UART0

recvLIDARdata ()

- Ta bo prejel podatke, potem ko je bil ukaz poslan v LiDAR, podatke pa shrani v RECBuffer

requestDistanceData ()

- Ta funkcija bo poslala vrsto ukazov za pridobitev vseh 682 podatkovnih točk. Po prejemu vsakega niza 18 podatkovnih točk se pokliče parseLIDARinput () za razčlenjevanje podatkov in postopno shranjevanje podatkovnih točk v SCANdata.

5. korak: Napolnite mrežo z ovirami

Polnjenje omrežja z ovirami
Polnjenje omrežja z ovirami
Polnjenje omrežja z ovirami
Polnjenje omrežja z ovirami

GRID, ki je shranjen, je 2D matrika z vsako vrednostjo indeksa, ki predstavlja lokacijo. Podatki, shranjeni v vsakem indeksu, so 0 ali 1, Brez ovir oziroma ovir. Kvadratna razdalja v milimetrih, ki jo predstavlja vsak indeks, se lahko spremeni z definicijo GRID_SCALE v datoteki vozilo.h. Velikost 2D matrike je mogoče spreminjati tudi tako, da lahko vozilo pregleda večjo površino s spreminjanjem definicije GRID_SIZE.

Po skeniranju novega niza podatkov o razdalji iz klica LiDAR se pokliče updateGrid (). To bo ponavljalo vse podatkovne točke, shranjene v matriki SCANdata, da bi ugotovilo, kateri indeksi v mreži imajo ovire. S trenutno orientacijo vozila lahko določimo kot, ki ustreza vsaki podatkovni točki. Če želite ugotoviti, kje je ovira, preprosto pomnožite ustrezno razdaljo s cos/sin kota. Če te dve vrednosti dodate trenutnemu položaju vozil x in y, se vrne indeks v mreži ovire. Z delitvijo razdalje, ki jo ta operacija vrne z GRID_SCALE, bomo lahko spreminjali, kako velika je kvadratna razdalja vsakega indeksa.

Zgornje slike prikazujejo trenutno okolje vozil in nastalo mrežo.

6. korak: Komunikacija z motorji

Za komunikacijo z motorji začnemo z inicializacijo GPIO -jev za nadzor smeri vrtenja motorja. Nato nam pisanje neposredno na osnovni naslov PWM -jev v AXI Timerju omogoča, da nastavimo stvari, kot sta obdobje in delovni cikel, ki neposredno nadzorujeta hitrost vrtenja motorja pri.

7. korak: Načrtovanje poti

Izvesti v bližnji prihodnosti.

Z uporabo predhodno opisanih omrežnih in motornih funkcij je zelo enostavno implementirati algoritme, kot je A*. Ko se vozilo premika, bo še naprej skeniralo okolico in ugotavljalo, ali je pot, na kateri je, še veljavna

Priporočena: