Programmierung mit dem KI-Vision-Sensor in VEXcode EXP C++

Stellen Sie sicher, dass Sie Farbsignaturen und Farbcodes mit Ihrem KI-Vision-Sensor konfiguriert haben, damit diese mit Ihren Blöcken verwendet werden können. Um mehr darüber zu erfahren, wie Sie diese konfigurieren können, lesen Sie die folgenden Artikel:

Der KI-Vision-Sensor kann auch KI-Klassifizierungen und AprilTags erkennen. Um zu erfahren, wie Sie diese Erkennungsmodi aktivieren, klicken Sie hier:

Um mehr über die einzelnen Befehle und deren Verwendung in VEXcode zu erfahren, besuchen Sie die API-Website.


Visuelle Daten mit dem KI-Vision-Sensor erfassen

Jeder Befehl des KI-Vision-Sensors beginnt mit dem Namen des konfigurierten KI-Vision-Sensors. In allen Beispielen dieses Artikels wird der verwendete AI Vision Sensor als AIVisionbezeichnet.

Schnappschuss machen

Die Methode takeSnapshot erstellt ein Bild von dem, was der KI-Vision-Sensor aktuell sieht, und extrahiert Daten aus diesem Snapshot, die dann in einem Projekt verwendet werden können. Wenn eine Momentaufnahme erstellt wird, müssen Sie angeben, von welchem Objekttyp der KI-Vision-Sensor Daten erfassen soll:

  • AFarbsignatur oderFarbcode
    • Diese visuellen Signaturen beginnen mit dem Namen des KI-Vision-Sensors, gefolgt von zwei Unterstrichen und dem Namen der visuellen Signatur, zum Beispiel: AIVision1__Blue.
  • KI-Klassifizierungen - aivision::ALL_AIOBJS
  • AprilTags- aivision::ALL_TAGS

Durch das Erstellen eines Snapshots wird ein Array aller erkannten Objekte erzeugt, die Sie angegeben haben. Wenn Sie beispielsweise eine "Blau" Farbsignaturerkennen möchten und der KI-Vision-Sensor 3 verschiedene blaue Objekte erkennt, werden die Daten aller drei in das Array eingefügt.

In diesem Beispiel wird eine Momentaufnahme der "Blau" Farbsignaturvom AI Vision Sensor mit der Bezeichnung AIVision1aufgenommen. Es zeigt die Anzahl der im Array erkannten Objekte an und erstellt alle 0,5 Sekunden eine neue Momentaufnahme.

while (true) {
// Erhalte einen Snapshot aller blauen Objekte.
AIVision.takeSnapshot(AIVision1__Blue);

// Vor dem Abrufen der Daten prüfen, ob im Snapshot ein Objekt erkannt wurde.
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, ms);
}

Objekte

Jedes Objekt in einem Snapshot besitzt unterschiedliche Eigenschaften, die zur Ermittlung von Informationen über dieses Objekt verwendet werden können. Die Objektmethode ermöglicht den Zugriff auf diese Eigenschaften.

Folgende Objekte stehen zur Verfügung:

  • Ausweis
  • centerX und centerY
  • UrsprungX und UrsprungY
  • Breite
  • Höhe
  • Winkel
  • existiert
  • Punktzahl

Um auf eine Objekteigenschaft zuzugreifen, verwenden Sie den Namen des KI-Vision-Sensors, gefolgt von der Objektmethode und dann dem Index des Objekts.

Der Objektindex gibt an, welche spezifische Eigenschaft des Objekts Sie abrufen möchten. Nach der Aufnahme eines Fotos sortiert der KI-Vision-Sensor die Objekte automatisch nach Größe. Dem größten Objekt wird der Index 0 zugewiesen, kleinere Objekte erhalten höhere Indexnummern.

Beispielsweise würde der Aufruf der Breite des größten Objekts AIVision1.objects[0].widthlauten.

Ausweis

Die Eigenschaft id ist nur für AprilTags und KI-Klassifizierungen verfügbar.

Drei AprilTags werden von der KI-Vision-Utility verfolgt. Jedes Tag wird identifiziert, lokalisiert und umrissen, wodurch seine Verfolgung durch das System angezeigt wird. Die AprilTag-IDs in diesem Beispiel lauten 0, 3 und 9.

Für einenAprilTagstellt die id Eigenschaft die erkannte(n)AprilTag(s) ID-Nummer(n) dar.

Die Identifizierung spezifischer AprilTags ermöglicht eine selektive Navigation. Sie können Ihren Roboter so programmieren, dass er sich auf bestimmte Markierungen zubewegt, während er andere ignoriert, und diese somit effektiv als Wegweiser für die automatisierte Navigation nutzen.

Das KI-Vision-Tool verfolgt vier Objekte: zwei Buckyballs und zwei Ringe. Jedes Objekt wird identifiziert, lokalisiert und umrissen, wodurch seine Verfolgung durch das System angezeigt wird. Das Hilfsprogramm merkt sich die Objekt-ID; in diesem Beispiel gibt es einen roten Ball, einen blauen Ball, einen grünen Ring und einen roten Ring.

BeiKI-Klassifizierungenstellt die Eigenschaft id den spezifischen Typ der erkannten KI-Klassifizierung dar.

Die Identifizierung spezifischer KI-Klassifizierungenermöglicht es dem Roboter, sich nur auf bestimmte Objekte zu konzentrieren, z. B. nur auf einen roten Buckyball zuzusteuern, nicht auf einen blauen.

Weitere Informationen zu AprilTags und AI Classifications und wie deren Erkennung im AI Vision Utility aktiviert werden kann, finden Sie in diesen Artikeln.

centerX und centerY

Dies sind die Mittelpunktkoordinaten des erkannten Objekts in Pixeln.

Der KI-Vision-Sensor verfolgt einen blauen Fullerene. Der Buckyball ist von einem Tracking-Rechteck umgeben, und die Beschriftung darüber zeigt, dass er eine X-Position von 176 und eine Y-Position von 117 hat. Der Mittelpunkt des Tracking-Rechtecks ist hervorgehoben, um zu verdeutlichen, dass die Position vom Mittelpunkt aus gemessen wird.

Die CenterX- und CenterY-Koordinaten helfen bei der Navigation und Positionierung. Der KI-Vision-Sensor hat eine Auflösung von 320 x 240 Pixeln.

Der KI-Vision-Sensor verfolgt zwei blaue Würfel. Die Würfel sind von Tracking-Rechtecken umgeben, wobei einer davon viel näher an der Kamera ist. Das nähere Objekt hat eine Y-Position von 184, das weiter entfernte eine Y-Position von 70.

Man kann erkennen, dass ein Objekt, das näher am KI-Vision-Sensor ist, eine niedrigere CenterY-Koordinate hat als ein Objekt, das weiter entfernt ist.

Da sich in diesem Beispiel der Mittelpunkt des Sichtfelds des KI-Vision-Sensors bei (160, 120) befindet, dreht sich der Roboter nach rechts, bis die CenterX-Koordinate eines erkannten Objekts größer als 150 Pixel, aber kleiner als 170 Pixel ist.

while (true) {
  // Erhalte einen Snapshot aller Objekte der Farbe Blau.
  AIVision.takeSnapshot(AIVision__Blue);

  // Überprüfen, ob im Snapshot ein Objekt erkannt wurde, bevor Daten abgerufen werden.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(right);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

UrsprungX und UrsprungY

OriginX und OriginY sind die Koordinaten in der oberen linken Ecke des erkannten Objekts in Pixeln.

Der KI-Vision-Sensor verfolgt einen blauen Fullerene. Der Buckyball ist von einem Tracking-Rechteck umgeben, und die Beschriftung darüber zeigt, dass er eine X-Position von 176 und eine Y-Position von 117 hat. Die obere linke Ecke des Tracking-Rechtecks ist hervorgehoben, um zu verdeutlichen, dass die Ursprungsposition von dieser oberen linken Ecke aus gemessen wird.

Die Koordinaten OriginX und OriginY helfen bei der Navigation und Positionierung. Durch die Kombination dieser Koordinate mit der Breite und Höhe des Objekts lässt sich die Größe des Begrenzungsrahmens des Objekts bestimmen. Dies kann beim Verfolgen sich bewegender Objekte oder beim Navigieren zwischen Objekten hilfreich sein.

Breite und Höhe

Dies ist die Breite oder Höhe des erkannten Objekts in Pixeln.

Der KI-Vision-Sensor verfolgt einen blauen Fullerene. Der Buckyball ist von einem Tracking-Rechteck umgeben, und die Beschriftung darüber zeigt, dass er eine Breite von 80 Pixeln und eine Höhe von 78 Pixeln hat. Rote Pfeile markieren das Tracking-Rechteck, um dessen Breite und Höhe zu verdeutlichen.

Die Breiten- und Höhenangaben helfen bei der Identifizierung verschiedener Objekte. Ein Buckyball ist beispielsweise höher als ein Ring.

Der KI-Vision-Sensor verfolgt zwei blaue Würfel. Die Würfel sind von Tracking-Rechtecken umgeben, wobei einer davon viel näher an der Kamera ist. Das näher gelegene Objekt hat eine Breite von 144 und eine Höhe von 113, das weiter entfernt gelegene Objekt hat eine Breite von 73 und eine Höhe von 84.

Breite und Höhe geben auch die Entfernung eines Objekts vom KI-Vision-Sensor an. Kleinere Messwerte bedeuten in der Regel, dass das Objekt weiter entfernt ist, während größere Messwerte darauf hindeuten, dass es näher ist.

In diesem Beispiel wird die Breite des Objekts zur Navigation verwendet. Der Roboter nähert sich dem Objekt so lange, bis die Breite eine bestimmte Größe erreicht hat, bevor er anhält.

while (true) {
  // Erhalte einen Snapshot aller blauen Objekte.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Überprüfen, ob im Snapshot ein Objekt erkannt wurde, bevor Daten abgerufen werden.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

Winkel

Animation eines roten und eines grünen Quadrats, die gemeinsam gedreht werden, um den Wert von 360 Grad eines Winkels zu veranschaulichen.

Die Eigenschaft ° Winkel ist nur für die Farbcodesund(AprilTags verfügbar

Dies bedeutet, dass der erkannte Farbcode (AprilTagoder ausgerichtet ist.

Der KI-Vision-Sensor verfolgt einen Farbcode von Grün nach Blau. Die Videoübertragung zeigt einen grünen Würfel, der auf einem blauen Würfel gestapelt ist. Der Winkelwert des Farbcodes ist hervorgehoben und beträgt 87 Grad, was darauf hinweist, dass der Farbcode vertikal ausgerichtet ist.

Sie können überprüfen, ob der Roboter in Bezug auf den Farbcode oderAprilTag unterschiedlich ausgerichtet ist und entsprechend Navigationsentscheidungen treffen.

Der KI-Vision-Sensor verfolgt einen Farbcode von Grün nach Blau. Die Videoübertragung zeigt einen grünen Würfel neben einem blauen Würfel, aber sie befinden sich in einem ungünstigen Winkel zum Sensor. Der Winkelwert des Farbcodes ist hervorgehoben und lautet 0 Grad, was bedeutet, dass der Winkel des Farbcodes nicht abgelesen werden kann.

Wird beispielsweise einFarbcode nicht im richtigen Winkel erkannt, kann das von ihm dargestellte Objekt möglicherweise nicht richtig vom Roboter aufgenommen werden.

Punktzahl

Die Eigenschaft Score wird bei der Erkennung vonKI-Klassifizierungen mit dem KI-Vision-Sensor verwendet.

Das KI-Vision-Tool verfolgt vier Objekte: zwei Buckyballs und zwei Ringe. Jedes Objekt wird identifiziert, lokalisiert und umrissen, wodurch seine Verfolgung durch das System angezeigt wird. Das Tool listet außerdem die KI-Klassifizierungspunktzahl jedes Objekts auf; in diesem Beispiel beträgt die Punktzahl jeweils 99 %.

Der Konfidenzwert gibt an, wie sicher sich der KI-Vision-Sensor bei seiner Erkennung ist. In diesem Bild ist die KI-Klassifizierung dieser vier Objekte zu 99 % sicher. Mithilfe dieser Punktzahl können Sie sicherstellen, dass sich Ihr Roboter nur auf Erkennungen mit hoher Treffsicherheit konzentriert.

existiert

Die Eigenschaft exists wird verwendet, um festzustellen, ob eine bestimmte visuelle Signatur im zuletzt aufgenommenen Snapshot erkannt wurde.

Damit können Sie überprüfen, ob im vorherigen Snapshot bereits Objekte erkannt wurden. Diese Eigenschaft gibt True zurück, wenn ein Objekt existiert, und False, wenn das Objekt nicht existiert.


Objektanzahl

Die Methode objectCount gibt die Anzahl der im letzten Snapshot erkannten Objekte zurück.

Der KI-Vision-Sensor verfolgt zwei blaue Würfel. Die Würfel sind von Tracking-Rechtecken umgeben, wobei einer davon viel näher an der Kamera ist.

In diesem Beispiel wurden zwei Objekte mit der Farbsignatur „Blau“ erkannt. Beide Elemente werden in das Array eingefügt, wenn die Methode takeSnapshot verwendet wird.

Dieser Codeabschnitt aktualisiert das EXP Brain kontinuierlich mit der Anzahl der erkannten Objekte. Anhand des angegebenen Beispiels wird wiederholt der Wert 2 gesendet, was bedeutet, dass zwei Objekte erkannt wurden.

while (true) {
// Erhalte einen Snapshot aller blauen Objekte.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Vor dem Abrufen der Daten prüfen, ob im Snapshot ein Objekt erkannt wurde.
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, ms);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: