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

index

int32_t

De slimme poort waarop de AI-visiesensor is aangesloten, wordt weergegeven als PORTx, waarbij x het poortnummer is (bijvoorbeeld PORT1).

sigs

colordesc, codedesc, or AI constants

Een of meer detectietypen die bij de sensor moeten worden geregistreerd:

  • aivision::ALL_AIOBJS — Alle AI-classificaties
  • aivision::ALL_TAGS — Alle AprilTag-ID’s
  • aivision::colordesc — Aangepaste kleursignatuur
  • aivision::codedesc — Aangepaste kleurcode

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

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 Robotica Competitie met hoge inzet

ID-nummer

AI-classificatie

0

mobileGoal

1

redRing

2

blueRing

VEX V5 Robotics Competition Push Back

ID-nummer

AI-classificatie

0

blueBlock

1

redBlock

VEX V5 Robotics Competition Override

ID-nummer

AI-classificatie

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

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

6 — Maakt een momentopname met behulp van een objectbeschrijving.

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

Parameters

Parameter

Type

Beschrijving

id

uint32_t

De identificatiecode van het object dat moet worden gedetecteerd bij gebruik van de functie (id, type, count) De betekenis hangt af van type:

  • colorObject — Kleurbeschrijvingsindex (1–7)
  • codeObject — Kleurcode-index (1–8)
  • modelObject — AI-classificatie-ID
  • tagObject — AprilTag-ID (0–36)

Opmerking: In VEXcode kunnen AI-classificatienamen (zoals blueBall) direct worden gebruikt. In VS Code moet de numerieke ID worden gebruikt.

type

objectType

Specificeert de categorie van het object dat is gekoppeld aan id:

  • objectType::tagObject — Detecteert AprilTag ID’s
  • objectType::colorObject — Detecteert Kleursignaturen
  • objectType::codeObject — Detecteert Kleurcodes
  • objectType::modelObject — Detecteert AI-classificaties
  • objectType::allObject — Detecteert alles wat de sensor kan herkennen

desc

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

Descriptor die wordt gebruikt om een ​​specifiek object te detecteren. Wordt direct doorgegeven aan takeSnapshot, bijvoorbeeld:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Voorgedefinieerde beschrijvingsconstanten:
  • aivision::ALL_TAGS — Detecteert alle AprilTag-ID’s
  • aivision::ALL_COLORS — Detecteert alle geconfigureerde Kleursignaturen
  • aivision::ALL_CODES — Detecteert alle geconfigureerde Kleurcodes
  • aivision::ALL_AIOBJS — Detecteert alle AI-classificaties
  • aivision::ALL_OBJECTS — Detecteert alles wat de sensor kan herkennen

count

uint32_t / int32_t

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 objects element wordt bij elke oproep vernieuwd.

  • Als count is 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 door takeSnapshot.

  • .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.

Syntax
AIVisionSensor.objectCount

Components

component

Beschrijving

AIVisionSensor

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.

Syntax
AIVisionSensor.largestObject

Components

component

Beschrijving

AIVisionSensor

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.

Syntax
AIVisionSensor.objects[index].property

Components

component

Beschrijving

AIVisionSensor

De naam van uw AI Vision Sensor-instantie.

index

De objectindex in de array. Index begint bij 0.

property

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:

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