Obsah:

Autonomní vozidlo: 7 kroků (s obrázky)
Autonomní vozidlo: 7 kroků (s obrázky)

Video: Autonomní vozidlo: 7 kroků (s obrázky)

Video: Autonomní vozidlo: 7 kroků (s obrázky)
Video: Startovat auto se spojkou, nebo bez? Martin Vaculík vysvětlí, proč je jen jedna možnost správně 2024, Listopad
Anonim
Autonomní vozidlo
Autonomní vozidlo
Autonomní vozidlo
Autonomní vozidlo

Tento projekt je autonomně navigující robot, který se snaží dosáhnout své cílové pozice a přitom se vyhýbá překážkám na cestě. Robot bude vybaven senzorem LiDAR, který bude sloužit k detekci předmětů v jeho okolí. Jakmile jsou detekovány objekty a robot se pohybuje, bude aktualizována mapa v reálném čase. Mapa bude použita k uložení umístění překážek, které byly identifikovány. Tímto způsobem se robot znovu nepokusí o neúspěšnou cestu do cílové pozice. Místo toho se pokusí o cesty, které buď nemají překážky, nebo cesty, u kterých ještě nebyly překážky zkontrolovány.

Robot se bude pohybovat pomocí dvou stejnosměrných motorem poháněných kol a dvou koleček. Motory budou připevněny ke spodní části kruhové plošiny. Motory budou ovládat dva ovladače motoru. Ovladače motoru budou dostávat příkazy PWM z procesoru Zynq. Kodéry na každém motoru lze použít ke sledování polohy a orientace vozidel. Celý systém bude napájen baterií LiPo.

Krok 1: Sestavení vozidla

Sestavení vozidla
Sestavení vozidla
Sestavení vozidla
Sestavení vozidla
Sestavení vozidla
Sestavení vozidla
Sestavení vozidla
Sestavení vozidla

Robot je poháněn dvěma motory připevněnými na bočních kolech a poté je navíc podepřen dvěma kolečky, jedním vpředu a druhým vzadu. Držáky plošiny a motoru byly vyrobeny z hliníkového plechu. K připevnění kol k motoru byl zakoupen náboj motoru. Bylo však nutné vyrobit vlastní mezilehlou spojku, protože vzor otvoru náboje byl odlišný od vzoru otvoru kola.

Vybraným motorem byl 12V stejnosměrný motor Port Escap s vestavěnými kodéry. Tento motor lze zakoupit na ebay za velmi rozumnou cenu (viz kusovník). Hledejte klíčová slova „12V Escap 16 bezjádrový převodový motor s kodéry“na ebay a vyhledejte motor. Na výběr je obvykle slušné množství prodejců. Specifikace a vývody motorů jsou uvedeny v níže uvedených schématech.

Montáž robota začala návrhem CAD modelu podvozku. Níže uvedený model ukazuje pohled shora na 2D tvarový profil určený pro podvozek.

Navrhuje se, aby byl podvozek navržen jako 2D profil, aby jej bylo možné snadno vyrobit. Pomocí řezačky vodního paprsku jsme nařezali 12”X12” plech z hliníku do tvaru podvozku. Podvozkovou platformu lze také řezat pásovou pilou.

Krok 2: Montáž motorů

Montážní motory
Montážní motory
Montážní motory
Montážní motory

Dalším krokem je výroba držáků motoru. Doporučuje se, aby držáky motoru byly vyrobeny z 90 stupňového hliníkového plechu. Pomocí této části lze motor pomocí dvou upevnit na jednu stranu plechu

Otvory M2 motoru a druhou stranu lze přišroubovat k platformě. Do držáku motoru je třeba vyvrtat otvory, aby bylo možné použít šrouby k upevnění motoru na držák motoru a držák motoru na platformu. Uchycení motoru je vidět na obrázku výše.

Poté se na hřídel motoru umístí motorový náboj Pololu (viz kusovník) a utáhne se dodaným stavěcím šroubem a imbusovým klíčem. Rozteč otvorů náboje motoru Pololu neodpovídá vzoru otvorů kola VEX, takže je třeba vyrobit vlastní mezilehlou spojku. Navrhuje se, aby na výrobu spojky byl použit hliníkový šrot používaný k výrobě podvozkové platformy. Vzor děr a rozměry této dvojice jsou znázorněny na obrázku níže. Vnější průměr a tvar (nemusí to být kruh) vlastní hliníkové spojky nezáleží, pokud všechny díly zapadnou do dílu.

Krok 3: Vytvoření návrhu bloku Vivado

Vytváření designu bloku Vivado
Vytváření designu bloku Vivado
Vytváření designu bloku Vivado
Vytváření designu bloku Vivado

- Začněte vytvořením nového projektu Vivado a jako cílové zařízení vyberte Zybo Zynq 7000 Z010.

- Dále klikněte na vytvořit nový design bloku a přidejte Zynq IP. Poklepejte na Zynq IP a importujte poskytnutá nastavení XPS pro Zynq. Poté povolte UART0 s MIO 10..11 na kartě Konfigurace MIO a také se ujistěte, že je povolený časovač 0 a časovač Watchdog.

- Přidejte do návrhu bloku dva AXI GPIOS. Pro GPIO 0 povolte dvoukanálový a nastavte oba na všechny výstupy. Nastavte šířku GPIO pro kanál 1 až 4 bity a pro kanál 2 až 12 bitů budou tyto kanály použity k nastavení směru motoru a odeslání množství ticků, které kodér měří do procesoru. Pro GPIO 1 nastavte pouze jeden kanál na všechny vstupy se šířkou kanálu 4 bity. Toto bude použito pro příjem dat z kodérů. Udělejte všechny porty GPIO externí.

- Další Přidejte dva časovače AXI. Externí porty pwm0 na obou časovačích. To budou pwms, které řídí rychlost, kterou se motory otáčejí.

- Nakonec spusťte automatizaci bloků a automatizaci připojení. Ověřte, že design bloku, který máte, odpovídá zadanému.

Krok 4: Komunikace s LiDAR

Tento LiDAR používá ke komunikaci přes UART protokol SCIP 2.0, připojený soubor popisuje celý protokol.

Ke komunikaci s LiDAR budeme používat UART0. LiDAR vrací 682 datových bodů, z nichž každý představuje vzdálenost objektu v daném úhlu. LiDAR skenuje proti směru hodinových ručiček od -30 stupňů do 210 stupňů s krokem 0,351 stupně.

- Veškerá komunikace s LiDAR probíhá pomocí znaků ASCI, použitý formát viz protokol SCIP. Začneme odesláním příkazu QT k zapnutí LiDAR. Poté několikrát odešleme příkaz GS požadující 18 datových bodů najednou na ft v 64bajtovém FIFO UARTS. Data vrácená z LiDAR jsou poté analyzována a uložena do globálního pole SCANdata.

- Každý uložený datový bod má 2 bajty zakódovaných dat. Předáním těchto dat do dekodéru se vrátí vzdálenost v milimetrech.

V souboru main_av.c najdete následující funkce pro komunikaci s LiDAR

sendLIDARcmd (příkaz)

- To odešle vstupní řetězec do LiDAR přes UART0

recvLIDARdata ()

- To bude přijímat data poté, co byl příkaz odeslán do LiDAR, a uložit data do RECBuffer

requestDistanceData ()

- Tato funkce odešle řadu příkazů k načtení všech 682 datových bodů. Po přijetí každé sady 18 datových bodů se zavolá parseLIDARinput () pro analýzu dat a přírůstkové ukládání datových bodů do SCANdata.

Krok 5: Naplnění mřížky překážkami

Populační mřížka s překážkami
Populační mřížka s překážkami
Populační mřížka s překážkami
Populační mřížka s překážkami

Uložená mřížka je 2D pole s každou hodnotou indexu představující umístění. Data uložená v každém indexu jsou buď 0, nebo 1, žádná překážka, respektive překážka. Čtverečnou vzdálenost v milimetrech, kterou každý index představuje, lze změnit pomocí definice GRID_SCALE v souboru Vehicle.h. Velikost 2D pole lze také měnit, aby vozidlo mohlo skenovat větší oblast úpravou definice GRID_SIZE.

Po naskenování nové sady údajů o vzdálenosti z LiDAR se zavolá updateGrid (). Tím se bude iterovat každý datový bod uložený v poli SCANdata, aby se určilo, které indexy v mřížce mají překážky. Pomocí aktuální orientace vozidla můžeme určit úhel, který odpovídá každému datovému bodu. Chcete -li zjistit, kde je překážka, jednoduše vynásobte odpovídající vzdálenost cos/sin úhlu. Sečtením těchto dvou hodnot do aktuální polohy vozidla x a y se vrátí index v mřížce překážky. Rozdělení vzdálenosti vrácené touto operací pomocí GRID_SCALE nám umožní měnit, jak velká je čtvercová vzdálenost každého indexu.

Výše uvedené obrázky ukazují aktuální prostředí vozidla a výslednou mřížku.

Krok 6: Komunikace s motory

Abychom mohli komunikovat s motory, začneme inicializací GPIO k ovládání, ve kterém se motor točí. Poté zápis přímo na základní adresu PWM v časovači AXI nám umožňuje nastavit věci jako období a pracovní cyklus, které přímo řídí rychlost, kterou se motor otáčí.

Krok 7: Plánování cesty

Bude implementováno v blízké budoucnosti.

Pomocí dříve popsaných funkcí mřížky a motoru je velmi snadné implementovat algoritmy jako A*. Jak se vozidlo pohybuje, bude pokračovat ve skenování okolní oblasti a určí, zda je cesta, na které se nachází, stále platná

Doporučuje: