AI-visiesensor#
Invoering#
De aivision klasse wordt gebruikt om de EXP AI Vision Sensor te besturen en er toegang toe te krijgen. De AI Vision Sensor kan het volgende detecteren:
AI-classificaties (zoals spelobjecten)
AprilTag-ID’s
Aangepaste kleursignaturen
Aangepaste kleurcodes
Het biedt objectgegevens zoals positie, grootte, oriëntatie, classificatie-ID en betrouwbaarheidsscore.
De sensor verwerkt visuele informatie met behulp van een ingebouwd AI-model dat is geselecteerd in de AI Vision Utility binnen VEXcode. Het geselecteerde model bepaalt welke AI-classificaties de sensor kan detecteren. Bij gebruik van VS Code moet het AI-model eerst in VEXcode worden geconfigureerd voordat het in uw programma kan worden gebruikt. Gedetecteerde objecten worden geretourneerd via de array objects nadat takeSnapshot is aangeroepen.
Klasseconstructors#
aivision(
int32_t index,
Args&... sigs );
Parameters#
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De slimme poort waarop de AI-visiesensor is aangesloten, wordt weergegeven als |
|
|
Een of meer detectietypen die bij de sensor moeten worden geregistreerd:
|
AI-modellen en -classificaties#
De AI Vision Sensor kan verschillende objecten detecteren met behulp van bepaalde AI-classificaties. Afhankelijk van het AI-classificatiemodel dat is geselecteerd bij het configureren van de AI Vision Sensor in het venster Apparaten, kunnen verschillende objecten worden gedetecteerd. De momenteel beschikbare modellen zijn:
Lesmateriaal
ID-nummer |
AI-classificatie |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 Robotica Competitie met hoge inzet
ID-nummer |
AI-classificatie |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 Robotics Competition Push Back
ID-nummer |
AI-classificatie |
|---|---|
0 |
|
1 |
|
VEX V5 Robotics Competition Override
ID-nummer |
AI-classificatie |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Voorbeelden#
// 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
Lidfuncties#
De klasse aivision bevat de volgende lidfuncties:
takeSnapshot— Legt gegevens vast voor een specifieke kleursignatuur, kleurcode, AI-classificatiegroep of AprilTag ID-groep.installed— Geeft aan of de AI Vision Sensor is verbonden met de EXP Brain.
Om toegang te krijgen tot de gedetecteerde objectgegevens na het aanroepen van takeSnapshot, gebruikt u de beschikbare Properties.
Voordat er lidfuncties van aivision kunnen worden aangeroepen, moet er een instantie van aivision worden aangemaakt, zoals hieronder weergegeven:
/* 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#
Legt een afbeelding vast met de AI Vision Sensor, verwerkt deze met behulp van het geselecteerde AI-model of geconfigureerde kleursignaturen en werkt de array met objects bij.
Elke aanroep vernieuwt de array objects met de meest recente detectieresultaten. Objecten worden gesorteerd van groot naar klein (op basis van breedte), beginnend bij index 0Als er geen objecten worden gedetecteerd, zal objectCount 0 zijn en objects[i].exists zal false zijn.
1 — Maakt een momentopname met behulp van een object-ID en objecttype.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Maakt een momentopname met behulp van een Kleursignatuur.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Maakt een momentopname met behulp van een Kleurcode.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Maakt een momentopname met behulp van een AprilTag ID.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Maakt een momentopname met behulp van een AI-classificatie.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Maakt een momentopname met behulp van een objectbeschrijving.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De identificatiecode van het object dat moet worden gedetecteerd bij gebruik van de functie
Opmerking: In VEXcode kunnen AI-classificatienamen (zoals blueBall) direct worden gebruikt. In VS Code moet de numerieke ID worden gebruikt. |
|
|
Specificeert de categorie van het object dat is gekoppeld aan
|
|
|
Descriptor die wordt gebruikt om een specifiek object te detecteren. Wordt direct doorgegeven aan
|
|
|
Het maximale aantal objecten dat vanuit de momentopname wordt opgeslagen. Standaardwaarde is 8. |
retourwaarden
Retourneert een int32_t die het aantal gedetecteerde objecten weergeeft dat overeenkomt met de opgegeven signatuur of het detectietype.
Notities
De AI-visiesensor moet een momentopname maken voordat objectgegevens kunnen worden opgevraagd.
De array
objectselement wordt bij elke oproep vernieuwd.Als
countis opgegeven, worden alleen de grootste gedetecteerde objecten (tot het opgegeven aantal) opgeslagen.
AI-classificaties zijn afhankelijk van het model dat is geselecteerd in de AI Vision Utility in VEXcode.
Voorbeelden
// 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#
Geeft aan of de AI Vision Sensor is verbonden met de EXP Brain.
Beschikbare functies
bool installed();
Parameters
Deze functie accepteert geen parameters.
retourwaarden
Retourneert een Booleaanse waarde die aangeeft of de AI Vision Sensor is aangesloten:
true— De AI-visiesensor is verbonden.false— De AI-visiesensor is niet aangesloten.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Eigenschappen#
Het aanroepen van takeSnapshot werkt de detectieresultaten van de AI Vision Sensor bij. Elke snapshot vernieuwt de array objects , die de gedetecteerde objecten bevat voor de gevraagde AI-classificatie, kleursignatuur, kleurcode of AprilTag ID.
AI Vision-gegevens worden benaderd via eigenschappen van objecten die zijn opgeslagen in AIVisionSensor.objects[index], waarbij index begint bij 0.
De objecten zijn gerangschikt van groot naar klein (op basis van oppervlakte).
De beeldresolutie van de AI Vision Sensor is × 240. De positie- en groottewaarden van objecten worden weergegeven in pixels ten opzichte van het huidige gezichtsveld van de sensor.
De volgende eigenschappen zijn beschikbaar:
objectCount— Retourneert het aantal gedetecteerde objecten uit de meest recente momentopname.largestObject— Selecteert het grootste gedetecteerde object uit de meest recente momentopname.objects— Array met gedetecteerde objecten, bijgewerkt doortakeSnapshot..exists— Of de objectvermelding geldige gegevens bevat..width— Breedte van het gedetecteerde object in pixels..height— Hoogte van het gedetecteerde object in pixels..centerX— X-positie van het middelpunt van het object in pixels..centerY— Y-positie van het middelpunt van het object in pixels..originX— X-positie van de linkerbovenhoek van het object in pixels..originY— Y-positie van de linkerbovenhoek van het object in pixels..angle— Oriëntatie van een kleurcode of AprilTag ID in graden..id— Classificatie-ID of AprilTag-ID..score— Vertrouwensscore voor AI-classificaties.
objectCount#
objectCount retourneert het aantal items in de array objects als een geheel getal.
AIVisionSensor.objectCount
component |
Beschrijving |
|---|---|
|
De naam van uw AI Vision Sensor-instantie. |
Voorbeelden
// 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 haalt het grootste gedetecteerde object op uit de objects array.
Deze methode kan worden gebruikt om altijd het grootste object te verkrijgen uit objects zonder een index op te geven.
AIVisionSensor.largestObject
component |
Beschrijving |
|---|---|
|
De naam van uw AI Vision Sensor-instantie. |
Voorbeelden
// 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 retourneert een array met gedetecteerde objecteigenschappen. Gebruik de array om toegang te krijgen tot specifieke eigenschap waarden van individuele objecten.
Er zijn tien eigenschappen die bij elk object in de array objects worden meegeleverd nadat takeSnapshot is gebruikt.
Alle eigenschapswaarden, behalve id en score beschrijven de positie en grootte van het gedetecteerde object in het gezichtsveld van de AI Vision Sensor op het moment dat takeSnapshot werd gebruikt. Deze waarden worden gemeten in pixels, gebaseerd op de resolutie van de sensor van 320 bij 240 pixels.
AIVisionSensor.objects[index].property
component |
Beschrijving |
|---|---|
|
De naam van uw AI Vision Sensor-instantie. |
|
De objectindex in de array. Index begint bij |
|
Een van de beschikbare objecteigenschappen. |
.bestaat#
.exists retourneert of de opgegeven objectindex een geldig gedetecteerd object bevat.
Toegang
SensorName.objects[index].exists
retourwaarden
Retourneert een Booleaanse waarde die aangeeft of de opgegeven objectindex een geldig gedetecteerd object bevat:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Voorbeelden
// 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);
}
.breedte#
.width geeft de breedte van het gedetecteerde object terug.
Toegang
SensorName.objects[index].width
retourwaarden
Retourneert een int16_t die de breedte van het gedetecteerde object in pixels weergeeft. De waarde varieert van 1 tot 320.
Voorbeelden
// 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);
}
.hoogte#
.height geeft de hoogte van het gedetecteerde object terug.
Toegang
SensorName.objects[index].height
retourwaarden
Retourneert een int16_t die de hoogte van het gedetecteerde object in pixels weergeeft. De waarde varieert van 1 tot 240.
Voorbeelden
// 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 retourneert de x-coördinaat van het middelpunt van het gedetecteerde object.
Toegang
SensorName.objects[index].centerX
retourwaarden
Retourneert een int16_t die de x-coördinaat van het middelpunt van het object in pixels vertegenwoordigt. De waarde varieert van 0 tot 320.
Voorbeelden
// 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 retourneert de y-coördinaat van het middelpunt van het gedetecteerde object.
Toegang
SensorName.objects[index].centerY
retourwaarden
Retourneert een int16_t die de y-coördinaat van het middelpunt van het object in pixels vertegenwoordigt. De waarde varieert van 0 tot 240.
Voorbeelden
// 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);
}
.hoek#
.angle geeft de oriëntatie van de gedetecteerde kleurcode of AprilTag ID terug.
Toegang
SensorName.objects[index].angle
retourwaarden
Retourneert een floatwaarde float die de rotatie van de gedetecteerde kleurcode of AprilTag ID in graden weergeeft. De waarde varieert van 0 tot 359.9.
Voorbeelden
// 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 retourneert de x-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object.
Toegang
SensorName.objects[index].originX
retourwaarden
Retourneert een int16_t die de x-coördinaat van de oorsprong van de begrenzingsbox van het object in pixels vertegenwoordigt. De waarde ligt tussen 0 en 320.
Voorbeelden
// 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 retourneert de y-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object.
Toegang
SensorName.objects[index].originY
retourwaarden
Retourneert een int16_t die de y-coördinaat van de oorsprong van de begrenzingsbox van het object in pixels vertegenwoordigt. De waarde ligt tussen 0 en 240.
Voorbeelden
// 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 retourneert de gedetecteerde AprilTag ID of AI-classificatie-ID.
Toegang
SensorName.objects[index].id
retourwaarden
Retourneert een int32_t die de ID van het gedetecteerde object vertegenwoordigt:
Voor AI-classificaties, komt dit overeen met de ID gedefinieerd door het geselecteerde AI-model.
Voor AprilTag-ID’s vertegenwoordigt dit het gedetecteerde AprilTag-ID-nummer (0-36).
Voorbeelden
// 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);
}
.score#
.score geeft de betrouwbaarheidsscore van de gedetecteerde AI-classificatie terug.
Toegang
SensorName.objects[index].score
retourwaarden
Retourneert een int16_t die de betrouwbaarheidsscore van de gedetecteerde AI-classificatie aangeeft, tussen 1 en 100.
Een lagere score betekent dat de sensor minder zeker is van het gedetecteerde object, terwijl een hogere score betekent dat de sensor meer zeker is.
Voorbeelden
// 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);
}
