Kódolás az AI Vision Sensorral a VEXcode V5 C++-ban

Győződjön meg arról, hogy színaláírás és színkód van konfigurálva az AI Vision Sensorral, hogy azokat a blokkjaival együtt tudja használni. Ha többet szeretne megtudni ezek konfigurálásáról, olvassa el az alábbi cikkeket:

Az AI Vision Sensor az AI osztályozásokat és az AprilTag-eket is képes észlelni. Ha meg szeretné tudni, hogyan engedélyezheti ezeket az észlelési módokat, látogasson el ide:

Ha többet szeretne megtudni ezekről az egyedi parancsokról és a VEXcode-ban való használatukról, látogasson el az API webhelyére.


Szerezzen vizuális adatokat az AI Vision Sensor segítségével

Minden AI Vision Sensor parancs a konfigurált AI Vision Sensor nevével kezdődik. A cikkben szereplő összes példa esetében a használt AI Vision Sensor neve AIVisionlesz.

Pillanatfelvétel készítése

A takeSnapshot módszer leképezi azt, amit az AI Vision Sensor jelenleg lát, és adatokat gyűjt a pillanatfelvételből, amelyeket aztán felhasználhat egy projektben. Pillanatfelvétel készítésekor meg kell adnia, hogy az AI Vision Sensor milyen típusú objektumról gyűjtsön adatokat:

  • ASzínaláírás vagySzínkód
    • Ezek a vizuális aláírások az AI Vision Sensor nevével kezdődnek, dupla aláhúzással, majd a vizuális aláírás nevével, például: AIVision1__Blue.
  • ::ALL_AIOBJS
  • április Címkék- aivision::ALL_TAGS

A pillanatfelvétel készítése létrehoz egy tömböt az összes megadott észlelt objektumból. Például, ha egy "kék" színaláírástakart észlelni, és az AI Vision Sensor 3 különböző kék objektumot észlelt, akkor mindhárom adatai a tömbbe kerülnek.

Ebben a példában pillanatfelvétel készül a AIVision1AI Vision Sensor„kék” színaláírásáról. Megjeleníti a tömbben észlelt objektumok számát, és 0,5 másodpercenként új pillanatképet készít.

while (true) {
// Pillanatkép készítése az összes kék színű objektumról.
AIVision.takeSnapshot(AIVision1__Kék);

// Az adatok lehívása előtt ellenőrizze, hogy észlelt-e egy objektumot a pillanatfelvételen.
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
vár(5, msec);
}

tárgyakat

A pillanatképek minden objektumának különböző tulajdonságai vannak, amelyek felhasználhatók az adott objektumra vonatkozó információk jelentésére. Az objektum metódus lehetővé teszi ezekhez a tulajdonságokhoz való hozzáférést.

Az elérhető tulajdonságok a következők:

  • id
  • centerX és centerY
  • eredetX és eredetY
  • szélesség
  • magasság
  • szög
  • létezik
  • pontszám

Az objektum tulajdonságainak eléréséhez használja az AI Vision Sensor nevét, majd az objektum metódust, majd az objektum indexét.

Az objektum index azt jelzi, hogy melyik objektum tulajdonságát szeretné lekérni. Pillanatfelvétel készítése után az AI Vision Sensor automatikusan méret szerint rendezi az objektumokat. A legnagyobb objektumhoz 0 index tartozik, a kisebb objektumok pedig magasabb indexszámot kapnak.

Például a legnagyobb objektum szélességének meghívása AIVision1.objects[0].widthlenne.

id

A id tulajdonság csak április án érhető el. Tags és AI Classifications.

Három négyzet alakú azonosító jelölő 0, 9 és 3 azonosítóval, mindegyik megfelelő koordinátákkal és méretekkel, fehér szöveggel. A 0. azonosító a bal oldalon, a 9. azonosító a jobb oldalon, a 3. azonosító pedig alul, középen található. Minden marker egyedi fekete-fehér mintával rendelkezik egy négyzeten belül.

EgyAprilTagesetén a id tulajdonság az észleltAprilTag(s) azonosítószámot jelenti.

Konkrét azonosítása AprilTags szelektív navigációt tesz lehetővé. Beprogramozhatja robotját úgy, hogy bizonyos címkék felé haladjon, miközben figyelmen kívül hagyja a többieket, és hatékonyan használja őket útjelző táblákként az automatizált navigációhoz.

Két golyó és két gyűrű azonosítható a képen, címkékkel, amelyek a helyzetüket, méretüket és pontszámukat jelzik. A piros golyó a bal oldalon, a kék labda a jobb oldalon, a zöld gyűrű a bal alsó sarokban, a piros gyűrű pedig a jobb alsó sarokban található. Minden objektumot fehér négyzet körvonalazik, és az olyan részletek, mint az X, Y koordináták, szélesség, magasság és 99%-os pontszám fehér szöveggel jelennek meg.

AI-osztályozásesetén a id tulajdonság az észlelt mesterséges intelligencia-besorolás adott típusát jelöli.

Konkrét AI besorolások azonosításalehetővé teszi a robot számára, hogy csak meghatározott objektumokra összpontosítson, például csak egy piros Buckyball felé akar navigálni, egy kékre nem.

Tekintse meg ezeket a cikkeket, ha további információra van szüksége AprilTags and AI Classifications -ról, valamint arról, hogyan engedélyezheti észlelésüket az AI Vision Utility programban.

centerX és centerY

Ez az észlelt objektum középponti koordinátái pixelben.

Egy kék Buckyballt egy számítógépes látórendszer követ. Az objektumot egy fehér négyzet körvonalazza, a körvonalon belül pedig egy kisebb piros négyzet, amely egy középen fehér keresztet vesz körül. A kép bal felső sarkában egy címke jelzi, hogy az objektum kék színű, X:176, Y:117 koordinátákkal és W:80, H:78 méretekkel.

A CenterX és CenterY koordináták segítik a navigációt és a helymeghatározást. Az AI Vision Sensor felbontása 320 x 240 pixel.

Két kék köbös tárgy, amelyeket egy látórendszer követ. A felső objektum X:215, Y:70 koordinátákkal és W:73, H:84 méretekkel van ellátva, fehér körvonallal és középen fehér kereszttel. Az alsó objektum X:188, Y:184 koordinátákkal és W:144, H:113 méretekkel van megjelölve, szintén fehéren körvonalazva, középen fehér kereszttel.

Láthatja, hogy az AI Vision Sensorhoz közelebb eső objektum középponti Y koordinátája alacsonyabb, mint egy távolabbi objektum.

Ebben a példában, mivel az AI Vision Sensor nézetének közepe (160, 120), a robot jobbra fordul mindaddig, amíg az észlelt objektum centerX koordinátája nem haladja meg a 150 képpontot, de nem éri el a 170 képpontot.

while (true) {
  // Pillanatkép készítése az összes kék színű objektumról.
  AIVision.takeSnapshot(AIVision__Kék);

  // Az adatok lehívása előtt győződjön meg arról, hogy objektumot észlelt a pillanatképben.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Hajtáslánc.turn(jobbra);
    } else {
      Drivetrain.stop();
    }
  }
  vár(5, msec);
}

eredetX és eredetY

Az OriginX és az OriginY az észlelt objektum bal felső sarkában lévő koordináta pixelben.

Egy kék Buckyballt egy látórendszer követ. Az objektumot fehér körvonal veszi körül, a körvonalon belül pedig egy középen fehér kereszt található. A bal felső címke az objektum színét kékként jelzi, X:176, Y:117 koordinátákkal és W:80, H:78 méretekkel. Egy kis piros négyzet kiemeli az objektum bal felső sarkát.

Az OriginX és OriginY koordináták segítik a navigációt és a helymeghatározást. Ha ezt a koordinátát kombinálja az objektum szélességével és magasságával, meghatározhatja az objektum határolókeretének méretét. Ez segíthet a mozgó objektumok nyomon követésében vagy az objektumok közötti navigálásban.

szélesség és magasság

Ez az észlelt objektum szélessége vagy magassága pixelben.

A képen egy kék Buckyball látható, amelyet fehér négyzet körvonal követ. A bal felső sarokban egy kék objektumról van szó, X:176, Y:117 koordinátákkal és W:80, H:78 méretekkel. A piros nyilak kiemelik az objektum szélességét és magasságát.

A szélesség- és magasságmérés segít a különböző tárgyak azonosításában. Például egy Buckyball magasabb lesz, mint egy gyűrű.

Két kék köbös tárgyat egy vizuális felismerő rendszer követ. A felső kocka fehér körvonalú, címkével, amely a helyzetét X:215, Y:70 és méretei W:73, H:84 jelzi. Az alsó kocka hasonló fehér körvonalú, a címkén X:188, Y:184 és méretei: W:144, H:113. Minden kockán van egy középen fehér kereszt, amely valószínűleg a nyomkövetés fókuszpontját jelzi. A címkék kiemelik az egyes objektumok mérési és nyomkövetési adatait.

A szélesség és a magasság az objektum távolságát is jelzi az AI Vision Sensortól. A kisebb méretek általában azt jelentik, hogy az objektum távolabb van, míg a nagyobb méretek azt jelzik, hogy közelebb van.

Ebben a példában az objektum szélességét használjuk a navigációhoz. A robot addig közelíti az objektumot, amíg a szélessége el nem ér egy meghatározott méretet, mielőtt megállna.

while (true) {
  // Pillanatkép készítése az összes kék objektumról.
  AIVision.takeSnapshot(AIVision1__Kék);

  // Az adatok lehívása előtt győződjön meg arról, hogy objektumot észlelt a pillanatképben.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].width < 250.0) {
      Hajtáslánc.hajtás(előre);
    } else {
      Drivetrain.stop();
    }
  }
  várakozás(5, msec);
}

szög

Egy forgó gif, amely piros és zöld blokkokat mutat. Ha a blokkok tökéletesen vízszintesen vannak elhelyezve a pirostól a zöldig, akkor 0 fokosak. Ha a piros blokk függőlegesen a zöld blokk tetején van, akkor 90 fokban van. Ha a blokkok vízszintesen zöld-pirosak, az 180 fok. Ha a zöld blokk függőlegesen a piros blokk tetején van, akkor 20 fok.

A szög tulajdonság csakszínkód ésAprilTagsesetén érhető el.

Ez azt jelzi, hogy az észlelt Color Codevagy AprilTag eltérő tájolású.

Két kockából álló halom, egy zöld a tetején és egy kék az alján, amelyet egy látórendszer követ. Mindkét kockát fehér körvonal veszi körül, a zöld kockán egy fehér kereszt található. A kép alján található címkén Green_Blue A:87° látható, jelezve az észlelt színeket és a szög mérését. Ez alatt a koordináták X:117, Y:186 formátumban vannak elrendezve, W:137, H:172 méretekkel, amelyek a keretben lévő halmozott kockák helyzetét és méretét jelzik.

Megnézheti, hogy a robot aColor Code vagyAprilTag hoz képest eltérően áll-e, és ennek megfelelően hozhatja meg a navigációs döntéseket.

Két kocka, egy zöld és egy kék, egymás mellé helyezve, és egy látórendszer követi. Mindkét kockát fehér körvonal veszi körül, középen fehér kereszttel. A bal felső címke a Green_Blue A:0°-ot jelzi, ami az észlelt színekre és egy szögmérésre utal. Alatta a koordináták X:150, Y:102, W:179, H:109 méretekkel, a kockák helyzetét és méretét jelzik a kereten belül.

Például, ha a színkódot nem érzékeli megfelelő szögben, akkor előfordulhat, hogy az általa képviselt tárgyat a robot nem tudja megfelelően felvenni.

pontszám

A pontszám tulajdonság akkor használatos, ha az AI Vision SensorralAI-besorolást észlel.

A képen négy tárgy látható, amelyeket egy látórendszer követ: két golyó és két gyűrű. A piros golyó X:122, Y:84, W:67, H:66 koordinátákkal és 99%-os pontszámmal van ellátva. A kék golyó X:228, Y:86, W:70, H:68, 99%-os pontszámmal. A zöld gyűrű X:109, Y:186, W:98, H:92 koordinátákkal és 99%-os pontszámmal rendelkezik. A piros gyűrű címkéje X:259, Y:187, W:89, H:91, 99%-os pontszámmal. Minden objektum fehér körvonalú, ami a követési pontosságot jelzi.

A megbízhatósági pontszám azt jelzi, hogy az AI Vision Sensor mennyire biztos az észlelésében. Ezen a képen 99%-ban biztos abban, hogy azonosítja e négy objektum mesterséges intelligencia osztályozását. Ezzel a pontszámmal biztosíthatja, hogy robotja csak a nagyon magabiztos észlelésekre összpontosítson.

létezik

A létezik tulajdonság annak észlelésére szolgál, hogy a rendszer észlelt-e egy meghatározott Visual Signature at az utolsó pillanatfelvételen.

Ezzel ellenőrizheti, hogy az előző pillanatfelvételen észlelt-e észlelt objektumokat. Ez a tulajdonság True értéket ad vissza, ha egy objektum létezik, és False értéket, ha az objektum nem létezik.


objectCount

Az objectCount metódus az utolsó pillanatképben észlelt objektumok mennyiségét adja vissza.

Az AI Vision Utility interfész két kék kockával a bal oldalon található, mindegyik X és Y koordinátákkal és méretekkel jelölve. A rendszer csatlakoztatva van, és az AprilTags be van kapcsolva, míg az AI osztályozás ki van kapcsolva. A jobb oldalon a kék színbeállítások állítható árnyalat- és telítettségi tartományokkal jelennek meg, 22-re, illetve 0,34-re. Lehetőség van szín hozzáadására vagy beállítására, valamint a videó lefagyasztására. A firmware naprakész, az 1.0.0.b16-os verziót futtatja, alul pedig egy bezárás gomb található.

Ebben a példában két objektumot észleltünk aColor Signature "Kék" értékkel. Mindkettő a tömbbe kerül a takeSnapshot metódus használatakor.

Ez a kódrészlet folyamatosan frissíti az EXP Brain-t az észlelt objektumok számával. A megadott példa alapján ismételten elküldi a 2-es értéket, jelezve, hogy két objektumot észlelt.

while (true) {
// Pillanatkép készítése az összes kék objektumról.
AIVision.takeSnapshot(AIVision__Kék);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Az adatok lehívása előtt győződjön meg arról, hogy észlelt-e egy objektumot a pillanatfelvételen.
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
vár(5, msec);
}

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

Last Updated: