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 |
|---|---|---|
|
|
Der Smart Port, an den der AI Vision Sensor angeschlossen ist, wird als |
|
|
Ein oder mehrere Erkennungstypen, die beim Sensor registriert werden sollen:
|
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 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 Robotik-Wettbewerb – Hohe Einsätze
Identifikationsnummer |
KI-Klassifizierung |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 Robotik-Wettbewerb: Verschiebung
Identifikationsnummer |
KI-Klassifizierung |
|---|---|
0 |
|
1 |
|
VEX V5 Robotics Competition Override
Identifikationsnummer |
KI-Klassifizierung |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
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 );
Parameters6 — Erstellt eine Momentaufnahme mithilfe eines Objektdeskriptors.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Kennung des zu erkennenden Objekts bei Verwendung der Funktion
Hinweis: In VEXcode können KI-Klassifizierungsnamen (z. B. blueBall) direkt verwendet werden. In VS Code muss die numerische ID verwendet werden. |
|
|
Gibt die Kategorie des Objekts an, das mit der ID
|
|
|
Descriptor used to detect a specific object. Passed directly to
|
|
|
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
objectswird bei jedem Aufruf aktualisiert.Bei der Angabe
countwerden 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 durchtakeSnapshot..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.
AIVisionSensor.objectCount
Komponente |
Beschreibung |
|---|---|
|
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.
AIVisionSensor.largestObject
Komponente |
Beschreibung |
|---|---|
|
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.
AIVisionSensor.objects[index].property
Komponente |
Beschreibung |
|---|---|
|
Der Name Ihrer AI Vision Sensor-Instanz. |
|
Der Objektindex im Array. Die Indexzählung beginnt bei |
|
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:
Für KI-Klassifizierungen entspricht dies der ID, die durch das ausgewählte KI-Modell definiert ist.
Bei AprilTag-IDs handelt es sich hierbei um die erkannte AprilTag-ID-Nummer (0–36).
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);
}
