AI-synsensor#

Introduktion#

IQ AI-visionssensorn kan upptäcka och spåra objekt, färger och AprilTag-ID:n. Detta gör att roboten kan analysera sin omgivning, följa objekt och reagera baserat på detekterad visuell data.

För exemplen nedan kommer den konfigurerade IQ AI Vision Sensorn att namnges ai_vision_1, och de konfigurerade Color Signature-objekten, såsom RED_BOX, kommer att användas i alla efterföljande exempel i denna API-dokumentation när det refereras till AiVision -klassmetoder.

Nedan följer en lista över alla metoder:

Getters — Hämta data från IQ AI-visionssensorn.

  • take_snapshot — Samlar in data för en specifik signatur.

  • installed — Om IQ AI-visionssensorn är ansluten till IQ (2:a generationen) hjärnan.

Egenskaper — Objektdata returnerad från take_snapshot.

  • .exists — Om objektet finns i den aktuella detekteringen.

  • .width — Width of the detected object.

  • .height — Height of the detected object.

  • .centerX — X position of the object’s center.

  • .centerY — Y position of the object’s center.

  • .angle — Orientering för färgkod eller AprilTag-ID.

  • .originX — X position of the object’s top-left corner.

  • .originY — Y position of the object’s top-left corner.

  • .id — Classification or tag ID of the object.

  • .score — Konfidenspoäng för AI-klassificeringar.

Konstruktörer — Initiera och konfigurera sensorerna manuellt.

Getters#

take_snapshot#

take_snapshot filtrerar data från IQ AI Vision Sensorns bildruta till en enda signatur – en sparad beskrivning av något som sensorn kan känna igen, till exempel ett förtränat objekt, ett AprilTag-ID eller en konfigurerad färgsignatur eller färgkod – och returnerar en tupel.

Färgsignaturer och Färgkoder måste först konfigureras i Vision Utility innan de kan användas med den här metoden.

Tupeln lagrar objekt sorterade från störst till minst efter bredd, med början vid index 0. Varje objekts egenskaper kan nås med hjälp av dess index. En tom tupel returneras om inga matchande objekt upptäcks.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametrar

Beskrivning

SIGNATURE

Filtrerar datamängden för att endast inkludera data från den givna signaturen. Tillgängliga signaturer är:

  • Färgsignaturer eller färgkoder - Namnet på IQ AI Vision-sensorn, två understreck och sedan färgsignaturens eller färgkodens namn. Till exempel: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Alla detekterade AI-klassificeringar beroende på modellen som konfigurerats i AI Vision Utility.
  • AiVision.ALL_TAGS - Alla AprilTag-ID:n.

count

Valfritt. Anger det maximala antalet objekt som kan returneras från 1 till 24 (standard: 8).

# Move forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

Obs! Den returnerade tupeln kan sorteras efter valfri egenskap, inte bara bredd, med hjälp av Pythons sorted funktion. Till exempel, sortering efter AprilTag ID:

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

Eller sortera efter höjd istället:

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

AI-klassificeringar#

IQ AI-visionssensorn kan upptäcka olika objekt under vissa AI-klassificeringar. Beroende på vilken AI-klassificeringsmodell som valts när AI-visionssensorn konfigurerades i fönstret Enheter kommer olika objekt att upptäckas. De för närvarande tillgängliga modellerna är:

Klassrumsföremål

ID-nummer

AI-klassificering

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

VEX IQ Robotics-tävling Mix & Match

ID-nummer

AI-klassificering

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

VEX IQ Robotics-tävling – Nivå upp

ID-nummer

AI-klassificering

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

Färgsignaturer#

En färgsignatur är en unik färg som IQ AI Vision Sensor kan känna igen. Dessa signaturer gör det möjligt för IQ AI Vision Sensor att upptäcka och spåra objekt baserat på deras färg. När en färgsignatur har konfigurerats kan sensorn identifiera objekt med den specifika färgen i sitt synfält. Färgsignaturer används med take_snapshot för att bearbeta och upptäcka färgade objekt i realtid.

För att kunna använda en konfigurerad färgsignatur i ett projekt måste dess namn vara sensorns namn, två understreck och sedan färgsignaturens namn. Till exempel: ai_vision_1__RED_BOX.

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color detected!")
        wait(100, MSEC)

Färgkoder#

En färgkod är ett strukturerat mönster som består av färgsignaturer arrangerade i en specifik ordning. Dessa koder gör det möjligt för IQ AI Vision Sensor att känna igen fördefinierade färgmönster. Färgkoder är användbara för att identifiera komplexa objekt eller skapa unika markörer för autonom navigering.

För att kunna använda en konfigurerad färgkod i ett projekt måste dess namn vara sensorns namn, två understreck och sedan färgkodens namn. Till exempel: ai_vision_1__BOX_CODE.

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)

installed#

installed returnerar ett booleskt värde som anger om IQ AI-visionssensorn för närvarande är ansluten till IQ (2:a generationen) hjärnan.

  • True — IQ AI-synsensorn är ansluten till IQ-hjärnan (2:a generationen).

  • False — IQ AI-synsensorn är inte ansluten till IQ-hjärnan (2:a generationen).

Usage:
ai_vision_1.installed()

Parametrar

Beskrivning

Den här metoden har inga parametrar.

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

Fastigheter#

Det finns tio egenskaper som ingår i varje objekt som lagras i en tupel efter att take_snapshot har använts.

Alla egenskapsvärden utom .id och .score beskriver det detekterade objektets position och storlek i IQ AI Vision Sensors vy vid det ögonblick take_snapshot användes. Dessa värden mäts i pixlar, baserat på sensorns upplösning på 320 x 240 pixlar.

.exists#

.exists returnerar ett booleskt värde som anger om indexet finns i tupeln eller inte.

  • True — Indexet finns.

  • False — Indexet finns inte.

# Check if at least two objects are detected
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[1].exists:
            brain.screen.print("At least 2")

        else:
            brain.screen.print("Less than 2")
    wait(50, MSEC)

.width#

.width returnerar bredden på det detekterade objektet i pixlar, vilket är ett heltal mellan 1 och 320.

# Approach an object until it's at least 100 pixels wide
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].width < 100:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.height#

.height returnerar höjden på det detekterade objektet i pixlar, vilket är ett heltal mellan 1 och 240.

# Approach an object until it's at least 90 pixels tall
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].height < 90:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.centerX#

.centerX returnerar x-koordinaten för det detekterade objektets centrum i pixlar, vilket är ett heltal mellan 0 och 320.

# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if 140 < objects[0].centerX < 180:
            drivetrain.stop()
    wait(10,MSEC)

.centerY#

.centerY returnerar y-koordinaten för det detekterade objektets centrum i pixlar, vilket är ett heltal mellan 0 och 240.

# Approach an object until the object's center is
# high enough in the field of view
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].centerY < 150:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.angle#

.angle returnerar orienteringen för den detekterade färgkoden eller AprilTag-ID:t i grader, vilket är ett heltal mellan 0 och 359.

# Turn left or right depending on how a
# configured Color Code is rotated
while True:
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)

    if box_code[0].exists:
        if 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)

        elif 270 < box_code[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 i pixlar, vilket är ett heltal mellan 0 och 320.

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

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if 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 returnerar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar, vilket är ett heltal mellan 0 och 240.

# Display if an object is close or far
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originY < 110:
            brain.screen.print("Close")
        else:
            brain.screen.print("Far")

.id#

.id returnerar ID:t för den detekterade AI-klassificeringen eller AprilTag-ID:t som ett heltal. AI-klassificeringar beror på vilken modell som är konfigurerad i AI Vision Utility.

För ett AprilTag-ID representerar egenskapen .id det detekterade AprilTag-ID-numret i intervallet 0 till 36. För en AI-klassificering motsvarar egenskapen .id det fördefinierade ID:t i avsnittet AI-klassificeringar.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.score#

.score returnerar konfidenspoängen för den detekterade AI-klassificeringen som ett heltal 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.

# Display if a score is confident
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    if objects[0].exists:
        if objects[0].score > 95:
            brain.screen.print("Confident")
    else:
        brain.screen.print("Not confident")

    wait(50, MSEC)

Konstruktörer#

Konstruktorer används för att manuellt skapa AiVision, Colordescoch Codedesc objekt, vilka är nödvändiga för att konfigurera IQ AI Vision Sensor utanför VEXcode.

AI Vision Sensor#

AiVision skapar en IQ AI-visionssensor.

Användande

Vision(port, sigs)

Parametrar

Beskrivning

port

Vilken Smart Port IQ AI Vision Sensor är ansluten till, från 1 till 12.

sigs

Valfritt. Namnet på en eller flera signaturer:

  • Färgsignatur
  • Färgkod
  • AiVision.ALL_TAGS – Alla AprilTag-ID:
  • AiVision.ALL_AIOBJS – Alla AI-klassificeringar

Exempel

ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)

# Move forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

Color Signature#

Colordesc skapar en färgsignatur. Upp till sju olika färgsignaturer kan lagras på en IQ AI Vision Sensor samtidigt.

Användande:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Parameter

Beskrivning

index

Indexet för Colordesc objektet, från 1–7. Obs! Om du skapar två Colordesc -objekt med samma indexnummer kommer det andra skapade objektet att åsidosätta det första.

uMin

Värdet från uMin i Vision Utility.

uMax

Värdet från uMax i Vision Utility.

uMean

Värdet från uMean i Vision Utility.

vMin

Värdet från vMin i Vision Utility.

vMax

Värdet från vMax i Vision Utility.

vMean

Värdet från vMean i Vision Utility.

rgb

Värdet från rgb i Vision Utility.

type

Värdet från type i Vision Utility.

För att hämta värdena för att skapa en färgsignatur, gå till Vision Utility. När en färgsignatur har konfigurerats, kopiera parametervärdena från konfigurationsfönstret.

Exempel

# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = ai_vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Codedesc skapar en färgkod. Den kräver minst två redan definierade färgsignaturer för att kunna användas. Upp till åtta olika färgkoder kan lagras på en visionssensor samtidigt.

Användande:

Codedesc(sig1, sig2, sig3, sig4, sig5)

Parameter

Beskrivning

sig1

En tidigare skapad Färgsignatur.

sig2

En tidigare skapad Färgsignatur.

sig3

Valfritt. En tidigare skapad Färgsignatur.

sig4

Valfritt. En tidigare skapad Färgsignatur.

sig5

Valfritt. En tidigare skapad Färgsignatur.

Exempel

# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)