Indholdsfortegnelse:

Autonom bil: 7 trin (med billeder)
Autonom bil: 7 trin (med billeder)

Video: Autonom bil: 7 trin (med billeder)

Video: Autonom bil: 7 trin (med billeder)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, November
Anonim
Autonom bil
Autonom bil
Autonom bil
Autonom bil

Dette projekt er en autonomt navigerende robot, der forsøger at nå sin målposition og samtidig undgå forhindringer på vej. Robotten vil være udstyret med en LiDAR -sensor, der vil blive brugt til at registrere objekter i omgivelserne. Efterhånden som objekter detekteres, og robotten bevæger sig rundt, opdateres et kort i realtid. Kortet vil blive brugt til at gemme placeringen af forhindringer, der er blevet identificeret. På denne måde vil robotten ikke prøve igen på en mislykket vej til målpositionen. Det vil i stedet forsøge stier, der enten ikke har nogen forhindringer eller stier, der endnu ikke er blevet kontrolleret for forhindringer.

Robotten vil bevæge sig med to DC -motordrevne hjul og to hjul. Motorerne vil blive fastgjort til bunden af en cirkulær platform. Motorerne styres af to motordrivere. Motorchaufførerne modtager PWM -kommandoer fra Zynq -processoren. Encodere på hver motor bruges alle til at holde styr på køretøjernes position og retning. Hele systemet får et LiPo -batteri.

Trin 1: Montering af køretøjet

Montering af køretøjet
Montering af køretøjet
Montering af køretøjet
Montering af køretøjet
Montering af køretøjet
Montering af køretøjet
Montering af køretøjet
Montering af køretøjet

Robotten drives af to motorer, der er fastgjort til sidehjulene, og understøttes derefter yderligere af to hjul, et foran og et bagpå. Platformen og motorophængene var lavet af metalplader. Et motornav blev købt for at fastgøre hjulene til motoren. Imidlertid skulle der laves en brugerdefineret mellemkobling, fordi navets hulmønster var anderledes end hjulmønsteret.

Den valgte motor var en Port Escap 12V DC -motor med indbyggede encodere. Denne motor kan købes på ebay til en meget rimelig pris (se stykliste). Søg søgeord “12V Escap 16 Coreless Geared DC Motor with Encoders” på ebay for at finde motoren. Der er normalt en rimelig mængde sælgere at vælge imellem. Motorernes specifikationer og pinouts er vist i diagrammerne herunder.

Samlingen af robotten begyndte med et CAD -modeldesign af chassiset. Modellen herunder viser ovenfra en 2D -profilprofil designet til chassiset.

Det foreslås, at chassiset er designet som en 2D -profil, så det let kan fremstilles. Vi skærer et 12”X12” ark aluminium i form af chassiset ved hjælp af en vandstråleskærer. Chassisplatformen kunne også skæres med en båndsav.

Trin 2: Montering af motorer

Monteringsmotorer
Monteringsmotorer
Monteringsmotorer
Monteringsmotorer

Det næste trin er at lave motorophængene. Det foreslås, at motorophængene er lavet af 90-graders metalplade. Ved hjælp af denne del kan motoren fastgøres udkragende på den ene side af metalpladen ved hjælp af de to

M2 -huller på motoren og den anden flade kan boltes til platformen. Der skal bores huller i motorophænget, så der kan bruges skruer til at fastgøre motoren på motorholderen og motorholderen på platformen. Motorophænget kan ses på figuren ovenfor.

Derefter anbringes Pololu -motornavet (se materialebrev) på motorakslen og strammes med den medfølgende sætskrue og unbrakonøgle. Hulmønsteret på Pololu -motornavet matcher ikke hulmønsteret på VEX -hjulet, så der skal laves en tilpasset mellemkobling. Det foreslås, at skrotpladen Aluminium, der bruges til at lave chassisplatformen, bruges til at fremstille koblingen. Hulmønsteret og målene for dette par er vist i figuren herunder. Den udvendige diameter og form (behøver ikke at være en cirkel) af den tilpassede aluminiumskobling er ligegyldig, så længe alle huller passer på delen.

Trin 3: Oprettelse af Vivado Block Design

Oprettelse af Vivado Block Design
Oprettelse af Vivado Block Design
Oprettelse af Vivado Block Design
Oprettelse af Vivado Block Design

- Start med at oprette et nyt Vivado -projekt, og vælg Zybo Zynq 7000 Z010 som målenhed.

- Klik derefter på Opret nyt blokdesign, og tilføj Zynq IP. Dobbeltklik på Zynq IP, og importer de medfølgende XPS -indstillinger til Zynq. Aktiver derefter UART0 med MIO 10..11 under fanen MIO -konfigurationer, og sørg også for, at Timer 0 og Watchdog -timeren er aktiveret.

