Innholdsfortegnelse:

Autonomt kjøretøy: 7 trinn (med bilder)
Autonomt kjøretøy: 7 trinn (med bilder)

Video: Autonomt kjøretøy: 7 trinn (med bilder)

Video: Autonomt kjøretøy: 7 trinn (med bilder)
Video: Syv roboter for å endre jordbruk ▶ SE NÅ! 2024, Juli
Anonim
Autonom bil
Autonom bil
Autonom bil
Autonom bil

Dette prosjektet er en autonomt navigerende robot som prøver å nå sin målposisjon mens du unngår hindringer på vei. Roboten vil være utstyrt med en LiDAR -sensor som skal brukes til å oppdage objekter i omgivelsene. Når objekter blir oppdaget og roboten beveger seg rundt, vil et sanntidskart oppdateres. Kartet vil bli brukt til å lagre plasseringen av hindringer som er identifisert. På denne måten vil roboten ikke prøve igjen på en mislykket vei til målposisjonen. Det vil i stedet prøve stier som enten ikke har noen hindringer eller stier som ennå ikke er kontrollert for hindringer.

Roboten vil bevege seg med to DC -motordrevne hjul og to hjul. Motorene vil bli festet til bunnen av en sirkulær plattform. Motorene vil bli kontrollert av to bilførere. Motordriverne vil motta PWM -kommandoer fra Zynq -prosessoren. Kodere på hver motor brukes alle til å holde oversikt over kjøretøyets posisjon og retning. Hele systemet får et LiPo -batteri.

Trinn 1: Montering av kjøretøyet

Montering av kjøretøyet
Montering av kjøretøyet
Montering av kjøretøyet
Montering av kjøretøyet
Montering av kjøretøyet
Montering av kjøretøyet
Montering av kjøretøyet
Montering av kjøretøyet

Roboten drives av to motorer festet til sidehjulene og støttes deretter i tillegg av to hjul, ett foran og ett bak. Plattformen og motorfestene var laget av aluminium. Et motornav ble kjøpt for å feste hjulene til motoren. Imidlertid måtte en tilpasset mellomkobling lages fordi hullmønsteret til navet var annerledes enn hullmønsteret på hjulet.

Motoren som ble valgt var en Port Escap 12V DC -motor med innebygde kodere. Denne motoren kan kjøpes på ebay til en svært rimelig pris (se materialforslag). Søkeord “12V Escap 16 Coreless Geared DC Motor with Encoders” på ebay for å finne motoren. Det er vanligvis en god del selgere å velge mellom. Spesifikasjonene og pinoutene til motorene er vist i diagrammene nedenfor.

Monteringen av roboten begynte med et CAD -modelldesign av chassiset. Modellen nedenfor viser toppbildet av 2D -formprofilen designet for chassiset.

Det foreslås at chassiset er utformet som en 2D -profil slik at det enkelt kan produseres. Vi kutter et 12”X12” ark i aluminium i form av chassiset ved å bruke en vannstråleskærer. Chassisplattformen kan også kuttes med en båndsag.

Trinn 2: Montering av motorer

Monteringsmotorer
Monteringsmotorer
Monteringsmotorer
Monteringsmotorer

Det neste trinnet er å lage motorfester. Det foreslås at motorfestene er laget av 90-graders aluminiumsplate. Ved å bruke denne delen kan motoren festes utligger på den ene siden av metallplaten ved hjelp av de to

M2 hull på motoren og den andre siden kan boltes til plattformen. Det må bores hull i motorfeste slik at skruer kan brukes til å feste motoren på motorfeste og motorfeste på plattformen. Motorfeste kan sees på figuren ovenfor.

Deretter plasseres Pololu motornav (se materialregnskap) på motorakselen og strammes med den medfølgende settskruen og unbrakonøkkelen. Hullmønsteret til Pololu motornav samsvarer ikke med hullmønsteret til VEX -hjulet, så det må lages en tilpasset mellomkobling. Det antydes at skrapplaten Aluminium som brukes til å lage chassisplattformen brukes til å lage koblingen. Hullmønsteret og dimensjonene til dette paret er vist i figuren nedenfor. Ytre diameter og form (trenger ikke å være en sirkel) til den tilpassede aluminiumskoblingen spiller ingen rolle så lenge alle hullene passer på delen.

Trinn 3: Opprette Vivado Block Design

Opprette Vivado Block Design
Opprette Vivado Block Design
Opprette Vivado Block Design
Opprette Vivado Block Design

- Start med å opprette et nytt Vivado -prosjekt og velg Zybo Zynq 7000 Z010 som målenhet.

- Klikk deretter på Opprett ny blokkdesign, og legg til Zynq IP. Dobbeltklikk på Zynq IP og importer de medfølgende XPS -innstillingene for Zynq. Aktiver deretter UART0 med MIO 10..11 under kategorien MIO -konfigurasjoner, og sørg også for at Timer 0 og Watchdog -timeren er aktivert.

- Legg til to AXI GPIOS til blokkdesignet. For GPIO 0 må du aktivere tokanaler og sette begge til alle utganger. Angi GPIO -bredden for kanal 1 til 4 bits og for kanal 2 til 12 bits, disse kanalene vil bli brukt til å angi motorretningen og sende mengden flått som koderen måler til prosessoren. For GPIO 1 må du bare sette en kanal til alle innganger med en kanalbredde på 4 bits. Dette vil bli brukt til å motta data fra koderne. Gjør alle GPIO -porter eksterne.

- Neste Legg til to AXI -tidtakere. Gjør pwm0 -portene på begge tidtakerne eksterne. Dette vil være pwms som styrer hastigheten motorene roterer med.

- Endelig Kjør blokkautomatisering og tilkoblingsautomatisering. Kontroller at blokkeringen du har stemmer overens med den som er gitt.

Trinn 4: Kommunikasjon med LiDAR

Denne LiDAR bruker en SCIP 2.0 -protokoll for å kommunisere gjennom UART, den vedlagte filen beskriver hele protokollen.

For å kommunisere med LiDAR bruker vi UART0. LiDAR returnerer 682 datapunkter som hver representerer avstanden til et objekt i den vinkelen. LiDAR skanner mot klokken fra -30 grader til 210 grader med et trinn på 0,351 grader.

- All kommunikasjon til LiDAR skjer med ASCI -tegn, se SCIP -protokollen for formatet som brukes. Vi starter med å sende QT -kommandoen for å slå på LiDAR. Vi sender deretter GS -kommandoen flere ganger og ber om 18 datapunkter om gangen til ft i UARTS 64 byte FIFO. Dataene som returneres fra LiDAR blir deretter analysert og lagret i SCANdata globale matrise.

- Hvert datapunkt som er lagret er 2 byte med kodede data. Hvis du overfører disse dataene til dekoderen, returneres en avstand i millimeter.

I filen main_av.c finner du følgende funksjoner for å kommunisere med LiDAR

sendLIDARcmd (kommando)

- Dette sender inndatastrengen til LiDAR gjennom UART0

recvLIDARdata ()

- Dette vil motta data etter at en kommando er sendt til LiDAR og lagre dataene i RECBuffer

requestDistanceData ()

- Denne funksjonen sender en rekke kommandoer for å hente alle 682 datapunkter. Etter at hvert sett med 18 datapunkter er mottatt, kalles parseLIDARinput () for å analysere dataene og lagre datapunktene trinnvis i SCANdata.

Trinn 5: Befolkningsnett med hindringer

Befolkningsnett med hindringer
Befolkningsnett med hindringer
Befolkningsnett med hindringer
Befolkningsnett med hindringer

GRID som er lagret er en 2D -matrise med hver indeksverdi som representerer et sted. Dataene som er lagret i hver indeks er henholdsvis en 0 eller en 1, ingen hindring og hindring. Kvadratavstanden i millimeter som hver indeks representerer kan endres med GRID_SCALE definisjonen i filen vehicle.h. Størrelsen på 2D -matrisen kan også varieres slik at kjøretøyet kan skanne et større område ved å endre GRID_SIZE -definisjonen.

Etter at et nytt sett med avstandsdata er skannet fra LiDAR, kalles updateGrid (). Dette vil iterere gjennom alle datapunkter som er lagret i SCANdata -matrisen for å bestemme hvilke indekser i rutenettet som har hindringer. Ved å bruke kjøretøyets nåværende retning kan vi bestemme vinkelen som tilsvarer hvert datapunkt. For å bestemme hvor et hinder er, multipliserer du bare den tilsvarende avstanden med cos/sin i vinkelen. Hvis du legger disse to verdiene til kjøretøyets nåværende x- og y -posisjon, returneres indeksen i rutenettet til hindringen. Ved å dele avstanden som returneres av denne operasjonen med GRID_SCALE, kan vi variere hvor stor kvadratavstanden til hver indeks er.

Bildene ovenfor viser kjøretøyets nåværende miljø og det resulterende rutenettet.

Trinn 6: Kommunikasjon med motorer

For å kommunisere med motorene starter vi med å initialisere GPIO -ene for å kontrollere var retningen motoren snurrer i. Deretter kan vi skrive direkte til baseadressen til PWM -ene i AXI -timeren for å sette ting som perioden og driftssyklusen som direkte styrer hastigheten motoren roterer med.

Trinn 7: Baneplanlegging

Skal implementeres i nær fremtid.

Ved å bruke rutenettet og motorfunksjonaliteten som tidligere er beskrevet, er det veldig enkelt å implementere algoritmer som A*. Når bilen beveger seg, vil den fortsette å skanne området rundt og avgjøre om banen den er på fortsatt er gyldig

Anbefalt: