Innehållsförteckning:

Autonomt fordon: 7 steg (med bilder)
Autonomt fordon: 7 steg (med bilder)

Video: Autonomt fordon: 7 steg (med bilder)

Video: Autonomt fordon: 7 steg (med bilder)
Video: BLITZKRIEG | ERWIN ROMMEL und die 7. Panzer-Division - die GESPENSTERDIVISION 2024, November
Anonim
Autonomt fordon
Autonomt fordon
Autonomt fordon
Autonomt fordon

Detta projekt är en autonomt navigerande robot som försöker nå sin målposition samtidigt som man undviker hinder på vägen. Roboten kommer att utrustas med en LiDAR -sensor som kommer att användas för att detektera föremål i omgivningen. När objekt detekteras och roboten rör sig, kommer en realtidskarta att uppdateras. Kartan kommer att användas för att spara platserna för hinder som har identifierats. På så sätt kommer roboten inte att försöka igen på en misslyckad väg till målpositionen. Det kommer istället att försöka vägar som antingen inte har några hinder eller vägar som ännu inte har kontrollerats för hinder.

Roboten kommer att röra sig med två DC -motordrivna hjul och två hjul. Motorerna kommer att fästas på botten av en cirkulär plattform. Motorerna kommer att styras av två motorförare. Motorförarna kommer att ta emot PWM -kommandon från Zynq -processorn. Kodare på varje motor används alla för att hålla reda på fordonets position och orientering. Hela systemet kommer att drivas med ett LiPo -batteri.

Steg 1: Montering av fordonet

Montering av fordonet
Montering av fordonet
Montering av fordonet
Montering av fordonet
Montering av fordonet
Montering av fordonet
Montering av fordonet
Montering av fordonet

Roboten drivs av två motorer som är fästa på sidohjulen och stöds sedan av två hjul, ett fram och ett bak. Plattformen och motorfästen var gjorda av plåtaluminium. Ett motornav köptes för att fästa hjulen på motorn. En anpassad mellankoppling behövde dock göras eftersom navets hålmönster var annorlunda än hjulmönstret.

Motorn som valdes var en Port Escap 12V DC -motor med inbyggda givare. Denna motor kan köpas på ebay till ett mycket rimligt pris (se Materialförteckning). Sök nyckelord”12V Escap 16 Coreless Geared DC Motor with Encoders” på ebay för att hitta motorn. Det finns vanligtvis en hel del säljare att välja mellan. Specifikationerna och pinouts för motorerna visas i diagrammen nedan.

Monteringen av roboten började med en CAD -modelldesign av chassit. Modellen nedan visar den övre vyn av 2D -formprofilen avsedd för chassit.

Det föreslås att chassit är utformat som en 2D -profil så att det enkelt kan tillverkas. Vi skär ett 12”X12” -ark aluminium i form av chassit med hjälp av en vattenstråleskärare. Chassiplattformen kan också skäras med en bandsåg.

Steg 2: Montering av motorer

Monteringsmotorer
Monteringsmotorer
Monteringsmotorer
Monteringsmotorer

Nästa steg är att göra motorfästen. Det föreslås att motorfästena är gjorda av 90-graders plåtaluminium. Med denna del kan motorn fästas fribärande på ena sidan av plåten med hjälp av de två

M2 -hål på motorn och den andra ytan kan skruvas fast på plattformen. Hål måste borras i motorfästet så att skruvar kan användas för att fästa motorn på motorfästet och motorfästet på plattformen. Motorfästet kan ses i figuren ovan.

Därefter placeras Pololu Motor Hub (se Materialförteckning) på motoraxeln och dras åt med den medföljande inställningsskruven och insexnyckeln. Hålmönstret på Pololu -motornavet matchar inte hålmönstret på VEX -hjulet så en anpassad mellankoppling måste göras. Det föreslås att plåtskrot Aluminium som används för att göra chassiplattformen används för att göra kopplingen. Hålmönstret och måtten på detta par visas i figuren nedan. Ytterdiametern och formen (behöver inte vara en cirkel) på den anpassade aluminiumkopplingen spelar ingen roll så länge alla hål passar på delen.

Steg 3: Skapa Vivado Block Design

Skapa Vivado Block Design
Skapa Vivado Block Design
Skapa Vivado Block Design
Skapa Vivado Block Design

- Börja med att skapa ett nytt Vivado -projekt och välj Zybo Zynq 7000 Z010 som målenhet.

- Klicka sedan på skapa ny blockdesign och lägg till Zynq IP. Dubbelklicka på Zynq IP och importera de medföljande XPS -inställningarna för Zynq. Aktivera sedan UART0 med MIO 10..11 under fliken MIO -konfigurationer och se också till att Timer 0 och Watchdog -timern är aktiverade.

- Lägg till två AXI GPIOS till blockdesignen. För GPIO 0 aktivera dubbelkanal och ställ in båda till alla utgångar. Ställ in GPIO -bredden för kanal 1 till 4 bitar och för kanal 2 till 12 bitar, dessa kanaler kommer att användas för att ställa in motorriktningen och skicka antalet fästingar som kodaren mäter till processorn. För GPIO 1 ställer du in bara en kanal till alla ingångar med en kanalbredd på 4 bitar. Detta kommer att användas för att ta emot data från kodarna. Gör alla GPIO -portar externa.

- Nästa Lägg till två AXI -timer. Gör pwm0 -portarna på båda tidtagarna externa. Det här är pwms som styr hastigheten motorerna roterar med.

- Slutligen Kör blockautomatisering och anslutningsautomatisering. Kontrollera att blockdesignen du har matchar den som tillhandahålls.

Steg 4: Kommunicera med LiDAR

Denna LiDAR använder ett SCIP 2.0 -protokoll för att kommunicera via UART, den bifogade filen beskriver hela protokollet.

För att kommunicera med LiDAR kommer vi att använda UART0. LiDAR returnerar 682 datapunkter som var och en representerar avståndet till ett objekt i den vinkeln. LiDAR skannar moturs från -30 grader till 210 grader med ett steg på 0,351 grader.

- All kommunikation till LiDAR sker med ASCI -tecken, se SCIP -protokollet för formatet som används. Vi börjar med att skicka QT -kommandot för att slå på LiDAR. Vi skickar sedan GS -kommandot flera gånger och begär 18 datapunkter åt gången till ft i UARTS 64 byte FIFO. Data som returneras från LiDAR analyseras och lagras sedan i SCANdatas globala array.

- Varje lagrad datapunkt är 2 byte kodad data. Att överföra dessa data till avkodaren returnerar ett avstånd i millimeter.

I filen main_av.c hittar du följande funktioner för att kommunicera med LiDAR

sendLIDARcmd (kommando)

- Detta skickar inmatningssträngen till LiDAR via UART0

recvLIDARdata ()

- Detta kommer att ta emot data efter att ett kommando har skickats till LiDAR och lagra data i RECBuffer

requestDistanceData ()

- Denna funktion skickar en serie kommandon för att hämta alla 682 datapunkter. Efter varje uppsättning med 18 datapunkter har parseLIDARinput () anropats för att analysera data och gradvis lagra datapunkterna i SCANdata.

Steg 5: Befolkningsnät med hinder

Befolkningsnät med hinder
Befolkningsnät med hinder
Befolkningsnät med hinder
Befolkningsnät med hinder

GRID som lagras är en 2D -array med varje indexvärde som representerar en plats. Data som lagras i varje index är antingen 0 eller 1, inget hinder respektive hinder. Kvadratavståndet i millimeter som varje index representerar kan ändras med GRID_SCALE -definitionen i filen vehicle.h. Storleken på 2D -matrisen kan också varieras så att fordonet kan skanna ett större område genom att ändra definitionen GRID_SIZE.

Efter att en ny uppsättning av distansdata har skannats från LiDAR -uppdateringen anropas UpdateGrid (). Detta kommer att iterera genom varje datapunkt som lagras i SCANdata -arrayen för att avgöra vilka index i nätet som har hinder. Med hjälp av fordonets aktuella orientering kan vi bestämma vinkeln som motsvarar varje datapunkt. För att avgöra var ett hinder är, multiplicerar du helt enkelt motsvarande avstånd med vinkeln cos/sin. Genom att lägga till dessa två värden i fordonets nuvarande x- och y -position returneras indexet i hindret. Genom att dela avståndet som returneras av denna operation med GRID_SCALE kan vi variera hur stort kvadratavståndet för varje index är.

Bilderna ovan visar fordonets nuvarande miljö och det resulterande rutnätet.

Steg 6: Kommunicera med motorer

För att kommunicera med motorerna börjar vi med att initialisera GPIO: erna för att styra var riktningen motorn snurrar i. Sedan skriver vi direkt till basadressen för PWM: erna i AXI -timern så att vi kan ställa in saker som perioden och Duty -cykeln som direkt styr motorns varvtal.

Steg 7: Banplanering

Ska genomföras inom en snar framtid.

Med hjälp av rutnät och motorfunktionalitet som tidigare beskrivits är det mycket enkelt att implementera algoritmer som A*. När fordonet rör sig fortsätter det att skanna det omgivande området och avgöra om vägen det är på fortfarande är giltig

Rekommenderad: