A VEX AI robot kódolása

Ez a cikk egy példaprojektet mutat be, amely egy műszerfalat jelenít meg, amely a VEXlink használatával folytatott robot-robot kommunikáció állapotát, valamint a Jetson állapotát jelenti. Az ai_demo projekt a Githubwebhelyen található. Ez a demóprojekt adatokat gyűjt a Jetson processzorról USB soros kapcsolaton keresztül. Az adatok vétele után megjelennek a V5 Brain képernyőjén, és továbbítják a VEXlinken keresztül csatlakoztatott V5-ös partner robotnak is.

Ehhez a projekthez a VEXcode Pro V5 legújabb verziója szükséges (2.0.2 és újabb verziók). Letöltötte a VEXcode Pro V5-öt innen.

VEXcode-Pro-V5-icon.png


Az Nvidia Jetson Nano a VEX V5 Brain Communications-hez

A Jetson processzor tartalmaz egy alkalmazást, amely a következő adatokat gyűjti a VEX AI szoftverből:

Screen_Shot_2021-02-05_at_3.30.04_PM.png

Robot helyadatok:

  • A robot X,Y helye mm-ben a mező közepétől.
  • A robot azimutja (irány), magassága (emelkedés), forgása (gurulás) mind radiánban.

Objektumészlelési adatok (kétféle):

image4.png

A doboz adatai (első típus):
  • Ezek az adatok az AI képérzékelő által észlelt objektumot képviselik.
  • Az adatok tartalmaznak egy értéket, amely az észlelt objektum besorolását jelenti. (Értékek: 0 = piros labda, 1 = kék labda, 2 = gól)
  • Ez az adat az objektumot írja le a videoképre hivatkozva.
  • Az X, Y, szélesség és magasság értékei pixel egységekben vannak megadva. A pixelértékek a videó képernyő bal felső sarkára vonatkoznak. A kép felbontása 320x240.

image2.png

image6.png

Térképinformációk (kettes típus):

  • Ezek az adatok ugyanazt az adatot jelentik, mint a dobozinformáció, de ezek az adatok megmaradnak, ha az objektum észlelése megszűnik.
  • Minden objektumnak van egy korértéke, amely minden olyan videókockánál növekszik, amelynél az objektum nem észlelhető. Tehát minél magasabb egy objektum életkora, annál régebb óta észlelte az AI-rendszer az objektumot.
  • Minden objektum tartalmaz egy értéket, amely az észlelt objektum osztályozását jelenti. (Értékek: 0 = piros labda, 1 = kék labda, 2 = gól)
  • Minden objektum tartalmazza az objektum helyét a mező közepéhez képest is. X és Y értékei milliméterben vannak megadva a mező közepétől a megfelelő tengelyükön. A Z értéke milliméter a mezőlapkától.

    Megjegyzés: ezek az értékek hüvelykre és fokokra konvertálódnak, hogy megfeleljenek a webes irányítópulton megjelenő adatoknak.
  • Az ai_demo programban ezen objektumok értékeit a MAP_RECORD struktúra képviseli.

Az ai_demo program lebontása:

        • Main.cpp

          image5.png

          A szabvány a VEX projektekhez tartalmazza:

          image7.png

          Jelentsd meg a Jetson osztály egy példányát. Ez az osztály adatkérések küldésére szolgál a Jetsonnak, valamint adatok fogadására USB soros kapcsolaton keresztül.

          #define MANAGER_ROBOT 1

          Define_manager_robot_1.png

          Deklarálja a robot_link osztály egy példányát. Ezt az objektumot a robot és egy partnerrobot közötti kapcsolódásra és adatátvitelre fogják használni. Ugyanez a projekt két különálló robotra is letölthető. Egy robotnak szüksége lesz a következő sorra:

          //#define MANAGER_ROBOT 1

          Mielőtt betöltené a kódot a második robotra, megjegyzésbe kell írnia ezt a sort:

A robot_link osztály beállítja a robot VEXlinkjét, és kezeli az adatok továbbítását és fogadását a két robot között. Ebben a cikkben nem részletezzük az osztály működését. Jó ötlet lenne először megérteni a VEXlink működését. A V5 VEXlink API használatával kapcsolatos részletesebb információkért ez a dokumentum ismerteti az új könyvtárakat és azok hatékony használatát robot-robot kommunikáció.

  • Verseny Eseménykezelők

    firstAutoFlag.png

    Az egyik legnagyobb különbség a VAIC és a VRC között, hogy nincs vezetői ellenőrzési időszak. Ehelyett két autonóm időszak van, az izolációs időszak és az interakciós időszak. Ebben a példában minden autonóm időszakhoz külön rutinok vannak. Mivel a VEX API nem támogat két különböző visszahívást, a programban egy jelzőnek kell lennie annak meghatározásához, hogy melyik rutint kell végrehajtani. Ebben a példaprogramban a „firstAutoFlag” az Isolation funkció meghívására szolgál az autonóm első engedélyezésekor, az interakciós funkció pedig az autonóm másodszori engedélyezése esetén. Egy dolog, amit meg kell jegyezni, hogy ha valamilyen okból vissza kell állítani az egyezést, akkor a bemutató programot újra kell indítani, hogy az első AutoFlag visszaállítható legyen.

  • Fő()

    image3.png

    Ez a projekt fő feladata. A VEXcode környezet megfelelő beállításához a vexcodeInit() meghívásával kezdődik. Ezután egy helyi MAP_RECORD objektum deklarálva van a Jetsontól kapott adatok tárolására. Egy külön feladat is be van állítva a képernyő legfrissebb adatokkal történő frissítésére. A feladat kódja a dashboard.cpp fájlban található. Az autonóm visszahívás is regisztrálva van az autonóm időszakok elindításakor.

    A main while() ciklus a jetson_comms objektum legfrissebb adatainak a helyi MAP_RECORD objektumunkba másolásával indul. Ezután átadja a robot helyinformációit a link objektumnak, hogy azt továbbíthassa partnerrobotunknak. Miután befejezte az adatok feldolgozását, további adatokat kér a Jetsontól, és 66 ezredmásodpercig alszik. Ezen adatok lekérdezési frekvenciája 15 Hz. Nincs ok a gyorsabb szavazásra, mivel az AI rendszer adatai körülbelül 15 Hz-en frissülnek.

    Megjegyzés: a Jetson térképadatokat csak egyetlen feladatnak kell lekérnie.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: