Tartalomjegyzék:

Autonóm jármű: 7 lépés (képekkel)
Autonóm jármű: 7 lépés (képekkel)

Videó: Autonóm jármű: 7 lépés (képekkel)

Videó: Autonóm jármű: 7 lépés (képekkel)
Videó: Kiderült: Így keresi a pénzét PSGOgli7 2024, November
Anonim
Autonóm jármű
Autonóm jármű
Autonóm jármű
Autonóm jármű

Ez a projekt egy önállóan navigáló robot, amely megpróbálja elérni célpontját, miközben elkerüli az akadályokat. A robotot LiDAR érzékelővel látják el, amelyet a környezetében lévő tárgyak észlelésére használnak. A tárgyak észlelésekor és a robot mozgásakor a valós idejű térkép frissül. A térképet az azonosított akadályok helyének mentésére használják. Így a robot nem próbálja meg újra a sikertelen utat a célhelyzethez. Ehelyett olyan utakat próbál meg, amelyeknek nincs akadálya, vagy olyan utakat, amelyeket még nem ellenőriztek.

A robot két egyenáramú motorral hajtott kerékkel és két görgővel mozog. A motorokat egy kör alakú platform aljára kell rögzíteni. A motorokat két motorhajtó fogja irányítani. A motorvezérlők PWM parancsokat kapnak a Zynq processzortól. Az egyes motorokon található kódolók nyomon követik a jármű helyzetét és irányát. Az egész rendszer LiPo akkumulátorral fog működni.

1. lépés: A jármű összeszerelése

A jármű összeszerelése
A jármű összeszerelése
A jármű összeszerelése
A jármű összeszerelése
A jármű összeszerelése
A jármű összeszerelése
A jármű összeszerelése
A jármű összeszerelése

A robotot két motor hajtja, amelyek az oldalsó kerekekhez vannak rögzítve, majd két görgő is támogatja, az egyik elöl és a másik hátul. A platform és a motor rögzítése alumíniumlemezből készült. Motor kerékagyat vásároltak a kerekek motorhoz rögzítéséhez. Azonban egyedi közbenső csatolót kellett készíteni, mert az agy furatmintája eltér a kerék furatmintájától.

A kiválasztott motor Port Escap 12V DC motor volt, beépített kódolókkal. Ez a motor megvásárolható az ebay -en nagyon kedvező áron (lásd az anyagjegyzéket). Keresse meg a kulcsszavakat „12V Escap 16 Coreless Geared DC Motor with Encoders” az ebay -en, hogy megtalálja a motort. Általában elég sok eladó közül lehet választani. A motorok specifikációi és érintkezői az alábbi ábrákon láthatók.

A robot összeszerelése az alváz CAD -modellezésével kezdődött. Az alábbi modell az alvázhoz tervezett 2D alakú profil felülnézetét mutatja.

Javasoljuk, hogy az alvázat 2D -profilként tervezzék, hogy könnyen gyártható legyen. Vízsugaras vágóval 12”X12” méretű alumíniumlemezt vágtunk az alváz alakjába. A futómű platformot szalagfűrésszel is meg lehetett vágni.

2. lépés: Motorok felszerelése

Szerelő motorok
Szerelő motorok
Szerelő motorok
Szerelő motorok

A következő lépés a motor rögzítése. Javasoljuk, hogy a motortartókat 90 fokos fémlemezből készítsék. Ennek az alkatrésznek a segítségével a motort a két lemez segítségével a konzolra lehet rögzíteni a fémlemez egyik oldalára

A motor és a másik oldal M2 furatát a platformra lehet csavarozni. A motor tartójába lyukakat kell fúrni, hogy csavarokkal rögzíthessék a motort a motortartóra, és a motortartót a platformra. A motor rögzítése a fenti ábrán látható.

Ezután a Pololu motor agyat (lásd az anyagjegyzéket) helyezzük a motortengelyre, és húzzuk meg a mellékelt rögzítőcsavarral és imbuszkulccsal. A Pololu motor agy furatmintája nem egyezik a VEX kerék furatmintájával, ezért egyedi közbenső csatlakozót kell készíteni. Javasoljuk, hogy az alváz emelésére használt alumíniumlemez -fémhulladékot a csatoló készítésére használják. Ennek a párnak a lyukmintázata és méretei az alábbi ábrán láthatók. Az egyedi alumínium csatlakozó külső átmérője és alakja (nem kell körnek lennie) nem számít, amíg az összes lyuk elfér az alkatrészen.

3. lépés: Vivado blokktervezés létrehozása

Vivado Block Design készítése
Vivado Block Design készítése
Vivado Block Design készítése
Vivado Block Design készítése

- Kezdje egy új Vivado projekt létrehozásával, és válassza ki a Zybo Zynq 7000 Z010 eszközt.

- Ezután kattintson az új blokkterv létrehozása gombra, és adja hozzá a Zynq IP -t. Kattintson duplán a Zynq IP -re, és importálja a Zynq XPS -beállításait. Ezután engedélyezze az UART0 -t a MIO 10..11 segítségével a MIO konfigurációk lapon, és győződjön meg arról, hogy a 0. időzítő és a Watchdog időzítő engedélyezve van.

- Adjon hozzá két AXI GPIOS -t a blokk kialakításához. GPIO 0 esetén engedélyezze a kétcsatornás beállítást, és állítsa mindkettőt az összes kimenetre. Állítsa be a GPIO szélességét az 1-4 csatorna és a 2-12 csatorna esetében, ezekkel a csatornákkal lehet beállítani a motor irányát, és elküldeni a kódoló által mért kullancsok mennyiségét a processzornak. GPIO 1 esetén csak egy csatornát állítson be minden 4 bites csatorna szélességű bemenetre. Ezt arra használják, hogy adatokat fogadjanak a kódolóktól. Az összes GPIO -portot tegye külsővé.

- Következő Két AXI időzítő hozzáadása. Mindkét időzítő pwm0 portja legyen külső. Ezek azok a pwm -ek, amelyek szabályozzák a motorok forgási sebességét.

- Végül futtassa a blokk automatizálást és a kapcsolat automatizálást. Ellenőrizze, hogy a blokk kialakítása megfelel -e a megadottnak.

4. lépés: Kommunikáció a LiDAR -val

Ez a LiDAR SCIP 2.0 protokollt használ az UART -on keresztüli kommunikációhoz, a csatolt fájl leírja a teljes protokollt.

A LiDAR -val való kommunikációhoz az UART0 -t fogjuk használni. A LiDAR 682 adatpontot ad vissza, amelyek az adott szögben lévő objektum távolságát jelzik. A LiDAR az óramutató járásával ellentétes irányban pásztáz -30 és 210 fok között, 0,351 fokos lépéssel.

- Minden kommunikáció a LiDAR -hoz ASCI karakterekkel történik, lásd a SCIP protokollt a használt formátumhoz. Kezdjük azzal, hogy elküldjük a QT parancsot a LiDAR bekapcsolásához. Ezután többször elküldjük a GS parancsot, egyszerre 18 adatpontot kérve az UARTS 64 bájtos FIFO -ba. A LiDAR -ból visszaadott adatokat ezután elemzi és tárolja a SCANdata globális tömbben.

- Minden tárolt adatpont 2 bájt kódolt adat. Ha ezeket az adatokat átadja a dekódolónak, a távolság milliméterben tér vissza.

A main_av.c fájlban a következő funkciók találhatók a LiDAR -val való kommunikációhoz

sendLIDARcmd (parancs)

- Ez elküldi a bemeneti karakterláncot a LiDAR -nak az UART0 -n keresztül

recvLIDARdata ()

- Ez adatokat fog kapni, miután parancsot küldtek a LiDAR -nak, és tárolja az adatokat a RECBufferben

requestDistanceData ()

- Ez a funkció parancsok sorozatát küldi mind a 682 adatpont lekérésére. Minden egyes 18 adatpontból álló paceLIDARinput () meghívást kap az adatok elemzésére és az adatpontok fokozatos tárolására a SCANdata -ban.

5. lépés: A rács feltöltése akadályokkal

Rács feltöltése akadályokkal
Rács feltöltése akadályokkal
Rács feltöltése akadályokkal
Rács feltöltése akadályokkal

A tárolt GRID egy 2D tömb, ahol minden indexérték egy helyet jelöl. Az egyes indexekben tárolt adatok 0 vagy 1, nincs akadály vagy akadály. Az egyes indexek által jelzett négyzet távolság milliméterben megváltoztatható a vehicle.h fájl GRID_SCALE definíciójával. A 2D tömb mérete is változtatható, hogy a jármű nagyobb területet tudjon beolvasni a GRID_SIZE definíció módosításával.

Miután új távolságadat -készletet szkennelt a LiDAR -ból, a updateGrid () meghívásra kerül. Ez megismétli a SCANdata tömbben tárolt minden adatpontot, hogy meghatározza, hogy a rács mely indexei vannak akadályok. A jármű aktuális tájolását használva meghatározhatjuk az egyes adatpontoknak megfelelő szöget. Annak meghatározásához, hogy hol van az akadály, egyszerűen szorozza meg a megfelelő távolságot a szög cos/sin -jével. Ha hozzáadja ezt a két értéket a járművek aktuális x és y pozíciójához, akkor visszaállítja az indexet az akadály rácsában. Ha a művelet által visszaadott távolságot elosztjuk a GRID_SCALE értékkel, akkor megváltoztathatjuk, hogy mekkora az egyes indexek négyzetes távolsága.

A fenti képek a járművek jelenlegi környezetét és az így kapott rácsot mutatják be.

6. lépés: Kommunikáció a motorokkal

A motorokkal való kommunikációhoz a GPIO -k vezérlésének inicializálásával kezdjük a motor bepörgésének irányát. Ezután az AXI időzítőben közvetlenül a PWM -ek alapcímére történő írás lehetővé teszi számunkra, hogy beállítsunk olyan dolgokat, mint az időszak és a munkaciklus, amelyek közvetlenül vezérlik a a motor fordulatszámával.

7. lépés: Útvonaltervezés

A közeljövőben kell megvalósítani.

A korábban ismertetett rács- és motorfunkciókat használva nagyon egyszerű olyan algoritmusok megvalósítása, mint az A*. A jármű mozgása közben tovább vizsgálja a környező területet, és megállapítja, hogy az útvonal továbbra is érvényes -e

Ajánlott: