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

index

int32_t

Den smarta porten som AI-visionssensorn är ansluten till, skriven som PORTx, där x är portnumret (till exempel PORT1).

sigs

colordesc, codedesc, or AI constants

En eller flera detektionstyper att registrera med sensorn:

  • aivision::ALL_AIOBJS — Alla AI-klassificeringar
  • aivision::ALL_TAGS — Alla AprilTag-ID:
  • aivision::colordesc — Anpassad färgsignatur
  • aivision::codedesc — Anpassad färgkod

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

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 Robotics Competition High Insatser

ID-nummer

AI-klassificering

0

mobileGoal

1

redRing

2

blueRing

Återanmälan till VEX V5 Robotics-tävling

ID-nummer

AI-klassificering

0

blueBlock

1

redBlock

VEX V5 Robotics Tävlingsöverstyrning

ID-nummer

AI-klassificering

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

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

6 — Tar en ögonblicksbild med hjälp av en objektbeskrivare.

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

Parameters

Parameter

Typ

Beskrivning

id

uint32_t

Identifieraren för det objekt som ska detekteras när funktionen (id, type, count) används. Betydelsen beror på type:

  • colorObject — Färgbeskrivningsindex (1–7)
  • codeObject — Färgkodsindex (1–8)
  • modelObject — AI-klassificerings-ID
  • tagObject — AprilTag ID (0–36)

Obs: I VEXcode kan AI-klassificeringsnamn (t.ex. blueBall) användas direkt. I VS Code måste det numeriska ID:t användas.

type

objectType

Anger objektkategorin som är associerad med id:

  • objectType::tagObject — Detekterar AprilTag-ID:
  • objectType::colorObject — Detekterar Färgsignaturer
  • objectType::codeObject — Detekterar Färgkoder
  • objectType::modelObject — Detekterar AI-klassificeringar
  • objectType::allObject — Detekterar allt som sensorn kan känna igen

desc

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

Deskriptor som används för att detektera ett specifikt objekt. Skickas direkt till takeSnapshot, till exempel:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Fördefinierade deskriptorkonstanter:
  • aivision::ALL_TAGS — Detekterar alla AprilTag-ID:
  • aivision::ALL_COLORS — Detekterar alla konfigurerade färgsignaturer
  • aivision::ALL_CODES — Detekterar alla konfigurerade färgkoder
  • aivision::ALL_AIOBJS — Detekterar alla AI-klassificeringar
  • aivision::ALL_OBJECTS — Detekterar allt som sensorn kan känna igen

count

uint32_t / int32_t

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 objects uppdateras vid varje anrop.

  • När count anges 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 av takeSnapshot.

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

Syntax
AIVisionSensor.objectCount

Components

Komponent

Beskrivning

AIVisionSensor

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.

Syntax
AIVisionSensor.largestObject

Components

Komponent

Beskrivning

AIVisionSensor

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.

Syntax
AIVisionSensor.objects[index].property

Components

Komponent

Beskrivning

AIVisionSensor

Namnet på din AI Vision Sensor-instans.

index

Objektindexet i arrayen. Indexet börjar vid 0.

property

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:

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