Programmierung mit dem KI-Vision-Sensor in VEXcode V5 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 quadratische Identifikationsmarkierungen mit den IDs 0, 9 und 3, jeweils mit entsprechenden Koordinaten und Größenangaben in weißer Schrift. ID 0 befindet sich links, ID 9 rechts und ID 3 unten in der Mitte. Jeder Marker hat ein einzigartiges schwarz-weißes Muster innerhalb eines Quadrats.

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.

Auf dem Bild sind zwei Kugeln und zwei Ringe identifiziert, mit Beschriftungen, die ihre Position, Größe und Punktzahl angeben. Der rote Ball befindet sich links, der blaue Ball rechts, der grüne Ring unten links und der rote Ring unten rechts. Jedes Objekt ist mit einem weißen Rahmen umrandet, und Details wie X- und Y-Koordinaten, Breite, Höhe und eine Punktzahl von 99 % werden in weißer Schrift angezeigt.

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.

Ein blauer Buckyball wird von einem Computer-Vision-System verfolgt. Das Objekt ist mit einem weißen Quadrat umrandet, und innerhalb der Umrandung befindet sich ein kleineres rotes Quadrat, das ein zentriertes weißes Kreuz umschließt. In der oberen linken Ecke des Bildes befindet sich eine Beschriftung, die darauf hinweist, dass das Objekt blau ist, mit den Koordinaten X:176, Y:117 und den Abmessungen B:80, H:78.

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

Zwei blaue, würfelförmige Objekte, die von einem Bildverarbeitungssystem verfolgt werden. Das obere Objekt ist mit den Koordinaten X:215, Y:70 und den Abmessungen W:73, H:84 beschriftet und mit einer weißen Umrandung und einem zentrierten weißen Kreuz versehen. Das untere Objekt ist mit den Koordinaten X:188, Y:184 und den Abmessungen W:144, H:113 beschriftet und zusätzlich weiß umrandet mit einem zentrierten weißen Kreuz.

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 blauen Farbobjekte.
  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.

Ein blauer Buckyball wird von einem Bildverarbeitungssystem verfolgt. Das Objekt ist von einem weißen Rahmen umgeben, innerhalb dessen sich mittig ein weißes Kreuz befindet. Die Beschriftung oben links gibt die Farbe des Objekts als blau an, zusammen mit den Koordinaten X:176, Y:117 und den Abmessungen W:80, H:78. Ein kleines rotes Quadrat markiert die linke obere Ecke des Objekts.

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.

Das Bild zeigt einen blauen Buckyball, der von einem weißen quadratischen Umriss umgeben ist. In der oberen linken Ecke befindet sich eine Beschriftung, die darauf hinweist, dass es sich um ein blaues Objekt handelt, mit den Koordinaten X:176, Y:117 und den Abmessungen B:80, H:78. Rote Pfeile markieren die Breite und Höhe des Objekts.

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

Zwei blaue, würfelförmige Objekte werden von einem visuellen Erkennungssystem verfolgt. Der obere Würfel hat eine weiße Umrandung und eine Beschriftung, die seine Position mit X:215, Y:70 und die Abmessungen W:73, H:84 angibt. Der untere Würfel hat eine ähnliche weiße Umrandung mit der Beschriftung X:188, Y:184 und den Abmessungen W:144, H:113. Jeder Würfel hat ein zentriertes weißes Kreuz, das wahrscheinlich den Fokuspunkt für die Verfolgung anzeigt. Die Beschriftungen heben die Messwerte und Tracking-Daten für jedes Objekt hervor.

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 eine Momentaufnahme 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

Ein rotierendes GIF, das rote und grüne Blöcke zeigt. Wenn die Blöcke von Rot nach Grün perfekt horizontal ausgerichtet sind, wird ein Winkel von 0 Grad angezeigt. Wenn der rote Block senkrecht über dem grünen Block steht, beträgt der Winkel 90 Grad. Wenn die Blöcke horizontal von grün nach rot angeordnet sind, beträgt der Winkel 180 Grad. Wenn der grüne Block senkrecht über dem roten Block steht, beträgt der Winkel 20 Grad.

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

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

Ein Stapel aus zwei Würfeln, einem grünen oben und einem blauen unten, wird von einem Bildverarbeitungssystem verfolgt. Beide Würfel sind von einem weißen Rahmen umgeben, auf dem grünen Würfel befindet sich mittig ein weißes Kreuz. Die Beschriftung am unteren Bildrand zeigt Green_Blue A:87° an und gibt die erkannten Farben sowie eine Winkelmessung an. Darunter sind die Koordinaten als X:117, Y:186 mit den Abmessungen W:137, H:172 angeordnet, die die Position und Größe der gestapelten Würfel im Rahmen darstellen.

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

Zwei Würfel, ein grüner und ein blauer, werden nebeneinander platziert und von einem Bildverarbeitungssystem verfolgt. Beide Würfel sind von einem weißen Rahmen umgeben, in dessen Mitte sich ein weißes Kreuz befindet. Die Beschriftung oben links gibt Green_Blue A:0° an und bezieht sich auf die erkannten Farben und eine Winkelmessung. Darunter werden die Koordinaten als X:150, Y:102 mit den Abmessungen W:179, H:109 angezeigt, die die Position und Größe der Würfel innerhalb des Rahmens darstellen.

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 Bild zeigt vier Objekte, die von einem Bildverarbeitungssystem verfolgt werden: zwei Kugeln und zwei Ringe. Der rote Ball ist mit den Koordinaten X:122, Y:84, W:67, H:66 und einer Punktzahl von 99% gekennzeichnet. Der blaue Ball hat die Werte X:228, Y:86, W:70, H:68 und eine Punktzahl von 99%. Der grüne Ring hat die Koordinaten X:109, Y:186, W:98, H:92 und eine Punktzahl von 99%. Der rote Ring ist mit X:259, Y:187, W:89, H:91 beschriftet und hat eine Punktzahl von 99%. Jedes Objekt ist weiß umrandet, was die Genauigkeit der Verfolgung verdeutlicht.

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.

Die Benutzeroberfläche des AI Vision Utility zeigt zwei blaue Würfel auf der linken Seite, die jeweils mit ihren X- und Y-Koordinaten und Abmessungen gekennzeichnet sind. Das System ist verbunden, AprilTags sind aktiviert, die KI-Klassifizierung ist deaktiviert. Auf der rechten Seite werden die Einstellungen für die blaue Farbe mit einstellbaren Bereichen für Farbton und Sättigung angezeigt, die auf 22 bzw. 0,34 eingestellt sind. Es besteht die Möglichkeit, Farben hinzuzufügen oder festzulegen und das Video einzufrieren. Die Firmware ist auf dem neuesten Stand und läuft in Version 1.0.0.b16. Am unteren Rand befindet sich eine Schaltfläche zum Schließen.

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: