INHOUDSOPGAWE:

Outonome voertuig: 7 stappe (met foto's)
Outonome voertuig: 7 stappe (met foto's)

Video: Outonome voertuig: 7 stappe (met foto's)

Video: Outonome voertuig: 7 stappe (met foto's)
Video: Voertuig speciale video | Kinderfilmpjes | Dr. Panda TotoTime Nederlands 2024, November
Anonim
Outonome voertuig
Outonome voertuig
Outonome voertuig
Outonome voertuig

Hierdie projek is 'n outonoom navigerende robot wat probeer om sy doelposisie te bereik, terwyl hy nie hindernisse onderweg vermy nie. Die robot sal toegerus wees met 'n LiDAR -sensor wat gebruik word om voorwerpe in sy omgewing op te spoor. Namate voorwerpe opgespoor word en die robot rondbeweeg, word 'n intydse kaart bygewerk. Die kaart sal gebruik word om die liggings van die geïdentifiseerde struikelblokke op te slaan. Op hierdie manier sal die robot nie weer 'n mislukte pad na die doelposisie probeer nie. Dit sal in plaas daarvan paaie probeer wat óf geen struikelblokke het nie, óf paaie wat nog nie vir hindernisse nagegaan is nie.

Die robot beweeg deur twee wiele met gelyk aangedrewe motor en twee wiele. Die motors word aan die onderkant van 'n sirkelvormige platform vasgemaak. Die motors word deur twee motorbestuurders beheer. Die motorbestuurders sal PWM -opdragte van die Zynq -verwerker ontvang. Enkoders op elke motor word gebruik om die posisie en oriëntasie van die voertuie by te hou. Die hele stelsel het 'n LiPo -battery.

Stap 1: Monteer die voertuig

Die samestelling van die voertuig
Die samestelling van die voertuig
Die samestelling van die voertuig
Die samestelling van die voertuig
Die samestelling van die voertuig
Die samestelling van die voertuig
Die samestelling van die voertuig
Die samestelling van die voertuig

Die robot word aangedryf deur twee motors wat aan die sywiele gekoppel is, en word daarna ondersteun deur twee wiele, een voor en een agter. Die platform en motorhouers is gemaak van plaatmetaal aluminium. 'N Motornaaf is gekoop om die wiele aan die motor vas te maak. Daar moes egter 'n pasgemaakte tussenkoppelaar gemaak word omdat die gatpatroon van die naaf anders was as die gatpatroon van die wiel.

Die gekose motor was 'n Port Escap 12V DC -motor met ingeboude encoders. Hierdie motor kan teen 'n baie billike prys op eBay gekoop word (sien die stukrekening). Soek sleutelwoorde "12V Escap 16 Coreless DC -motor met enkoders" op eBay om die motor te vind. Daar is gewoonlik 'n redelike hoeveelheid verkopers om uit te kies. Die spesifikasies en pinouts van die motors word in die diagramme hieronder getoon.

Die montering van die robot het begin met 'n CAD -modelontwerp van die onderstel. Die model hieronder toon die voorkant van die 2D -vormprofiel wat ontwerp is vir die onderstel.

Daar word voorgestel dat die onderstel as 'n 2D -profiel ontwerp word sodat dit maklik vervaardig kan word. Ons sny 'n 12 "X12" vel aluminium in die vorm van die onderstel met behulp van 'n waterstraalsnyer. Die onderstelplatform kan ook met 'n lagsaag gesny word.

Stap 2: Monteer motors

Monteermotors
Monteermotors
Monteermotors
Monteermotors

Die volgende stap is om die motorhouers te maak. Daar word voorgestel dat die motorhouers uit aluminiumplaat van 90 grade vervaardig word. Deur hierdie deel te gebruik, kan die motor deur middel van die twee die draagbaar op die een kant van die plaatmetaal vasgemaak word

M2 gate van die motor en die ander kant kan aan die platform vasgemaak word. Daar moet gate in die motorhouer geboor word sodat skroewe gebruik kan word om die motor op die motorhouer en die motorhouer op die platform vas te maak. Die motorhouer kan in die bostaande figuur gesien word.

Vervolgens word die Pololu -motornaaf (sien materiaalbrief) op die motoras geplaas en vasgemaak met die meegeleverde stelskroef en inbussleutel. Die gatpatroon van die Pololu -motorhub pas nie by die gatpatroon van die VEX -wiel nie, dus moet 'n pasgemaakte tussenkoppelaar gemaak word. Daar word voorgestel dat die aluminiumplaat wat gebruik word om die onderstelplatform te vervaardig, gebruik word om die koppelstuk te vervaardig. Die gatpatroon en afmetings van hierdie egpaar word in die onderstaande figuur getoon. Die buitedeursnee en vorm (hoef nie 'n sirkel te wees nie) van die pasgemaakte aluminiumkoppelaar maak nie saak nie, solank alle gate op die onderdeel pas.

Stap 3: Skep Vivado Block Design

Skep Vivado -blokontwerp
Skep Vivado -blokontwerp
Skep Vivado -blokontwerp
Skep Vivado -blokontwerp

- Begin deur 'n nuwe Vivado -projek te skep en kies die Zybo Zynq 7000 Z010 as die teikenapparaat.

- Klik vervolgens op die skep van 'n nuwe blokontwerp en voeg die Zynq IP by. Dubbelklik op die Zynq IP en voer die verskafde XPS -instellings vir die Zynq in. Aktiveer dan UART0 met MIO 10..11 onder die MIO -konfigurasie -oortjie, en maak ook seker dat Timer 0 en die Watchdog -timer geaktiveer is.

- Voeg twee AXI GPIOS by die blokontwerp. Vir GPIO 0, aktiveer tweekanaal en stel beide op alle uitsette in. Stel die GPIO -breedte in vir kanaal 1 tot 4 bisse en vir kanaal 2 tot 12 bisse, hierdie kanale sal gebruik word om die motorrigting in te stel en die hoeveelheid bosluise wat die encoder meet, na die verwerker te stuur. Vir GPIO 1 stel slegs een kanaal vir alle insette met 'n kanaalwydte van 4 bisse in. Dit sal gebruik word om data van die enkoders te ontvang. Maak alle GPIO -poorte ekstern.

- Volgende Voeg twee AXI -timers by. Maak die pwm0 -poorte op beide timers ekstern. Dit is die pwms wat die snelheid waarmee die motors draai, beheer.

- Laastens, voer die outomatisering van die blok en die outomatisering van die verbinding uit. Verifieer dat die blokontwerp wat u het, ooreenstem met die ontwerp.

Stap 4: Kommunikeer met die LiDAR

Hierdie LiDAR gebruik 'n SCIP 2.0 -protokol om via UART te kommunikeer, die aangehegte lêer beskryf die hele protokol.

Om met die LiDAR te kommunikeer, gebruik ons UART0. Die LiDAR gee 682 datapunte terug wat elk die afstand na 'n voorwerp in daardie hoek verteenwoordig. Die LiDAR skandeer linksom van -30 tot 210 grade met 'n stap van 0,351 grade.

- Alle kommunikasie met die LiDAR vind plaas met ASCI -karakters, verwys na die SCIP -protokol vir die gebruikte formaat. Ons begin deur die QT -opdrag te stuur om die LiDAR aan te skakel. Ons stuur dan die GS -opdrag verskeie kere met die versoek om 18 datapunte op 'n slag na die UARTS 64 byte FIFO. Die data wat van die LiDAR teruggestuur word, word dan ontleed en in die SCANdata globale skikking gestoor.

- Elke gestoorde datapunt is 2 grepe gekodeerde data. Deur hierdie data in die dekodeerder deur te gee, word 'n afstand in millimeter teruggegee.

In die main_av.c -lêer vind u die volgende funksies om met die LiDAR te kommunikeer

sendLIDARcmd (opdrag)

- Dit stuur die invoerstring deur die UART0 na die LiDAR

recvLIDARdata ()

- Dit sal data ontvang nadat 'n opdrag aan die LiDAR gestuur is en die data in die RECBuffer gestoor word

requestDistanceData ()

- Hierdie funksie stuur 'n reeks opdragte om al die 682 datapunte op te haal. Nadat elke stel van 18 datapunte ontvang is, word parseLIDARinput () opgeroep om die data te ontleed en die datapunte inkrementeel in SCANdata te stoor.

Stap 5: Bevolkingsrooster met hindernisse

Bevolkingsrooster met hindernisse
Bevolkingsrooster met hindernisse
Bevolkingsrooster met hindernisse
Bevolkingsrooster met hindernisse

Die GRID wat gestoor word, is 'n 2D -skikking met elke indekswaarde wat 'n ligging verteenwoordig. Die data wat in elke indeks gestoor is, is onderskeidelik 'n 0 of 'n 1, geen hindernis en hindernis nie. Die vierkante afstand in millimeter wat elke indeks voorstel, kan verander word met die GRID_SCALE definisie in die voertuig.h lêer. Die grootte van die 2D -skikking kan ook gevarieer word sodat die voertuig 'n groter gebied kan skandeer deur die GRID_SIZE -definisie te verander.

Nadat 'n nuwe stel afstanddata vanaf die LiDAR geskandeer is, word updateGrid () gebel. Dit herhaal deur elke datapunt wat in die SCANdata -skikking gestoor is om te bepaal watter indekse in die rooster hindernisse het. Deur die huidige oriëntasie van die voertuig te bepaal, kan ons die hoek bepaal wat met elke datapunt ooreenstem. Om te bepaal waar 'n hindernis is, vermenigvuldig u die ooreenstemmende afstand eenvoudig met cos/sin van die hoek. Deur hierdie twee waardes by die voertuie se huidige x- en y -posisie te voeg, word die indeks in die rooster van die hindernis teruggegee. Deur die afstand wat deur hierdie bewerking teruggestuur word deur die GRID_SCALE te verdeel, kan ons bepaal hoe groot die vierkante afstand van elke indeks is.

Bogenoemde foto's toon die huidige omgewing van die voertuie en die gevolglike rooster.

Stap 6: Kommunikeer met motors

Om met die motors te kommunikeer, begin ons met die initialisering van die GPIO's om te beheer in die rigting waarin die motor draai. Dan kan ons direk skryf na die basisadres van die PWM's in die AXI -timer om dinge in te stel soos die tydperk en die Duty -siklus wat die spoed waarmee die motor draai.

Stap 7: Padbeplanning

Word in die nabye toekoms geïmplementeer.

Met behulp van die rooster en motorfunksies wat voorheen beskryf is, is dit baie maklik om algoritmes soos A*te implementeer. Terwyl die voertuig beweeg, sal dit voortgaan om die omliggende gebied te skandeer en vas te stel of die pad waarop dit is nog geldig is

Aanbeveel: