Sisukord:

Autonoomne sõiduk: 7 sammu (piltidega)
Autonoomne sõiduk: 7 sammu (piltidega)

Video: Autonoomne sõiduk: 7 sammu (piltidega)

Video: Autonoomne sõiduk: 7 sammu (piltidega)
Video: Как проверить генератор. За 3 минуты, БЕЗ ПРИБОРОВ и умений. 2024, November
Anonim
Autonoomne sõiduk
Autonoomne sõiduk
Autonoomne sõiduk
Autonoomne sõiduk

See projekt on autonoomselt navigeeriv robot, mis püüab saavutada oma eesmärgi, vältides samal ajal takistusi. Robot varustatakse LiDAR -anduriga, mida kasutatakse ümbritsevate objektide tuvastamiseks. Kui objekte tuvastatakse ja robot liigub ringi, uuendatakse reaalajas kaarti. Kaarti kasutatakse tuvastatud takistuste asukohtade salvestamiseks. Nii ei ürita robot uuesti ebaõnnestunud teed väravasse. Selle asemel proovib see teid, millel pole takistusi, või teid, mida pole veel takistuste suhtes kontrollitud.

Robot liigub kahe alalisvoolumootoriga ja kahe ratta abil. Mootorid kinnitatakse ümmarguse platvormi põhja külge. Mootoreid hakkavad juhtima kaks mootorijuhti. Mootorijuhid saavad Zynq protsessorilt PWM käske. Iga mootori kodeerijaid kasutatakse sõiduki asukoha ja suuna jälgimiseks. Kogu süsteem töötab LiPo akuga.

1. samm: sõiduki kokkupanek

Sõiduki kokkupanek
Sõiduki kokkupanek
Sõiduki kokkupanek
Sõiduki kokkupanek
Sõiduki kokkupanek
Sõiduki kokkupanek
Sõiduki kokkupanek
Sõiduki kokkupanek

Robot töötab kahe mootoriga, mis on kinnitatud külgrataste külge ning seejärel toetavad seda kaks ratast, üks ees ja teine taga. Platvorm ja mootorikinnitused olid valmistatud lehtmetallist alumiiniumist. Rattade kinnitamiseks mootorile osteti mootorite rumm. Siiski oli vaja teha kohandatud vaheühendus, kuna rummu aukude muster erines ratta augumustrist.

Mootoriks valiti Port Escap 12V alalisvoolumootor koos sisseehitatud kodeerijatega. Seda mootorit saab osta ebayst väga mõistliku hinnaga (vt materjalide nimekiri). Otsige ebayst mootori leidmiseks ebayst märksõnu “12V Escap 16 Coreless Geared DC Motor with Encoders”. Tavaliselt on müüjate hulgast valida üsna palju. Mootorite spetsifikatsioonid ja kontaktid on näidatud allolevatel diagrammidel.

Roboti kokkupanek algas šassii CAD -mudeliga. Allolev mudel näitab šassii jaoks mõeldud 2D kuju profiili pealtvaadet.

Soovitatav on šassii kujundada 2D -profiilina, et seda oleks lihtne toota. Lõikasime 12-tollise X12-tollise alumiiniumlehe šassii kujuga, kasutades veejoaga lõikurit. Šassiiplatvormi sai lõigata ka lintsaega.

Samm: mootorite paigaldamine

Mootorite paigaldamine
Mootorite paigaldamine
Mootorite paigaldamine
Mootorite paigaldamine

Järgmine samm on mootori kinnituste tegemine. Mootorikinnitused soovitatakse valmistada 90-kraadisest lehtmetallist alumiiniumist. Selle osa abil saab mootori kinnitada konsooli pleki ühele küljele, kasutades kahte

Mootori ja teise külje M2 augud saab platvormile kruvida. Mootori alusele tuleb puurida augud, et kruvisid saaks kasutada mootori kinnitamiseks mootorikinnitusele ja mootorikinnitust platvormile. Mootori kinnitus on näha ülaltoodud joonisel.

Järgmisena asetatakse mootori võllile Pololu mootori rumm (vt materjalide loetelu) ja pingutatakse kaasasoleva kruvi ja kuuskantvõtme abil. Pololu mootori rummu aukude muster ei ühti VEX -ratta aukude mustriga, seega tuleb teha kohandatud vaheühendus. Soovitatav on haakeseadise valmistamiseks kasutada šassiiplatvormi valmistamiseks kasutatud lehtmetalli alumiiniumi. Selle paari aukude muster ja mõõtmed on näidatud alloleval joonisel. Kohandatud alumiiniumist haakeseadise välisläbimõõt ja kuju (ei pea olema ring) ei oma tähtsust, kuni kõik augud detailile sobivad.

3. samm: Vivado plokkide kujunduse loomine

Vivado plokidisaini loomine
Vivado plokidisaini loomine
Vivado plokidisaini loomine
Vivado plokidisaini loomine

- Alustage uue Vivado projekti loomisega ja valige sihtseadmeks Zybo Zynq 7000 Z010.

- Järgmisena klõpsake nuppu Loo uus ploki kujundus ja lisage Zynq IP. Topeltklõpsake Zynq IP -d ja importige Zynqi jaoks pakutavad XPS -seaded. Seejärel lubage vahekaardil MIO konfiguratsioonid UART0 koos MIO 10..11 -ga ja veenduge ka, et taimer 0 ja valvekoera taimer oleksid lubatud.