- Tilføj to AXI GPIOS til blokdesignet. For GPIO 0 skal du aktivere dobbeltkanal og indstille begge til alle udgange. Indstil GPIO -bredden for kanal 1 til 4 bit og for kanal 2 til 12 bit, disse kanaler vil blive brugt til at indstille motorretningen og sende mængden af kryds, som encoderen måler til processoren. For GPIO 1 skal du kun indstille en kanal til alle indgange med en kanalbredde på 4 bit. Dette vil blive brugt til at modtage data fra koderne. Gør alle GPIO -porte eksterne.

- Næste Tilføj to AXI -timere. Gør pwm0 -portene på begge timere eksterne. Disse vil være de pwms, der styrer hastigheden, motorerne roterer med.

- Endelig Kør blokautomatisering og forbindelsesautomatisering. Kontroller, at det blokdesign, du har, matcher det medfølgende.

Trin 4: Kommunikation med LiDAR

Denne LiDAR bruger en SCIP 2.0 -protokol til at kommunikere via UART, den vedhæftede fil beskriver hele protokollen.

For at kommunikere med LiDAR bruger vi UART0. LiDAR returnerer 682 datapunkter, der hver repræsenterer afstanden til et objekt i den vinkel. LiDAR scanner mod uret fra -30 grader til 210 grader med et trin på 0,351 grader.

- Al kommunikation til LiDAR sker med ASCI -tegn, se SCIP -protokollen for det anvendte format. Vi starter med at sende QT -kommandoen for at tænde LiDAR. Vi sender derefter GS -kommandoen flere gange og anmoder om 18 datapunkter ad gangen til ft i UARTS 64 byte FIFO. De data, der returneres fra LiDAR, analyseres derefter og gemmes i det globale SCANdata -array.

- Hvert datapunkt, der er gemt, er 2 byte kodede data. Hvis disse data overføres til dekoderen, returneres en afstand i millimeter.

I filen main_av.c finder du følgende funktioner til kommunikation med LiDAR

sendLIDARcmd (kommando)

- Dette sender inputstrengen til LiDAR via UART0

recvLIDARdata ()

- Dette vil modtage data, efter at en kommando er blevet sendt til LiDAR og gemme dataene i RECBuffer

requestDistanceData ()

- Denne funktion sender en række kommandoer for at hente alle 682 datapunkter. Efter hvert sæt med 18 datapunkter er modtaget, kaldes parseLIDARinput () til at analysere dataene og lagre datapunkterne trinvist i SCANdata.

Trin 5: Befolkningsnet med forhindringer

Befolkningsnet med forhindringer
Befolkningsnet med forhindringer
Befolkningsnet med forhindringer
Befolkningsnet med forhindringer

GRID, der er gemt, er et 2D -array, hvor hver indeksværdi repræsenterer en placering. Dataene, der er gemt i hvert indeks, er enten henholdsvis 0 eller 1, ingen hindring og forhindring. Kvadratafstanden i millimeter, som hvert indeks repræsenterer, kan ændres med GRID_SCALE -definitionen i filen vehicle.h. Størrelsen på 2D -arrayet kan også varieres, så køretøjet kan scanne et større område ved at ændre definitionen GRID_SIZE.

Efter et nyt sæt afstandsdata er scannet fra LiDAR kaldes updateGrid (). Dette gentages gennem hvert datapunkt, der er gemt i SCANdata -arrayet for at bestemme, hvilke indekser i nettet, der har forhindringer. Ved hjælp af køretøjets aktuelle orientering kan vi bestemme den vinkel, der svarer til hvert datapunkt. For at bestemme, hvor en forhindring er, skal du blot multiplicere den tilsvarende afstand med cos/sin i vinklen. Tilføjelse af disse to værdier til køretøjernes nuværende x- og y -position returnerer indekset i forhindringsgitteret. Ved at opdele afstanden, som denne operation returnerer med GRID_SCALE, kan vi variere, hvor stor kvadratafstanden for hvert indeks er.

Ovenstående billeder viser køretøjernes aktuelle miljø og det resulterende net.

Trin 6: Kommunikation med motorer

For at kommunikere med motorerne starter vi med at initialisere GPIO'erne til kontrol var retningen motoren drejer i. Derefter skriver vi direkte til PWM'ernes basisadresse i AXI -timeren, så vi kan indstille ting som perioden og Duty -cyklen, som direkte styrer hastighed motoren roterer med.

Trin 7: Vejplanlægning

Skal implementeres i den nærmeste fremtid.

Ved hjælp af den tidligere beskrevne net- og motorfunktionalitet er det meget let at implementere algoritmer som A*. Når køretøjet bevæger sig, fortsætter det med at scanne det omkringliggende område og afgøre, om stien, det er på, stadig er gyldig

Anbefalede: