A VEX AI robot kódolása

Ez a cikk egy példaprojektet mutat be, amely egy irányítópultot jelenít meg, amely a VEXlink segítségével a robotok és a robotok közötti kommunikáció állapotát jelenti, valamint a Jetson állapotát. Az ai_demo projekt a Githubünkön 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.

megjegyzés: Ehhez a projekthez a V5-höz készült VS Code Extension legújabb verziója szükséges. Töltse le a V5 VS Code kiterjesztését innen.


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:

Két terepi ábra, amelyek a robot pozícióját, tájolását és koordinátatengelyeit mutatják a helymeghatározáshoz.

Robot helyadatok:

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

Objektumészlelési adatok (három típus):

Kameranézet, ahol az észlelt játékbeli objektumok színnel, pozíciókoordinátákkal és távolsággal vannak címkézve.

Képészlelés (első típus):

  • Ezek az adatok a VEX AI Intel Camera által észlelt objektumot képviselik.
  • Ez az adat az objektumot a kamera képére hivatkozva írja le.
  • Az X, Y, szélesség és magasság értékei pixel egységekben vannak megadva. A pixelértékek a kép- és tárgyfelismerő mező bal felső sarkára vonatkoznak. A kép felbontása 640x480.

 

Meződiagram, amely az X és Y koordinátatengelyeket, valamint az X0 Y0 referenciapozícióját mutatja a mező közepén.

Térképészlelés (kettes típus):

  • Ezek az adatok az objektum helyét a területen a GPS-érzékelővel azonos koordinátarendszerben jelentik, méterben megadva.
  • Minden objektum tartalmazza az objektum helyét a mező közepéhez képest is. Az X és Y értékei méter egységekben vannak megadva a mező középpontjától a megfelelő tengelyükön. A Z értéke méter a mezőlapkától (magasság).

Észlelési objektum (hármas típus):

C++ kódrészlet, amely meghatározza az észlelt objektumok adatszerkezeteit, beleértve az osztályozást, a pozíciót, valamint a kép- és térképkoordinátákat.

  • Ez magában foglalja az észlelt objektumokról szóló összes információt.
  • Minden objektum tartalmaz egy értéket, amely az észlelt objektum osztályozását jelenti. (Osztályazonosító: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriball)
  • Minden objektum tartalmaz egy valószínűséget is, amely a VEX AI észlelésbe vetett bizalmát jelenti. Ez a model.py szűrője után történik, amely eltávolítja az alacsony valószínűségű észleléseket.
  • Ezenkívül a VEX AI Intel Camera méterben jelzi az objektum mélységét.
  • A képérzékelés és a térképészlelés minden objektumhoz csatolva vannak, hogy az objektum koordinátáit a képen és a valós világban is megjelenítsék.

Az ai_demo program lebontása:

Main.cpp

C++ kódrészlet, amely a VEX projekt szabványos részeit és inicializálási beállításait mutatja.

A szabvány a VEX projektekhez tartalmazza:

// jetson osztály példányának létrehozása a helyadatok és egyéb adatok fogadásához
// a Jetson nano-tól
//
ai::jetson jetson_comms;

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

C++ kódrészlet, amely a vezetői és dolgozói robot szerepkörök konfigurációját mutatja be egy define utasítás használatával, amely így szól: #define MANAGER_ROBOT 1.

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 a robotok közötti kommunikációhoz.

  • Verseny Eseménykezelők

    C++ kód, amely feltételes logikát mutat, amely vált az izolációs és az interakciós autonóm rutinok között.

    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, és az interakciós funkció, amikor az autonóm másodszor engedélyezve van. Egy dolog, amit meg kell jegyezni, hogy ha valamilyen okból vissza kell állítani az egyezést, akkor újra kell indítani a bemutató programot, hogy az első AutoFlag visszaállítható legyen.

  • Fő()

    C++ kódrészlet a fő ciklusból, amely a Jetson robotból történő adatlekérést, feldolgozást és a partnerrobottal való kommunikációt kezeli.

    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 AI_RECORD objektum deklarálva tárolja a Jetsontól kapott adatokat. Egy külön feladat is be van állítva a képernyő legfrissebb adatokkal való 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 periódusok elindításakor.

    A main while() ciklus a jetson_comms objektum legfrissebb adatainak a helyi AI_RECORD objektumunkba másolásával indul. Ezután átadja a robot helyinformációit a link objektumnak, hogy azt továbbíthassák 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 lekérdezésre, 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: