AI-synsensor#
Introduktion#
Klassen aivision används för att styra och komma åt data från V5 AI Vision Sensor. AI Vision Sensorn kan detektera:
AI-klassificeringar (som spelobjekt)
AprilTag-ID:n
Anpassade färgsignaturer
Anpassade färgkoder
Den tillhandahåller objektdata inklusive position, storlek, orientering, klassificerings-ID och konfidenspoäng.
Sensorn bearbetar visuell information med hjälp av en inbyggd AI-modell som valts i AI Vision Utility i VEXcode. Den valda modellen avgör vilka AI-klassificeringar sensorn kan detektera. När VS Code används måste AI-modellen först konfigureras i VEXcode innan den kan användas i ditt program. Detekterade objekt returneras via arrayen objects efter att takeSnapshot har anropats.
Klasskonstruktörer#
aivision(
int32_t index,
Args&... sigs );
Parametrar#
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Den smarta porten som AI-visionssensorn är ansluten till, skriven som |
|
|
En eller flera detektionstyper att registrera med sensorn:
|
AI-modeller och klassificeringar#
AI-visionssensorn kan upptäcka olika objekt med vissa AI-klassificeringar. Beroende på vilken AI-klassificeringsmodell som valts när AI-visionssensorn konfigurerades i fönstret Enheter kan olika objekt upptäckas. De för närvarande tillgängliga modellerna är:
Klassrumselement
ID-nummer |
AI-klassificering |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 Robotics Competition High Insatser
ID-nummer |
AI-klassificering |
|---|---|
0 |
|
1 |
|
2 |
|
Återanmälan till VEX V5 Robotics-tävling
ID-nummer |
AI-klassificering |
|---|---|
0 |
|
1 |
|
VEX V5 Robotics Tävlingsöverstyrning
ID-nummer |
AI-klassificering |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Exempel#
// 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
Medlemsfunktioner#
Klassen aivision innehåller följande medlemsfunktioner:
takeSnapshot— Samlar in data för en specifik färgsignatur, färgkod, AI-klassificeringsgrupp eller AprilTag ID-grupp.installed— Returnerar om AI-visionssensorn är ansluten till V5 Brain.
För att komma åt detekterade objektdata efter att ha anropat takeSnapshot, använd de tillgängliga Egenskaper.
Innan några aivision medlemsfunktioner anropas måste en aivision instans skapas, som visas nedan:
/* 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#
Tar en bild från AI-visionssensorn, bearbetar den med hjälp av den valda AI-modellen eller konfigurerade färgsignaturer och uppdaterar objects matrisen.
Varje anrop uppdaterar arrayen objects med de senaste detekteringsresultaten. Objekten är ordnade från störst till minst (efter bredd), med början vid index 0Om inga objekt detekteras kommer objectCount att vara 0 och objects[i].exists kommer att vara false.
1 — Tar en ögonblicksbild med hjälp av ett objekt-ID och en objekttyp.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Tar en ögonblicksbild med en Färgsignatur.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Tar en ögonblicksbild med hjälp av en Färgkod.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Tar en ögonblicksbild med ett AprilTag ID.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Tar en ögonblicksbild med hjälp av en AI-klassificering.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Tar en ögonblicksbild med hjälp av en objektbeskrivare.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Identifieraren för det objekt som ska detekteras när funktionen
Obs: I VEXcode kan AI-klassificeringsnamn (t.ex. blueBall) användas direkt. I VS Code måste det numeriska ID:t användas. |
|
|
Anger objektkategorin som är associerad med
|
|
|
Deskriptor som används för att detektera ett specifikt objekt. Skickas direkt till
|
|
|
Maximalt antal objekt som lagras från ögonblicksbilden. Standardvärdet är 8. |
Returvärden
Returnerar int32_t som representerar antalet upptäckta objekt som matchar den angivna signaturen eller detektionstypen.
Anteckningar
AI-visionssensorn måste ta en ögonblicksbild innan objektdata kan nås.
Matrisen
objectsuppdateras vid varje anrop.När
countanges lagras endast de största detekterade objekten (upp till den angivna mängden).
AI-klassificeringar beror på vilken modell som valts i AI Vision Utility i VEXcode.
Exempel
// 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#
Returnerar om AI-visionssensorn är ansluten till V5 Brain.
Tillgängliga funktioner
bool installed();
Parametrar
Den här funktionen tar inga parametrar.
Returvärden
Returnerar ett booleskt värde som anger om AI-visionssensorn är ansluten:
true— AI-visionssensorn är ansluten.false— AI-visionssensorn är inte ansluten.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Fastigheter#
Anrop av takeSnapshot uppdaterar AI-visionssensorns detekteringsresultat. Varje ögonblicksbild uppdaterar objects arrayen, som innehåller detekterade objekt för den begärda AI-klassificeringen, färgsignaturen, färgkoden eller AprilTag-ID:t.
AI Vision-data nås via egenskaper hos objekt som lagras i AIVisionSensor.objects[index], där index börjar vid 0.
Objekt är ordnade från störst till minst (efter area).
AI Vision Sensorns bildupplösning är 320 × 240 pixlarObjektets position och storlek rapporteras i pixelenheter i förhållande till sensorns aktuella vy.
Följande fastigheter är tillgängliga:
objectCount— Returnerar antalet upptäckta objekt från den senaste ögonblicksbilden.largestObject— Väljer det största detekterade objektet från den senaste ögonblicksbilden.objects— Matris som innehåller detekterade objekt uppdaterad avtakeSnapshot..exists— Om objektposten innehåller giltiga data..width— Width of the detected object in pixels..height— Height of the detected object in pixels..centerX— X position of the object’s center in pixels..centerY— Y position of the object’s center in pixels..originX— X position of the object’s top-left corner in pixels..originY— Y position of the object’s top-left corner in pixels..angle— Orientation of a Color Code or AprilTag ID in degrees..id— Classification ID or AprilTag ID..score— Konfidenspoäng för AI-klassificeringar.
objectCount#
objectCount returnerar antalet objekt i arrayen objects som ett heltal.
AIVisionSensor.objectCount
Komponent |
Beskrivning |
|---|---|
|
Namnet på din AI Vision Sensor-instans. |
Exempel
// 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 hämtar det största detekterade objektet från arrayen objects.
Den här metoden kan användas för att alltid hämta det största objektet från objects utan att ange ett index.
AIVisionSensor.largestObject
Komponent |
Beskrivning |
|---|---|
|
Namnet på din AI Vision Sensor-instans. |
Exempel
// 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 returnerar en array med upptäckta objektegenskaper. Använd arrayen för att komma åt specifika property-värden för enskilda objekt.
Det finns tio egenskaper som ingår i varje objekt som lagras i arrayen objects efter att takeSnapshot har använts.
Alla egenskapsvärden utom id och score beskriver det detekterade objektets position och storlek i AI-visionssensorns vy i det ögonblick takeSnapshot användes. Dessa värden mäts i pixlar, baserat på sensorns upplösning på 320 x 240 pixlar.
AIVisionSensor.objects[index].property
Komponent |
Beskrivning |
|---|---|
|
Namnet på din AI Vision Sensor-instans. |
|
Objektindexet i arrayen. Indexet börjar vid |
|
En av de tillgängliga objektegenskaperna. |
.existerar#
.exists returnerar om det angivna objektindexet innehåller ett giltigt detekterat objekt.
Åtkomst
SensorName.objects[index].exists
Returvärden
Returnerar ett booleskt värde som anger om det angivna objektindexet innehåller ett giltigt detekterat objekt:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Exempel
// 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);
}
.bredd#
.width returnerar bredden på det detekterade objektet.
Åtkomst
SensorName.objects[index].width
Returvärden
Returnerar int16_t som representerar bredden på det detekterade objektet i pixlar. Värdet varierar från 1 till 320.
Exempel
// 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öjd#
.height returnerar höjden på det detekterade objektet.
Åtkomst
SensorName.objects[index].height
Returvärden
Returnerar int16_t som representerar höjden på det detekterade objektet i pixlar. Värdet varierar från 1 till 240.
Exempel
// 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 returnerar x-koordinaten för centrum av det detekterade objektet.
Åtkomst
SensorName.objects[index].centerX
Returvärden
Returns an int16_t representing the x-coordinate of the object’s center in pixels. The value ranges from 0 to 320.
Exempel
// 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 returnerar y-koordinaten för det detekterade objektets centrum.
Åtkomst
SensorName.objects[index].centerY
Returvärden
Returns an int16_t representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 240.
Exempel
// 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);
}
.vinkel#
.angle returnerar orienteringen för den detekterade färgkoden eller AprilTag-ID:t.
Åtkomst
SensorName.objects[index].angle
Returvärden
Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.
Exempel
// 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 returnerar x-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram.
Åtkomst
SensorName.objects[index].originX
Returvärden
Returns an int16_t representing the x-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 320.
Exempel
// 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);
}
.ursprungY#
.originY returnerar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram.
Åtkomst
SensorName.objects[index].originY
Returvärden
Returns an int16_t representing the y-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 240.
Exempel
// 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 returnerar det detekterade AprilTag-ID:t eller AI-klassificerings-ID:t.
Åtkomst
SensorName.objects[index].id
Returvärden
Returnerar ett int32_t som representerar ID:t för det detekterade objektet:
För AI-klassificeringar motsvarar detta det ID som definierats av den valda AI-modellen.
För AprilTag-ID:n representerar detta det detekterade AprilTag-ID-numret (0–36).
Exempel
// 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);
}
.göra#
.score returnerar konfidenspoängen för den detekterade AI-klassificeringen.
Åtkomst
SensorName.objects[index].score
Returvärden
Returnerar int16_t som anger konfidenspoängen för den detekterade AI-klassificeringen mellan 1 och 100.
En lägre poäng innebär att sensorn är mindre säker på det detekterade objektet, medan en högre poäng innebär att sensorn är mer säker.
Exempel
// 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);
}
