KI-Vision-Sensor#

Einführung#

Die Klasse aivision dient zur Steuerung und zum Zugriff auf Daten des EXP AI Vision Sensors. Der AI Vision Sensor kann Folgendes erkennen:

  • KI-Klassifizierungen (z. B. Spielobjekte)

  • AprilTag-IDs

  • Individuelle Farbsignaturen

  • Benutzerdefinierte Farbcodes

Es liefert Objektdaten wie Position, Größe, Ausrichtung, Klassifizierungs-ID und Konfidenzwert.

The sensor processes visual information using an onboard AI model selected in the AI Vision Utility within VEXcode. The selected model determines which AI Classifications the sensor can detect. When using VS Code, the AI model must first be configured in VEXcode before it can be used in your program. Detected objects are returned through the objects array after takeSnapshot is called.

Klassenkonstruktoren#

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

Parameter#

Parameter

Typ

Beschreibung

index

int32_t

Der Smart Port, an den der AI Vision Sensor angeschlossen ist, wird als PORTxgeschrieben, wobei x die Portnummer ist (zum Beispiel PORT1).

sigs

colordesc, codedesc, or AI constants

Ein oder mehrere Erkennungstypen, die beim Sensor registriert werden sollen:

  • aivision::ALL_AIOBJS — Alle KI-Klassifizierungen
  • aivision::ALL_TAGS — Alle AprilTag-IDs
  • aivision::colordesc — Benutzerdefinierte Farbsignatur
  • aivision::codedesc — Benutzerdefinierter Farbcode

KI-Modelle und Klassifizierungen#

Der KI-Vision-Sensor kann verschiedene Objekte anhand bestimmter KI-Klassifizierungen erkennen. Je nachdem, welches KI-Klassifizierungsmodell bei der Konfiguration des KI-Vision-Sensors im Gerätefenster ausgewählt wird, können unterschiedliche Objekte erkannt werden. Folgende Modelle stehen derzeit zur Verfügung:

Elemente für den Unterricht

Identifikationsnummer

KI-Klassifizierung

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 Robotik-Wettbewerb – Hohe Einsätze

Identifikationsnummer

KI-Klassifizierung

0

mobileGoal

1

redRing

2

blueRing

VEX V5 Robotik-Wettbewerb: Verschiebung

Identifikationsnummer

KI-Klassifizierung

0

blueBlock

1

redBlock

VEX V5 Robotics Competition Override

Identifikationsnummer

KI-Klassifizierung

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Beispiele#

// 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

Mitgliedsfunktionen#

Die Klasse aivision umfasst die folgenden Memberfunktionen:

  • takeSnapshot — Erfasst Daten für eine bestimmte Farbsignatur, einen Farbcode, eine KI-Klassifizierungsgruppe oder eine AprilTag-ID-Gruppe.

  • installed — Gibt zurück, ob der AI Vision Sensor mit dem EXP Brain verbunden ist.

Um auf erkannte Objektdaten zuzugreifen, nachdem takeSnapshot aufgerufen wurde, verwenden Sie die verfügbaren Properties.

Bevor Funktionen des Typs aivision aufgerufen werden können, muss eine Instanz des aivision erstellt werden, wie unten dargestellt:

/* 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#

Erfasst ein Bild vom KI-Vision-Sensor, verarbeitet es mithilfe des ausgewählten KI-Modells oder konfigurierter Farbsignaturen und aktualisiert das Array objects.

Jeder Aufruf aktualisiert das Array objects mit den neuesten Erkennungsergebnissen. Die Objekte sind ab Index 0ist 0 objectCount und objects[i].exists false

1 — Erstellt einen Snapshot anhand einer Objekt-ID und eines Objekttyps.

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

2 — Erstellt einen Schnappschuss mit einer Farbsignatur.

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

3 — Erstellt einen Schnappschuss mit einem Farbcode.

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

4 — Erstellt einen Snapshot mit einer AprilTag ID.

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

5 — Erstellt eine Momentaufnahme mithilfe einer KI-Klassifizierung.

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

6 — Erstellt eine Momentaufnahme mithilfe eines Objektdeskriptors.

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

Parameters

Parameter

Typ

Beschreibung

id

uint32_t

Die Kennung des zu erkennenden Objekts bei Verwendung der Funktion (id, type, count) Die Bedeutung hängt vom type:

  • colorObject — Farbbeschreibungsindex (1–7)
  • codeObject — Farbcodeindex (1–8)
  • modelObject — KI-Klassifizierungs-ID
  • tagObject — AprilTag-ID (0–36)

Hinweis: In VEXcode können KI-Klassifizierungsnamen (z. B. blueBall) direkt verwendet werden. In VS Code muss die numerische ID verwendet werden.

type

objectType

Gibt die Kategorie des Objekts an, das mit der ID id:

  • objectType::tagObject — Erkennt AprilTag-IDs
  • objectType::colorObject — Erkennt Farbsignaturen
  • objectType::codeObject — Erkennt Farbcodes
  • objectType::modelObject — Erkennt KI-Klassifizierungen
  • objectType::allObject — Erkennt alles, was der Sensor erkennen kann

desc

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

Descriptor used to detect a specific object. Passed directly to takeSnapshot, for example:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Predefined descriptor constants:
  • aivision::ALL_TAGS — Detects all AprilTag IDs
  • aivision::ALL_COLORS — Detects all configured Color Signatures
  • aivision::ALL_CODES — Detects all configured Color Codes
  • aivision::ALL_AIOBJS — Detects all AI Classifications
  • aivision::ALL_OBJECTS — Detects everything the sensor can recognize

count

uint32_t / int32_t

Maximale Anzahl der aus dem Snapshot gespeicherten Objekte. Standardwert: 8.

Rückgabewerte

Gibt einen int32_t zurück, der die Anzahl der erkannten Objekte darstellt, die der angegebenen Signatur oder dem angegebenen Erkennungstyp entsprechen.

Notizen

  • Der KI-Vision-Sensor muss eine Momentaufnahme erstellen, bevor auf Objektdaten zugegriffen werden kann.

  • Das Array mit objects wird bei jedem Aufruf aktualisiert.

  • Bei der Angabe count werden nur die größten erkannten Objekte (bis zur angegebenen Anzahl) gespeichert.

Die KI-Klassifizierungen hängen vom in VEXcode mit dem AI Vision Utility ausgewählten Modell ab.

Beispiele

// 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#

Gibt zurück, ob der KI-Vision-Sensor mit dem EXP-Gehirn verbunden ist.

Verfügbare Funktionen

bool installed();

Parameter

Diese Funktion benötigt keine Parameter.

Rückgabewerte

Gibt einen booleschen Wert zurück, der angibt, ob der KI-Vision-Sensor angeschlossen ist:

  • true — Der KI-Vision-Sensor ist angeschlossen.

  • false — Der KI-Vision-Sensor ist nicht angeschlossen.

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

Eigenschaften#

Der Aufruf von takeSnapshot aktualisiert die Erkennungsergebnisse des KI-Vision-Sensors. Jeder Snapshot aktualisiert das Array objects , das die erkannten Objekte für die angeforderte KI-Klassifizierung, Farbsignatur, den Farbcode oder die AprilTag-ID enthält.

Der Zugriff auf AI Vision-Daten erfolgt über Eigenschaften von Objekten, die in AIVisionSensor.objects[index]gespeichert sind, wobei index bei 0 beginnt.

Die Objekte sind nach Größe (Fläche) geordnet, von der größten zur kleinsten.

Die Bildauflösung des AI Vision Sensors beträgt 320 × 240 Pixel. Objektposition und -größe werden in Pixeleinheiten relativ zur aktuellen Ansicht des Sensors angegeben.

Folgende Objekte stehen zur Verfügung:

  • objectCount — Gibt die Anzahl der erkannten Objekte aus dem letzten Snapshot zurück.

  • largestObject — Wählt das größte erkannte Objekt aus dem aktuellsten Snapshot aus.

  • objects — Array mit erkannten Objekten, aktualisiert durch takeSnapshot.

  • .exists — Gibt an, ob der Objekteintrag gültige Daten enthält.

  • .width — Breite des erkannten Objekts in Pixeln.

  • .height — Höhe des erkannten Objekts in Pixeln.

  • .centerX — X-Position des Objektmittelpunkts in Pixeln.

  • .centerY — Y-Position des Objektmittelpunkts in Pixeln.

  • .originX — X-Position der oberen linken Ecke des Objekts in Pixeln.

  • .originY — Y-Position der oberen linken Ecke des Objekts in Pixeln.

  • .angle — Orientierung eines Farbcodes oder einer AprilTag-ID in Grad.

  • .id — Klassifizierungs-ID oder AprilTag-ID.

  • .score — Konfidenzwert für KI-Klassifizierungen.

objectCount#

objectCount gibt die Anzahl der Elemente im Array objects als ganze Zahl zurück.

Syntax
AIVisionSensor.objectCount

Components

Komponente

Beschreibung

AIVisionSensor

Der Name Ihrer AI Vision Sensor-Instanz.

Beispiele

// 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 ruft das größte erkannte Objekt aus dem objects Array ab.

Mit dieser Methode kann man immer das größte Objekt aus objects erhalten, ohne einen Index anzugeben.

Syntax
AIVisionSensor.largestObject

Components

Komponente

Beschreibung

AIVisionSensor

Der Name Ihrer AI Vision Sensor-Instanz.

Beispiele

// 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 returns an array of detected object properties. Use the array to access specific property values of individual objects.

Es gibt zehn Eigenschaften, die zu jedem Objekt gehören, das im Array objects gespeichert ist, nachdem takeSnapshot verwendet wurde.

Alle Eigenschaftswerte außer id und score beschreiben Position und Größe des erkannten Objekts im Sichtfeld des KI-Vision-Sensors zum Zeitpunkt der Verwendung takeSnapshot Diese Werte werden in Pixeln gemessen, basierend auf der Auflösung des Sensors von 320 x 240 Pixeln.

Syntax
AIVisionSensor.objects[index].property

Components

Komponente

Beschreibung

AIVisionSensor

Der Name Ihrer AI Vision Sensor-Instanz.

index

Der Objektindex im Array. Die Indexzählung beginnt bei 0.

property

Eine der verfügbaren Objekteigenschaften.

.exists#

.exists gibt zurück, ob der angegebene Objektindex ein gültig erkanntes Objekt enthält.

Zugriff

SensorName.objects[index].exists

Rückgabewerte

Gibt einen booleschen Wert zurück, der angibt, ob der angegebene Objektindex ein gültiges erkanntes Objekt enthält:

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

Beispiele

// 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);
}

.Breite#

.width gibt die Breite des erkannten Objekts zurück.

Zugriff

SensorName.objects[index].width

Rückgabewerte

Gibt einen int16_t zurück, der die Breite des erkannten Objekts in Pixeln darstellt. Der Wertbereich liegt zwischen 1 und 320.

Beispiele

// 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);
}

.Höhe#

.height gibt die Höhe des erkannten Objekts zurück.

Zugriff

SensorName.objects[index].height

Rückgabewerte

Gibt einen int16_t zurück, der die Höhe des erkannten Objekts in Pixeln darstellt. Der Wertbereich liegt zwischen 1 und 240.

Beispiele

// 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 gibt die x-Koordinate des Mittelpunkts des erkannten Objekts zurück.

Zugriff

SensorName.objects[index].centerX

Rückgabewerte

Gibt einen int16_t zurück, der die x-Koordinate des Objektmittelpunkts in Pixeln darstellt. Der Wertbereich liegt zwischen 0 und 320.

Beispiele

// 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 gibt die y-Koordinate des Mittelpunkts des erkannten Objekts zurück.

Zugriff

SensorName.objects[index].centerY

Rückgabewerte

Gibt einen int16_t zurück, der die y-Koordinate des Objektmittelpunkts in Pixeln darstellt. Der Wertbereich liegt zwischen 0 und 240.

Beispiele

// 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);
}

.Winkel#

.angle gibt die Ausrichtung des erkannten Farbcodes oder der AprilTag-ID zurück.

Zugriff

SensorName.objects[index].angle

Rückgabewerte

Gibt einen Wert vom Typ float zurück, der die Drehung des erkannten Farbcodes oder der AprilTag-ID in Grad darstellt. Der Wertbereich liegt zwischen 0 und 359.9.

Beispiele

// 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 gibt die x-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts zurück.

Zugriff

SensorName.objects[index].originX

Rückgabewerte

Gibt einen int16_t zurück, der die x-Koordinate des Ursprungs des Begrenzungsrahmens des Objekts in Pixeln darstellt. Der Wertbereich liegt zwischen 0 und 320.

Beispiele

// 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 gibt die y-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts zurück.

Zugriff

SensorName.objects[index].originY

Rückgabewerte

Gibt einen int16_t zurück, der die y-Koordinate des Ursprungs des Begrenzungsrahmens des Objekts in Pixeln darstellt. Der Wertbereich liegt zwischen 0 und 240.

Beispiele

// 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);
}

.Ausweis#

.id gibt die erkannte AprilTag-ID oder KI-Klassifizierungs-ID zurück.

Zugriff

SensorName.objects[index].id

Rückgabewerte

Gibt einen int32_t zurück, der die ID des erkannten Objekts darstellt:

Beispiele

// 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);
}

.Punktzahl#

.score gibt den Konfidenzwert der erkannten KI-Klassifizierung zurück.

Zugriff

SensorName.objects[index].score

Rückgabewerte

Gibt einen int16_t zurück, der den Konfidenzwert der erkannten KI-Klassifizierung zwischen 1 und 100 angibt.

Ein niedrigerer Wert bedeutet, dass der Sensor weniger sicher ist, welches Objekt erkannt wurde, während ein höherer Wert bedeutet, dass der Sensor sicherer ist.

Beispiele

// 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);
}