KI-Vision#

Einführung#

Der KI-Vision-Sensor des VEX AIM Coding-Roboters erkennt und verfolgt Objekte, Farben und AprilTag-IDs. Dadurch kann der Roboter seine Umgebung analysieren, Objekten folgen und auf Basis der erfassten visuellen Daten reagieren.

Der KI-Vision-Sensor hat eine Auflösung von 320×240 Pixeln. Der Ursprung (0, 0) befindet sich in der oberen linken Ecke, wodurch sich der Mittelpunkt des Sensors bei (160, 120) befindet, wie in der folgenden Abbildung dargestellt:

Ein Diagramm, das die Auflösung des AIM AI Vision Sensors zeigt, mit den Koordinaten 0, 0 oben links im Diagramm, 320, 0 oben rechts und 0, 240 unten links, wobei 160, 120 genau in der Mitte liegt.

Nachfolgend finden Sie eine Liste aller Methoden und Eigenschaften:

Aktionen – Kamerabild der KI-Vision ein- oder ausblenden.

  • show_aivision — Zeigt den AI Vision-Feed auf dem Bildschirm des Roboters an.

  • hide_aivision — Blendet den AI Vision-Feed vom Bildschirm aus.

  • tag_detection — Schaltet die AprilTag-ID-Erkennung ein oder aus.

Getter – Erkennen, ob der Roboter ein Objekt hält.

  • get_data — Gibt ein Tupel erkannter Objekte für eine bestimmte Signatur zurück.

  • has_sports_ball — Gibt zurück, ob der Roboter einen Sportball hat.

  • has_any_barrel — Gibt zurück, ob der Roboter über irgendeine Art von Fass verfügt.

  • has_blue_barrel — Gibt zurück, ob der Roboter ein blaues Fass hat.

  • has_orange_barrel — Gibt zurück, ob der Roboter ein oranges Fass hat.

Eigenschaften — Objektdaten, die von get_data zurückgegeben werden.

  • exists — Gibt als boolescher Wert an, ob das Objekt bei der aktuellen Erkennung existiert.

  • width — Breite des erkannten Objekts.

  • height — Höhe des erkannten Objekts.

  • centerX — X-Position des Objektmittelpunkts.

  • centerY — Y-Position des Objektmittelpunkts.

  • bearing — Horizontaler Winkel relativ zur Vorderseite des Roboters.

  • rotation — Orientierung des Objekts.

  • originX — X-Position der oberen linken Ecke des Objekts.

  • originY — Y-Position der oberen linken Ecke des Objekts.

  • id — Klassifizierung oder Tag-ID des Objekts.

  • score — Konfidenzwert für KI-Klassifizierungen.

  • type — Gibt den Typ des Objekts zurück (AI, Tag, Farbe oder Code).

Konstrukteure – Farbsignaturen und -codes definieren.

Aktionen#

show_aivision#

show_aivision zeigt die Live-Daten des KI-Vision-Sensors auf dem Bildschirm des Roboters an. Die Live-Daten überdecken alle anderen Bilder oder Texte auf dem Bildschirm.

Hinweis: Es werden keine anderen Bilder oder Texte angezeigt, es sei denn, hide_aivision wird verwendet, um den Feed auszublenden.

Usage:
robot.screen.show_aivision()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()

hide_aivision#

hide_aivision entfernt die Live-Daten des KI-Vision-Sensors vom Bildschirm des Roboters.

Usage:
robot.screen.hide_aivision()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()

tag_detection#

tag_detection aktiviert oder deaktiviert die AprilTag-ID-Erkennung, wobei der Status ein boolescher Wert ist.

Der Sensor kann AprilTag-IDs von 0 bis 36 aus der Circle21h7-Familie erkennen.

Usage:
robot.vision.tag_detection(state)

Parameter

Beschreibung

state

Die Werte sind: True, wodurch die AprilTag-ID-Erkennung aktiviert wird, oder False, wodurch die AprilTag-ID-Erkennung deaktiviert wird.

robot.screen.set_font(PROP30)

# Cut off AprilTag ID detection after 5 seconds
while True:
    if timer.time(SECONDS) > 5:
        robot.vision.tag_detection(False)

    robot.screen.clear_screen()
    robot.screen.set_cursor(3, 1)
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        robot.screen.print("AprilTag ID detected!")
    else:
        robot.screen.print("Nothing detected!")

    wait(0.1, SECONDS)

Getter#

get_data#

get_data filtert Daten aus dem AI Vision Sensor-Frame zu einer einzelnen Signatur – einer gespeicherten Beschreibung von etwas, das der Sensor erkennen kann, wie z. B. ein vorab trainiertes Objekt, eine AprilTag-ID oder eine konfigurierte Farbsignatur oder ein Farbcode – und gibt ein Tupel zurück.

Farbsignaturen und Farbcodes müssen zuerst im AI Vision Utility konfiguriert werden, bevor sie mit dieser Methode verwendet werden können.

Das Tupel speichert Objekte, sortiert nach ihrer Breite von groß nach klein, beginnend bei Index 0. Auf die Eigenschaften jedes Objekts kann über seinen Index zugegriffen werden. Wird kein passendes Objekt gefunden, wird ein leeres Tupel zurückgegeben.

Usage:
robot.vision.get_data(signature, count)

Parameter

Beschreibung

signature

Filtert den Datensatz so, dass er nur Daten mit der angegebenen Signatur enthält. Verfügbare Signaturen:

  • ALL_VISION - Sportbälle, Fässer, VEX AIM Coding-Roboter, AprilTag-IDs, Farben und Farbcodes
  • ALL_CARGO - Sportbälle und Fässer
  • ALL_TAGS - Alle AprilTag-IDs
  • ALL_COLORS - Alle konfigurierten Farbsignaturen und Farbcodes
  • SPORTS_BALL - Nur Sportbälle
  • BLUE_BARREL - Nur blaue Fässer
  • ORANGE_BARREL - Nur orange Fässer
  • AIM_ROBOT - Alle VEX AIM Coding-Roboter
  • TAG0 bis TAG37 - Eine einzelne AprilTag-ID von 0 bis 37
  • NAME – Farbsignatur oder Farbcode, wobei NAME der in der AI Vision Utility konfigurierte Name ist.

count

Optional. Legt die maximale Anzahl der zurückzugebenden Objekte zwischen 1 und 24 fest (Standardwert: 8).

Hinweis: Die AprilTag-IDs 5 bis 37 können mithilfe der gedruckten AprilTag-IDs aus AIM Printables abgerufen werden.

# Move forward if a sports ball is detected
while True:
    ball = robot.vision.get_data(SPORTS_BALL)
    if ball[0].exists:
        robot.move_for(10, 0)
    wait(50, MSEC)

Note: The returned tuple can be sorted by any property, not just width, using Python’s sorted function. For example, sorting by AprilTag ID:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

Oder stattdessen nach Höhe sortieren:

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Daten anzeigen#

Die Ausgabe des von get_data zurückgegebenen Tupels zeigt eine Liste aller Eigenschaften aller erkannten Objekte an:

# Display properties of all detected AprilTag IDs
while True:
    vision_data = robot.vision.get_data(ALL_TAGS)

    if vision_data[0].exists:
        break

    wait(0.25, SECONDS)

print(vision_data)

Screenshot des Konsolenfensters mit der Debug-Ausgabe für erkannte AprilTag-IDs. Der Text listet „Objekt #0“ mit Feldern wie exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 und rotation: 0.0 auf, gefolgt von einer Trennlinie und dem Beginn von „Objekt #1“ mit exists: True, type: AprilTag ID, id: 4 und centerX: 122.

KI-Klassifizierungen#

Der AIM AI Vision Sensor kann folgende KI-Klassifizierungen erkennen:

Identifikationsnummer

KI-Klassifizierung

Unterschrift

0

Ball

SPORTS_BALL

1

Blaues Fass

BLUE_BARREL

2

Orange Barrel

ORANGE_BARREL

3

AIM-Roboter

AIM_ROBOT

Farbsignaturen#

Eine Farbsignatur ist eine eindeutige Farbe, die der KI-Vision-Sensor erkennen kann. Mithilfe dieser Signaturen kann der Sensor Objekte anhand ihrer Farbe erkennen und verfolgen. Sobald eine Farbsignatur konfiguriert ist, kann der Sensor Objekte mit dieser spezifischen Farbe in seinem Sichtfeld identifizieren. Farbsignaturen werden zusammen mit get_data verwendet, um farbige Objekte in Echtzeit zu verarbeiten und zu erkennen.

Das KI-Vision-Dienstprogramm zeigt einen angeschlossenen Bildsensor, der zwei farbige Objekte erkennt. Links wird ein Live-Kamerabild mit einem blauen Rahmen links und einem roten Rahmen rechts angezeigt, die jeweils von weißen Begrenzungsrahmen umgeben sind. Schwarze Beschriftungen zeigen deren Namen, Koordinaten und Abmessungen an. Rechts befinden sich die Einstellungen für die Farbsignatur mit Schiebereglern für Farbton und Sättigungsbereich für den roten und den blauen Rahmen. Schaltflächen zum Hinzufügen von Farben, zum Einfrieren des Videos, zum Kopieren und zum Speichern des Bildes befinden sich unten, zusammen mit einer Schaltfläche zum Schließen in der unteren rechten Ecke.

# Display if any objects match the Red_Box signature
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Signature
    ai_objects = robot.vision.get_data(Red_Box)
    if ai_objects[0].exists:
        robot.screen.print("Color signature detected!")

Farbcodes#

Ein Farbcode ist ein strukturiertes Muster aus zwei bis vier Farbtönen in einer bestimmten Reihenfolge. Mithilfe dieser Codes kann der KI-Vision-Sensor vordefinierte Farbmuster erkennen. Farbcodes eignen sich zur Identifizierung komplexer Objekte oder zur Erstellung eindeutiger Markierungen für die autonome Navigation.

Die Benutzeroberfläche des KI-Vision-Dienstprogramms zeigt einen angeschlossenen Bildsensor, der zwei benachbarte Objekte erkennt: einen blauen Kasten links und einen roten Kasten rechts. Diese sind in einem weißen Begrenzungsrahmen mit der Bezeichnung „BlauRot“ zusammengefasst. Die Erkennungsinformationen umfassen Winkel A: 11° , Koordinaten X: 143, Y: 103 , Breite W: 233 und Höhe H: 108 . Im rechten Bereich werden drei Farbsignaturen angezeigt: „Roter Kasten“, „Blauer Kasten“ und „BlauRot“ mit anpassbaren Farbton- und Sättigungsbereichen. Die Signatur „BlauRot“ kombiniert die Signaturen „Blauer Kasten“ und „Roter Kasten“. Unterhalb des Videobildes befinden sich die Schaltflächen „Video einfrieren , „Bild kopieren“, „Bild speichern“ und „Schließen“.

# Display if any objects match the BlueRed code
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Code
    ai_objects = robot.vision.get_data(BlueRed)
    if ai_objects[0].exists:
        robot.screen.print("Color code detected!")

has_sports_ball#

has_sports_ball gibt einen booleschen Wert zurück, der angibt, ob der Roboter aktuell einen Sportball besitzt.

  • True — Der Roboter hat einen Sportball.

  • False — Der Roboter hat keinen Sportball.

Usage:
robot.has_sports_ball()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Kick when the robot has a sports ball
while True:
    if robot.has_sports_ball():
        robot.kicker.kick(MEDIUM)

    wait(50, MSEC)

has_any_barrel#

has_any_barrel gibt einen booleschen Wert zurück, der angibt, ob der Roboter aktuell über irgendeine Art von Fass verfügt.

  • True — Der Roboter hat ein Fass.

  • False — Der Roboter hat keinen Lauf.

Usage:
robot.has_any_barrel()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Push a barrel away when detected
while True:
    if robot.has_any_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_blue_barrel#

has_blue_barrel gibt einen booleschen Wert zurück, der angibt, ob der Roboter aktuell einen blauen Lauf hat.

  • True — Der Roboter hat einen blauen Lauf.

  • False — Der Roboter hat keinen blauen Lauf.

Usage:
robot.has_blue_barrel()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Push a blue barrel away when detected
while True:
    if robot.has_blue_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_orange_barrel#

has_orange_barrel gibt einen booleschen Wert zurück, der angibt, ob der Roboter aktuell ein oranges Fass besitzt.

  • True — Der Roboter hat ein orangefarbenes Fass.

  • False — Der Roboter hat kein oranges Fass.

Usage:
robot.has_orange_barrel()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Push an orange barrel away when detected
while True:
    if robot.has_orange_barrel():
        robot.kicker.place()

    wait(50, MSEC)

Eigenschaften#

Es gibt zwölf Eigenschaften, die zu jedem Objekt gehören, das nach der Verwendung der Methode robot.vision.get_data in einem Tupel gespeichert wird.

All property values except .id, .score, and .type describe the detected object’s position, size, orientation, or bearing at the moment robot.vision.get_data was used. These values are measured in pixels or degrees, based on the sensor’s 320 by 240 pixel resolution.

Ein blaues Fass mit einem orangefarbenen Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Die x- und y-Achse sind oben von links nach rechts mit 0 bis 320 und links von oben nach unten mit 0 bis 240 beschriftet.

.exists#

.exists gibt einen booleschen Wert zurück, der angibt, ob der Index im Tupel existiert oder nicht.

  • True — Der Index existiert.

  • False — Der Index existiert nicht.

# Check if at least two objects are detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    ai_objects = robot.vision.get_data(ALL_CARGO)

    if ai_objects[0].exists:
        if ai_objects[1].exists:
            robot.screen.print("At least 2")
        else:
            robot.screen.print("Less than 2")
    wait(0.1, SECONDS)

.width#

.width gibt die Breite des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 1 und 320.

Hinweis: Die Pixelwerte beziehen sich auf das Koordinatensystem des Sensors. Siehe dazu das Diagramm in der Einleitung.

Ein blaues Fass mit orangefarbenem Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Zwei vertikale rote gestrichelte Linien verlaufen vom oberen Bildrand bis zum linken und rechten Rand des Rahmens. Ein schwarzer Doppelpfeil zwischen diesen Linien gibt die Breite an.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].width < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.height#

.height gibt die Höhe des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 1 und 240.

Hinweis: Die Pixelwerte beziehen sich auf das Koordinatensystem des Sensors. Siehe dazu das Diagramm in der Einleitung.

Ein blaues Fass mit orangefarbenem Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Zwei horizontale rote gestrichelte Linien verlaufen von der linken Seite des Bildes bis zum oberen und unteren Rand des Rahmens. Ein schwarzer Doppelpfeil zwischen diesen Linien zeigt die Höhenangabe an.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].height < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.centerX#

.centerX gibt die x-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 320.

Hinweis: Die Pixelwerte beziehen sich auf das Koordinatensystem des Sensors. Siehe dazu das Diagramm in der Einleitung.

Ein blaues Fass mit einem orangefarbenen Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Eine vertikale rote gestrichelte Linie verläuft vom oberen Bildrand bis zur Mitte des Rahmens und markiert die X-Koordinate des Mittelpunkts.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)

while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if 140 < barrel[0].centerX < 180:
            robot.stop_all_movement()

    wait(10,MSEC)

.centerY#

.centerY gibt die y-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 240.

Hinweis: Die Pixelwerte beziehen sich auf das Koordinatensystem des Sensors. Siehe dazu das Diagramm in der Einleitung.

Ein blaues Fass mit einem orangefarbenen Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Eine horizontale rote gestrichelte Linie verläuft von der linken Seite des Bildes zur Mitte des Rahmens und markiert die Y-Koordinate der Mitte.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].centerY < 140:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.bearing#

.bearing gibt einen Dezimalwert (float) zurück, der die Entfernung eines Objekts links oder rechts vom Zentrum des Sichtfelds des KI-Vision-Sensors in Grad angibt. Ein Wert von 0 bedeutet, dass sich das Objekt im Zentrum befindet, positive Werte bedeuten, dass es sich rechts befindet, und negative Werte bedeuten, dass es sich links befindet.

Draufsicht auf einen VEX AIM Coding Robot, der in einer kreisförmigen Basis zentriert ist, mit einer vertikalen Referenzlinie und einer roten Linie, die in Richtung eines Sportballs auf der linken Seite abgewinkelt ist und mit -30 Grad beschriftet ist. Draufsicht auf einen VEX AIM Coding Robot, der in einer kreisförmigen Basis zentriert ist, mit einer vertikalen Referenzlinie und einer roten Linie, die in Richtung eines Sportballs auf der rechten Seite abgewinkelt ist und mit 30 Grad beschriftet ist.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
    vision_data = robot.vision.get_data(BLUE_BARREL)

    if vision_data[0].exists:

        if vision_data[0].bearing > 5:
            robot.turn(RIGHT)
        elif vision_data[0].bearing < -5:
            robot.turn(LEFT)
        else:
            robot.stop_all_movement()

    else:
        robot.stop_all_movement()

    wait(0.1, SECONDS)

.rotation#

.rotation gibt die Ausrichtung des Objekts auf der Sichtebene des KI-Vision-Sensors in Grad (0 bis 359) zurück. Ein Farbcode entspricht 0°, wenn die Farben horizontal angeordnet sind (z. B. Rot–Blau). Bei einer Drehung der Farben ändert sich der Winkel (z. B. ergibt die Anordnung Blau–Rot 180°).

Im folgenden Beispiel wurde der Farbcode so konfiguriert, dass links Rot und rechts Blau dargestellt ist.

In diesem Bild entspricht das Übereinanderlegen von Blau und Rot einer Drehung des ursprünglichen Farbcodes um 270 Grad nach rechts.

Eine Kameraschnittstelle zeigt ein vertikal gestapeltes Objekt mit einer blauen oberen und einer roten unteren Hälfte, zentriert im Bildausschnitt. Unter dem Objekt befindet sich die Beschriftung „Rot_Blau A:270° CX:185 CY:81 W:93 H:150“, die den Namen des Objekts, den Drehwinkel, die X- und Y-Koordinaten des Mittelpunkts, die Breite und die Höhe angibt. Gitternetzlinien und numerische Achsen markieren die Bildabmessungen, wobei der X-Wert zwischen 0 und 320 und der Y-Wert zwischen 0 und 240 liegt.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
    # Original Color Code is Red to the left, Blue to the right
    code = robot.vision.get_data(BlueRed)

    if code[0].exists:
        # Check if Color Code is now Red on top of Blue
        if 50 < code[0].rotation < 100 :
            robot.move_at(90)

        # Check if Color Code is now Blue on top of Red
        elif 270 < code[0].rotation < 330 :
            robot.move_at(270)

        else:
            robot.stop_all_movement()
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.originX#

.originX gibt die x-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 320.

Hinweis: Die Pixelwerte beziehen sich auf das Koordinatensystem des Sensors. Siehe dazu das Diagramm in der Einleitung.

Ein blaues Fass mit einem orangefarbenen Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Eine vertikale rote gestrichelte Linie verläuft vom oberen Bildrand bis zum linken Rand des Rahmens und markiert die X-Koordinate des Ursprungs des Rahmens.

# Display if an Orange Barrel is to the
# left or the right
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1,1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originX < 160:
            robot.screen.print("To the left!")
        else:
            robot.screen.print("To the right!")

    wait(50, MSEC)

.originY#

.originY gibt die y-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 240.

Hinweis: Die Pixelwerte beziehen sich auf das Koordinatensystem des Sensors. Siehe dazu das Diagramm in der Einleitung.

Ein blaues Fass mit einem orangefarbenen Streifen ist mittig im Bild platziert und von einem schwarzen Rahmen umgeben. Eine horizontale rote gestrichelte Linie verläuft von der linken Seite des Bildes bis zur oberen Kante des Rahmens und markiert die Y-Koordinate des Ursprungs des Rahmens.

# Display if an Orange Barrel is close or far
# from the robot
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originY < 80:
            robot.screen.print("Far")
        else:
            robot.screen.print("Close")

    wait(50, MSEC)

.id#

.id gibt die ID der erkannten KI-Klassifizierung oder AprilTag-ID als ganze Zahl zurück.

Bei einer AprilTag-ID repräsentiert die Eigenschaft .id die erkannte AprilTag-ID-Nummer im Bereich von 0 bis 37. Bei einer KI-Klassifizierung entspricht die Eigenschaft .id der vordefinierten ID im Abschnitt KI-Klassifizierungen.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.score#

.score gibt den Konfidenzwert der erkannten KI-Klassifizierung als ganze Zahl zwischen 1 und 100 zurück.

Ein niedrigerer Wert bedeutet, dass der Sensor weniger sicher ist, welches Objekt erkannt wurde, während ein höherer Wert bedeutet, dass der Sensor sicherer ist.

# Look confident if an Orange Barrel is detected
while True:
    barrel = robot.vision.get_data(ORANGE_BARREL)

    if barrel[0].exists:
        if barrel[0].score > 95:
            robot.screen.show_emoji(CONFIDENT)
        else:
            robot.screen.hide_emoji()

    wait(50, MSEC)

.type#

.type gibt eine Ganzzahl zurück, die den Typ des erkannten Objekts angibt. Sie können diesen Wert entweder mit der Typnummer oder der entsprechenden benannten Konstante vergleichen:

Objekttyp

Eingeschlossene Objekte

AiVision.AI_OBJECT

— Sportbälle
— Blaue Fässer
— Orange Fässer

AiVision.TAG_OBJECT

— AprilTag-IDs

AiVision.COLOR_OBJECT

— Farbsignaturen

AiVision.CODE_OBJECT

— Farbcodes

# Display if an AprilTag ID or AI Classification
# is detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)
    if vision_data[0].exists:
        if vision_data[0].type == AiVision.AI_OBJECT:
            robot.screen.print("AI Object!")
        elif vision_data[0].type == AiVision.TAG_OBJECT:
            robot.screen.print("AprilTag ID!")
    wait(0.1, SECONDS)

# Display a list of all detected objects
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)

    if vision_data[0].exists:
        for obj in vision_data:
            if obj.type == AiVision.AI_OBJECT:
                robot.screen.print("- AI Object")
            elif obj.type == AiVision.TAG_OBJECT:
                robot.screen.print("- AprilTag ID")
            robot.screen.next_row()

    wait(0.1, SECONDS)

Konstruktoren#

Creating a Color Signature#

Eine neue Farbsignatur wird mithilfe des Konstruktors Colordesc erstellt und anschließend mit der Methode Colordesc beim KI-Vision-Sensor registriert. Ein color_description Objekt definiert eine von bis zu sieben erkennbaren Farbsignaturen für den Sensor, muss aber explizit mit color_description um wirksam zu werden.

Colordesc-Nutzung:
Colordesc(index, red, green, blue, hangle, hdsat)

Parameter

Beschreibung

index

Eine ganze Zahl von 1 bis 7, die den Index der Farbsignatur darstellt. Wenn zwei Farbsignaturen denselben Index verwenden, überschreibt die zweite die erste.

red

Eine ganze Zahl von 0 bis 255 für die Rotkomponente der Farbe.

green

Eine ganze Zahl von 0 bis 255 für die Grünkomponente der Farbe.

blue

Eine ganze Zahl von 0 bis 255 für die blaue Farbkomponente.

hangle

Ein Gleitkommawert von 1 bis 40, der den Farbtonbereich in Grad angibt.

hdsat

Eine Gleitkommazahl von 0,10 bis 1,00, die den Sättigungsbereich darstellt.

Farbbeschreibung Verwendung:
robot.vision.color_description(object)

Parameter

Beschreibung

object

Das Objekt Colordesc , das als erkennbare Farbsignatur festgelegt werden soll.

# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    red_boxes = robot.vision.get_data(red_box)

    if red_boxes[0].exists:
        robot.screen.print("Red detected!")
    else:
        robot.screen.print("No red detected.")

    wait(0.2, SECONDS)

Creating a Color Code#

Ein neuer Farbcode wird mithilfe des Konstruktors Codedesc erstellt und anschließend mit der Methode code_description aktiviert. Ein Farbcode gruppiert 2 bis 4 vorhandene Colordesc Objekte zu einer einzigen Kennung, die der KI-Vision-Sensor als Sequenz erkennen kann. Er muss jedoch explizit mit code_description festgelegt werden, um wirksam zu werden.

Codedesc-Nutzung:
Codedesc(index, c1, c2, c3, c4, c5)

Parameter

Beschreibung

index

Der Index des Farbcodes, von 1 bis 8. Hinweis: Wenn Sie zwei Codedesc Objekte mit demselben Index erstellen, überschreibt das zweite das erste.

c1

Das erste Colordesc Objekt im Code.

c2

Das zweite Colordesc Objekt im Code.

c3

Optional. Ein drittes Colordesc Objekt.

c4

Optional. Ein viertes Colordesc Objekt.

Codebeschreibung Verwendung:
robot.vision.code_description(object)

Parameter

Beschreibung

object

Ein Codedesc Objekt, das als erkennbarer Farbcode registriert werden soll.

# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)

robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)

# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    code_objects = robot.vision.get_data(red_purple)

    if code_objects[0].exists:
        robot.screen.print("Code detected!")
    else:
        robot.screen.print("No code detected.")

    wait(0.2, SECONDS)