- Lisage ploki kujundusele kaks AXI GPIOS -i. GPIO 0 puhul lubage kahekanaliline ja seadke mõlemad kõik väljundid. Seadistage GPIO laius kanalile 1 kuni 4 bitti ja kanalile 2 kuni 12 bitti, neid kanaleid kasutatakse mootori suuna seadmiseks ja kodeerija mõõdetud puukide koguse saatmiseks protsessorile. GPIO 1 puhul seadke kõigi sisendite jaoks ainult üks kanal, mille kanali laius on 4 bitti. Seda kasutatakse kodeerijatelt andmete vastuvõtmiseks. Muutke kõik GPIO -pordid väliseks.

- Järgmine Lisage kaks AXI taimerit. Muutke pwm0 pordid mõlemal taimeril väliseks. Need on pwms, mis reguleerivad mootorite pöörlemiskiirust.

- Lõpuks käivitage plokkide automaatika ja ühenduse automatiseerimine. Veenduge, et teie ploki kujundus vastab pakutavale.

4. samm: suhtlemine LiDARiga

See LiDAR kasutab UART kaudu suhtlemiseks SCIP 2.0 protokolli, manustatud fail kirjeldab kogu protokolli.

LiDARiga suhtlemiseks kasutame UART0. LiDAR tagastab 682 andmepunkti, millest igaüks tähistab selle nurga all oleva objekti kaugust. LiDAR skaneerib vastupäeva -30 kuni 210 kraadi, sammuga 0,351 kraadi.

- Kogu suhtlus LiDARiga toimub ASCI märkidega, vaadake kasutatud vormingu SCIP -protokolli. Alustuseks saadame käsu QT, et LiDAR sisse lülitada. Seejärel saadame GS -käsu mitu korda, taotledes korraga 18 andmepunkti, kuni UARTS 64 -baidise FIFO -ni. Seejärel parsitakse LiDARilt tagastatud andmed ja salvestatakse need SCANdata globaalsesse massiivi.

- Iga salvestatud andmepunkt sisaldab 2 baiti kodeeritud andmeid. Nende andmete dekoodrisse edastamine tagastab vahemaa millimeetrites.

Failist main_av.c leiate LiDARiga suhtlemiseks järgmised funktsioonid

sendLIDARcmd (käsk)

- See saadab sisendstringi LiDARile UART0 kaudu

recvLIDARdata ()

- See saab andmeid pärast käsu saatmist LiDARile ja salvestab andmed RECBufferisse

requestDistanceData ()

- See funktsioon saadab rea käske kõigi 682 andmepunkti hankimiseks. Pärast iga 18 andmepunkti komplekti vastuvõtmist kutsutakse parseLIDARinput () andmeid sõeluma ja andmepunkte järk -järgult SCANdata salvestama.

5. samm: võrgu täitmine takistustega

Ruudustiku täitmine takistustega
Ruudustiku täitmine takistustega
Ruudustiku täitmine takistustega
Ruudustiku täitmine takistustega

Salvestatud GRID on 2D massiiv, mille iga indeksi väärtus tähistab asukohta. Igasse indeksisse salvestatud andmed on vastavalt kas 0 või 1, takistust ja takistust pole. Iga indeksi kujutatud ruutkaugust millimeetrites saab muuta failis vehicle.h oleva GRID_SCALE määratlusega. 2D massiivi suurust saab samuti muuta, et sõiduk saaks GRID_SIZE määratlust muutes suuremat ala skannida.

Pärast uue kaugusandmete kogumi skannimist LiDAR -ist helistatakse updateGrid (). See kordab kõiki SCANdata massiivi salvestatud andmepunkte, et teha kindlaks, millistel võrgu indeksitel on takistusi. Sõiduki praeguse orientatsiooni abil saame määrata igale andmepunktile vastava nurga. Takistuse määramiseks korrutage lihtsalt vastav kaugus nurga cos/sin -ga. Nende kahe väärtuse lisamine sõidukite praegusele positsioonile x ja y tagastab indeksi takistuse ruudustikus. Selle toiminguga tagastatud kauguse jagamine GRID_SCALE -ga võimaldab meil muuta iga indeksi ruutkaugust.

Ülaltoodud pildid näitavad sõidukite praegust keskkonda ja sellest tulenevat võrku.

6. samm: mootoritega suhtlemine

Mootoritega suhtlemiseks alustame GPIO -de käivitamisega, et juhtida mootori pöörlemissuunda. Seejärel kirjutamine AXI taimeris otse PWM -ide baasaadressile võimaldab meil määrata näiteks perioodi ja töötsüklit, mis juhivad otse mootori pöörlemiskiirusel.

7. samm: tee planeerimine

Rakendatakse lähiajal.

Kasutades eelnevalt kirjeldatud võrgu- ja mootorifunktsioone, on väga lihtne rakendada selliseid algoritme nagu A*. Sõiduki liikumisel jätkab ta ümbritseva ala skaneerimist ja teeb kindlaks, kas see rada on endiselt kehtiv

Soovitan: