AI látásérzékelő#

Bevezetés#

A aivision osztály az EXP AI Vision Sensor adatainak vezérlésére és elérésére szolgál. Az AI Vision Sensor a következőket képes érzékelni:

  • MI-besorolások (például játékelemek)

  • AprilTag azonosítók

  • Egyedi színaláírások

  • Egyéni színkódok

Objektumadatokat biztosít, beleértve a pozíciót, a méretet, a tájolást, az osztályozási azonosítót és a megbízhatósági pontszámot.

Az érzékelő a vizuális információkat egy beépített MI-modell segítségével dolgozza fel, amelyet a VEXcode AI Vision Utility segédprogramjában választottak ki. A kiválasztott modell határozza meg, hogy az érzékelő mely MI-osztályozásokat képes érzékelni. VS Code használatakor az MI-modellt először konfigurálni kell a VEXcode-ban, mielőtt az a programban használható lenne. Az észlelt objektumokat a objects tömb adja vissza a takeSnapshot meghívása után.

Osztálykonstruktorok#

aivision(
  int32_t index,
  Args&... sigs );

Paraméterek#

Paraméter

Típus

Leírás

index

int32_t

Az a Smart Port, amelyhez az AI Vision Sensor csatlakozik, PORTxformátumban írva, ahol x a port száma (például PORT1).

sigs

colordesc, codedesc, or AI constants

Egy vagy több érzékelési típus regisztrálása az érzékelővel:

  • aivision::ALL_AIOBJS — Minden AI osztályozás
  • aivision::ALL_TAGS — Minden AprilTag azonosító
  • aivision::colordesc — Egyéni színaláírás
  • aivision::codedesc — Egyéni színkód

MI modellek és osztályozások#

Az AI Vision Sensor különböző objektumokat képes érzékelni bizonyos AI-osztályozások szerint. Az Eszközök ablakban az AI Vision Sensor konfigurálásakor kiválasztott AI-osztályozási modelltől függően különböző objektumok érzékelhetők. A jelenleg elérhető modellek a következők:

Tantermi elemek

Azonosító szám

AI osztályozás

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 Robotikaverseny Nagy Téttel

Azonosító szám

AI osztályozás

0

mobileGoal

1

redRing

2

blueRing

VEX V5 Robotikaverseny visszaszorítása

Azonosító szám

AI osztályozás

0

blueBlock

1

redBlock

VEX V5 Robotika Verseny Felülírás

Azonosító szám

AI osztályozás

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Példák#

// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT11,                  // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

Tagfüggvények#

Az aivision osztály a következő tagfüggvényeket tartalmazza:

  • takeSnapshot — Adatokat rögzít egy adott színaláíráshoz, színkódhoz, mesterséges intelligencia osztályozási csoporthoz vagy AprilTag azonosító csoporthoz.

  • installed — Visszaadja, hogy az AI Vision Sensor csatlakozik-e az EXP Brainhez.

A takeSnapshot meghívása után az észlelt objektumadatok eléréséhez használd a rendelkezésre álló Properties tulajdonságot.

Bármely aivision tagfüggvény meghívása előtt létre kell hozni egy aivision példányt, az alábbiak szerint:

/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT1,                   // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

takeSnapshot#

Képet rögzít az AI Vision Sensorról, feldolgozza azt a kiválasztott AI modell vagy a konfigurált színaláírások segítségével, és frissíti a objects tömböt.

Minden hívás frissíti a objects tömböt a legfrissebb észlelési eredményekkel. Az objektumok a legnagyobbtól a legkisebbig vannak rendezve (szélesség szerint), 0indextől kezdve. Ha nem észlelhetők objektumok, akkor a objectCount értéke 0 lesz, az objects[i].exists pedig false lesz.

1 — Pillanatképet készít egy objektumazonosító és objektumtípus alapján.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — Pillanatképet készít Színaláírás használatával.

int32_t takeSnapshot(
  const colordesc &desc,
  int32_t count = 8 );

3 — Pillanatképet készít Színkód használatával.

int32_t takeSnapshot(
  const codedesc &desc,
  int32_t count = 8 );

4 — Pillanatképet készít egy AprilTag ID használatával.

int32_t takeSnapshot(
  const tagdesc &desc,
  int32_t count = 8 );

5 — Pillanatképet készít egy AI osztályozás használatával.

int32_t takeSnapshot(
  const aiobjdesc &desc,
  int32_t count = 8 );

6 — Pillanatképet készít egy objektumleíró használatával.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

Paraméter

Típus

Leírás

id

uint32_t

Az objektum azonosítója, amelyet a (id, type, count) függvény használatakor kell detektálni. A jelentés type:

  • colorObject — Színleíró indexe (1–7)
  • codeObject — Színkód indexe (1–8)
  • modelObject — AI osztályozási azonosító
  • tagObject — AprilTag azonosító (0–36)

Megjegyzés: A VEXcode-ban az AI osztályozási nevek (például blueBall) közvetlenül is használhatók. A VS Code-ban a numerikus azonosítót kell használni.

type

objectType

Megadja a id:

  • objectType::tagObject — AprilTag ID-k észlelése
  • objectType::colorObject — Színaláírások észlelése
  • objectType::codeObject — Színkódok észlelése
  • objectType::modelObject — AI Classifications észlelése
  • objectType::allObject — Mindent észlel, amit az érzékelő felismer

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Egy adott objektum detektálására használt leíró. Közvetlenül átadva takeSnapshotmetódusnak, például:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Előre definiált leíró konstansok:
  • aivision::ALL_TAGS — Az összes AprilTag azonosítót érzékeli
  • aivision::ALL_COLORS — Az összes konfigurált Color Signatures érzékeli
  • aivision::ALL_CODES — Az összes konfigurált Color Codes érzékeli
  • aivision::ALL_AIOBJS — Az összes AI Classifications érzékeli
  • aivision::ALL_OBJECTS — Mindent érzékel, amit az érzékelő felismer

count

uint32_t / int32_t

A pillanatképből tárolt objektumok maximális száma. Alapértelmezés szerint 8.

Visszatérési értékek

Egy int32_t értéket ad vissza, amely a megadott aláírásnak vagy észlelési típusnak megfelelő észlelt objektumok számát jelöli.

Megjegyzések

  • A mesterséges intelligenciával működő vizuális érzékelőnek pillanatképet kell készítenie, mielőtt hozzáférhetne az objektumadatokhoz.

  • A objects tömb minden híváskor frissül.

  • Ha count értéket adjuk meg, akkor csak a legnagyobb észlelt objektumok (a megadott mennyiségig) kerülnek tárolásra.

Az AI-besorolások a VEXcode AI Vision Utility programjában kiválasztott modelltől függenek.

Példa

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

installed#

Visszaadja, hogy az AI Vision Sensor csatlakozik-e az EXP Brainhez.

Elérhető funkciók

bool installed();

Paraméterek

Ez a függvény nem fogad el paramétereket.

Visszatérési értékek

Egy logikai értéket ad vissza, amely jelzi, hogy a mesterséges intelligencia által vezérelt látásérzékelő csatlakoztatva van-e:

  • true — Az AI Vision érzékelő csatlakoztatva van.

  • false — Az AI Vision érzékelő nincs csatlakoztatva.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

Tulajdonságok#

A takeSnapshot meghívása frissíti az AI Vision Sensor észlelési eredményeit. Minden pillanatfelvétel frissíti a objects tömböt, amely a kért AI osztályozás, színaláírás, színkód vagy AprilTag azonosító alapján észlelt objektumokat tartalmazza.

Az AI Vision adataihoz AIVisionSensor.objects[index]mappában tárolt objektumok tulajdonságain keresztül lehet hozzáférni, ahol index index 0 -tel kezdődik.

Az objektumok a legnagyobbtól a legkisebbig vannak rendezve (terület szerint).

Az AI Vision Sensor képfelbontása 320 × 240 pixelAz objektum pozícióját és méretét a rendszer pixelegységben jelenti az érzékelő aktuális nézetéhez viszonyítva.

A következő ingatlanok érhetők el:

  • objectCount — Visszaadja a legutóbbi pillanatképből észlelt objektumok számát.

  • largestObject — Kiválasztja a legutóbbi pillanatképből a legnagyobb észlelt objektumot.

  • objects — A takeSnapshot által frissített, észlelt objektumokat tartalmazó tömb.

  • .exists — Azt jelzi, hogy az objektumbejegyzés érvényes adatokat tartalmaz-e.

  • .width — A detektált objektum szélessége pixelben.

  • .height — A detektált objektum magassága pixelben.

  • .centerX — Az objektum középpontjának X pozíciója pixelben.

  • .centerY — Az objektum középpontjának Y pozíciója pixelben.

  • .originX — Az objektum bal felső sarkának X pozíciója pixelben.

  • .originY — Az objektum bal felső sarkának Y pozíciója pixelben.

  • .angle — Egy színkód vagy AprilTag azonosító orientációja fokban.

  • .id — Osztályozási azonosító vagy AprilTag azonosító.

  • .score — MI-osztályozások megbízhatósági pontszáma.

objectCount#

objectCount visszaadja az objects tömbben lévő elemek számát egész számként.

Syntax
AIVisionSensor.objectCount

Components

Összetevő

Leírás

AIVisionSensor

Az AI Vision Sensor példány neve.

Példa

// Display the number of detected objects
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.objectCount);
  }
  wait(50, msec);
}

largestObject#

largestObject kikeresi a legnagyobb észlelt objektumot a objects tömbből.

Ez a metódus arra használható, hogy mindig a legnagyobb objektumot kapjuk meg objects közül index megadása nélkül.

Syntax
AIVisionSensor.largestObject

Components

Összetevő

Leírás

AIVisionSensor

Az AI Vision Sensor példány neve.

Példa

// Display the closest AprilTag ID
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.largestObject.id);
  }
  wait(50, msec);
}

objects#

objects Az észlelt objektumok tulajdonságainak tömbjét adja vissza. A tömb segítségével az egyes objektumok adott property értékeihez férhet hozzá.

A objects tömbben tárolt objektumokhoz tíz tulajdonság tartozik takeSnapshot használata után.

All property values except id and score describe the detected object’s position and size in the AI Vision Sensor’s view at the moment takeSnapshot was used. These values are measured in pixels, based on the sensor’s 320 by 240 pixel resolution.

Syntax
AIVisionSensor.objects[index].property

Components

Összetevő

Leírás

AIVisionSensor

Az AI Vision Sensor példány neve.

index

Az objektum indexe a tömbben. Az index 0 -gyel kezdődik.

property

Az elérhető objektumtulajdonságok egyike.

.létezik#

.exists függvény visszaadja, hogy a megadott objektumindex tartalmaz-e érvényes észlelt objektumot.

Hozzáférés

SensorName.objects[index].exists

Visszatérési értékek

Egy logikai értéket ad vissza, amely jelzi, hogy a megadott objektumindex tartalmaz-e érvényes észlelt objektumot:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

Példa

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

.szélesség#

.width visszaadja az észlelt objektum szélességét.

Hozzáférés

SensorName.objects[index].width

Visszatérési értékek

Egy int16_t értéket ad vissza, amely a detektált objektum szélességét jelöli pixelben. Az érték 1 és 320 között lehet.

Példa

// Approach an object until it's at least 100 pixels wide
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].width < 100) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.magasság#

.height visszaadja az észlelt objektum magasságát.

Hozzáférés

SensorName.objects[index].height

Visszatérési értékek

Egy int16_t értéket ad vissza, amely a detektált objektum magasságát jelöli pixelben. Az érték 1 és 240 között lehet.

Példa

// Approach an object until it's at least 90 pixels tall
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].height < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.centerX#

.centerX visszaadja a detektált objektum középpontjának x koordinátáját.

Hozzáférés

SensorName.objects[index].centerX

Visszatérési értékek

Egy int16_t értéket ad vissza, amely az objektum középpontjának x koordinátáját jelöli pixelben. Az érték 0 és 320 között lehet.

Példa

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(10, msec);
}

.centerY#

.centerY visszaadja a detektált objektum középpontjának y koordinátáját.

Hozzáférés

SensorName.objects[index].centerY

Visszatérési értékek

Egy int16_t értéket ad vissza, amely az objektum középpontjának y koordinátáját jelöli pixelben. Az érték 0 és 240 között lehet.

Példa

// Approach an object until it's close to the sensor
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerY < 150) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.szög#

.angle visszaadja a detektált színkód vagy AprilTag azonosító orientációját.

Hozzáférés

SensorName.objects[index].angle

Visszatérési értékek

Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.

Példa

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  AIVision1.takeSnapshot(AIVision1__redBlue);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
      Drivetrain.turn(right);
    }
    else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[0].angle < 330) {
      Drivetrain.turn(left);
    }
    else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.originX#

.originX visszaadja az észlelt objektum határolókeretének bal felső sarkának x koordinátáját.

Hozzáférés

SensorName.objects[index].originX

Visszatérési értékek

Egy int16_t értéket ad vissza, amely az objektum határolókeret origójának x koordinátáját jelöli pixelben. Az érték 0 és 320 között lehet.

Példa

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originX < 120) {
      Brain.Screen.print("To the left!");
    } else {
      Brain.Screen.print("To the right!");
    }
  } else {
    Brain.Screen.print("No objects");
  }
  wait(100, msec);
}

.originY#

.originY visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját.

Hozzáférés

SensorName.objects[index].originY

Visszatérési értékek

Egy int16_t értéket ad vissza, amely az objektum határolókeret origójának y koordinátáját jelöli pixelben. Az érték 0 és 240 között lehet.

Példa

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originY < 110) {
      Brain.Screen.print("Close");
    } else {
      Brain.Screen.print("Far");
    }
  }
  wait(100, msec);
}

.id#

.id visszaadja az észlelt AprilTag azonosítót vagy AI osztályozási azonosítót.

Hozzáférés

SensorName.objects[index].id

Visszatérési értékek

Egy int32_t értéket ad vissza, amely a detektált objektum azonosítóját jelöli:

Példa

// Move forward when AprilTag ID 1 is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].id == 1) {
      Drivetrain.drive(forward);
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.pontszám#

.score Az észlelt AI-osztályozás megbízhatósági pontszámát adja vissza.

Hozzáférés

SensorName.objects[index].score

Visszatérési értékek

int16_t értéket ad vissza, amely az észlelt AI-osztályozás 1 és 100 közötti megbízhatósági pontszámát jelzi.

Az alacsonyabb pontszám azt jelenti, hogy az érzékelő kevésbé bízik az észlelt tárggyal kapcsolatban, míg a magasabb pontszám azt jelenti, hogy az érzékelő nagyobb valószínűséggel észleli a hibát.

Példa

// Display if a score is confident
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    Brain.screen.clearScreen();
    Brain.screen.setCursor(1, 1);

    if (AIVision1.objects[0].score > 95) {
      Brain.Screen.print("Confident");
    } else {
      Brain.Screen.print("Not confident");
    }
  }
  wait(50, msec);
}