AI-visie#

Invoering#

De AI-visiesensor kan objecten, kleuren en AprilTag-ID’s detecteren en volgen. Hierdoor kan de robot zijn omgeving analyseren, objecten volgen en reageren op basis van de gedetecteerde visuele gegevens.

Op deze pagina worden ai_vision_1, RED_BOXen BOX_CODE gebruikt als voorbeeldnamen voor respectievelijk de AI Vision Sensor, de kleursignatuur en de kleurcode. Vervang deze door uw eigen geconfigureerde namen.

Hieronder vindt u een lijst met alle methoden:

Getters – Gegevens ophalen van de AI-visiesensor.

  • take_snapshot – Legt gegevens vast voor een specifieke signatuur.

  • installed – Of de AI Vision Sensor is verbonden met de V5 Brain.

Eigenschappen – Objectgegevens geretourneerd door take_snapshot.

  • .exists – Of het object bestaat in de huidige detectie.

  • .width – Breedte van het gedetecteerde object.

  • .height – Hoogte van het gedetecteerde object.

  • .centerX – X-positie van het middelpunt van het object.

  • .centerY – Y-positie van het middelpunt van het object.

  • .angle – Oriëntatie van de kleurcode.

  • .originX – X-positie van de linkerbovenhoek van het object.

  • .originY – Y-positie van de linkerbovenhoek van het object.

  • .id – Classificatie of tag-ID van het object.

  • .score – Vertrouwensscore voor AI-classificaties.

Constructors – Initialiseer en configureer handmatig de AI Vision Sensor en de bijbehorende signaturen.

  • AiVision – Creëert een AI-visiesensor.

  • Colordesc – Creëert een kleursignatuur.

  • Codedesc – Maakt een kleurcode aan.

  • Tagdesc – Maakt een AprilTag ID aan.

Getters#

take_snapshot#

take_snapshot filtert gegevens uit het frame van de AI Vision Sensor tot één enkele signatuur — een opgeslagen beschrijving van iets dat de sensor kan herkennen, zoals een vooraf getraind object, een AprilTag ID of een geconfigureerde kleursignatuur of kleurcode — en retourneert een tuple.

Kleursignaturen en Kleurcodes moeten eerst in het Vision Utility worden geconfigureerd voordat ze met deze methode kunnen worden gebruikt.

De tuple slaat objecten op, gesorteerd van groot naar klein op basis van breedte, beginnend bij index 0. De eigenschappen van elk object kunnen worden benaderd via de index. Er wordt een lege tuple geretourneerd als er geen overeenkomende objecten worden gevonden.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parameters

Beschrijving

SIGNATURE

Filtert de dataset zodat alleen gegevens met de opgegeven signatuur worden opgenomen. Beschikbare signaturen zijn:

  • Kleursignaturen of kleurcodes - De naam van de AI Vision Sensor, twee underscores en vervolgens de naam van de kleursignatuur of kleurcode. Bijvoorbeeld: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Kubussen, ringen en ballen.
  • AiVision.ALL_TAGS - Alle AprilTag ID’s.

count

Optioneel. Hiermee stelt u het maximale aantal objecten in dat kan worden geretourneerd, van 1 tot 24. De standaardwaarde is 8.

# Drive 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)

Opmerking: De geretourneerde tuple kan worden gesorteerd op elke eigenschap, niet alleen op breedte, met behulp van de Python-functie sorted Bijvoorbeeld, sorteren op 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)

Of sorteren op hoogte:

# 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-classificaties#

De AI Vision Sensor kan verschillende objecten detecteren op basis van bepaalde AI-classificaties. Afhankelijk van het AI-classificatiemodel dat is geselecteerd bij het configureren van de AI Vision Sensor in het venster Apparaten, worden verschillende objecten gedetecteerd. De momenteel beschikbare modellen zijn:

Lesmateriaal

ID-nummer

AI-classificatie

0

BLUE_BALL

1

GREEN_BALL

2

RED_BALL

3

BLUE_RING

4

GREEN_RING

5

RED_RING

6

BLUE_CUBE

7

GREEN_CUBE

8

RED_CUBE

VEX V5 Robotica Competitie met hoge inzet

ID-nummer

AI-classificatie

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

VEX V5 Robotics Competition Push Back

ID-nummer

AI-classificatie

0

BLUE_BLOCK

1

RED_BLOCK

VEX V5 Robotics Competition Override

ID-nummer

AI-classificatie

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Kleursignaturen#

Een kleursignatuur is een unieke kleur die de AI-visiesensor kan herkennen. Deze signaturen stellen de AI-visiesensor in staat objecten te detecteren en te volgen op basis van hun kleur. Zodra een kleursignatuur is geconfigureerd, kan de sensor objecten met die specifieke kleur in zijn gezichtsveld identificeren. Kleursignaturen worden gebruikt met take_snapshot om gekleurde objecten in realtime te verwerken en te detecteren.

Om een ​​geconfigureerde kleursignatuur in een project te gebruiken, moet de naam ervan de naam van de sensor zijn, gevolgd door twee underscores en vervolgens de naam van de kleursignatuur. Bijvoorbeeld: 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)

Kleurcodes#

Een kleurcode is een gestructureerd patroon dat bestaat uit kleursignaturen die in een specifieke volgorde zijn gerangschikt. Deze codes stellen de AI-beeldsensor in staat om vooraf gedefinieerde kleurpatronen te herkennen. Kleurcodes zijn nuttig voor het identificeren van complexe objecten of het creëren van unieke markeringen voor autonome navigatie.

Om een ​​geconfigureerde kleurcode in een project te gebruiken, moet de naam ervan de naam van de sensor zijn, gevolgd door twee underscores en vervolgens de naam van de kleurcode. Bijvoorbeeld: 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 retourneert een Booleaanse waarde die aangeeft of de AI Vision Sensor momenteel is verbonden met de V5 Brain.

  • True – De AI-visiesensor is verbonden met de V5-hersenen.

  • False – De AI-visiesensor is niet verbonden met de V5-hersenen.

Usage:
ai_vision_1.installed()

Parameters

Beschrijving

Deze methode heeft geen parameters.

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

Eigenschappen#

Er zijn tien eigenschappen die bij elk object worden meegeleverd dat is opgeslagen in een tuple nadat take_snapshot is gebruikt.

Alle eigenschapswaarden, behalve .id en .score beschrijven de positie en grootte van het gedetecteerde object in het gezichtsveld van de AI Vision Sensor op het moment dat take_snapshot werd gebruikt. Deze waarden worden gemeten in pixels, gebaseerd op de resolutie van de sensor van 320 bij 240 pixels.

.exists#

.exists retourneert een Booleaanse waarde die aangeeft of de index in de tuple voorkomt of niet.

  • True – De index bestaat.

  • False – De index bestaat niet.

# 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 retourneert de breedte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 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 retourneert de hoogte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 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 retourneert de x-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 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 retourneert de y-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 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 retourneert de oriëntatie van de gedetecteerde kleurcode of AprilTag ID in graden, wat een geheel getal is tussen 0 en 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 retourneert de x-coördinaat van de linkerbovenhoek van de begrenzingsbox van het gedetecteerde object in pixels, wat een geheel getal tussen 0 en 320 is.

# 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 retourneert de y-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object in pixels, wat een geheel getal tussen 0 en 240 is.

# 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 retourneert de ID van de gedetecteerde AI-classificatie of AprilTag-ID als een geheel getal.

Voor een AprilTag ID vertegenwoordigt de eigenschap .id het gedetecteerde AprilTag ID-nummer in het bereik van 0 tot 36. Voor een AI-classificatie komt de eigenschap .id overeen met de vooraf gedefinieerde ID in de sectie AI-classificaties.

# 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 retourneert de betrouwbaarheidsscore van de gedetecteerde AI-classificatie als een geheel getal tussen 1 en 100.

Een lagere score betekent dat de sensor minder zeker is van het gedetecteerde object, terwijl een hogere score betekent dat de sensor meer zeker is.

Constructeurs#

Constructors worden gebruikt om handmatig AiVision, Colordescen Codedesc objecten te creëren, die nodig zijn voor het configureren van de AI Vision Sensor buiten VEXcode.

AiVision#

AiVision creëert een AI-visiesensor.

Gebruik

Vision(smartport, sigs)

Parameters

Beschrijving

smartport

De slimme poort waarop de AI-visiesensor is aangesloten, wordt weergegeven als Ports.PORTx , waarbij x het poortnummer is.

sigs

Optioneel. De naam van een of meer handtekeningen, gescheiden door komma’s (,):

# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)

# Create the Color Code
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)

"""
Create an AI Vision Sensor with the following signatures:
- RED_BLUE
- AiVision.ALL_TAGS - for AprilTag IDs
"""
ai_vision_1 = AiVision(Ports.PORT1, RED_BLUE, AiVision.ALL_TAGS)

Colordesc#

Colordesc creëert een kleursignatuur. Er kunnen maximaal zeven verschillende kleursignaturen tegelijk op een AI-visiesensor worden opgeslagen.

Usage:
Colordesc(index, red, green, blue, hangle, hdsat)

Parameter

Beschrijving

index

De index van het Colordesc object, van 1 tot 7.
Opmerking: Het aanmaken van twee Colordesc objecten met hetzelfde indexnummer zorgt ervoor dat het tweede object het eerste overschrijft.

red

De rode waarde van de kleur ligt tussen 0 en 255.

green

De groene waarde van de kleur ligt tussen 0 en 255.

blue

De blauwe waarde van de kleur ligt tussen 0 en 255.

hangle

De toegestane kleurvariatie wordt uitgedrukt in graden op de kleurencirkel (1-40). Hogere waarden staan ​​een grotere rotatieafwijking van de basiskleur toe.

hdsat

De toegestane verzadigingsafwijking, van 0,10 tot 1,00. Deze waarde vertegenwoordigt het deel van het volledige verzadigingsbereik waarbinnen de kleur mag verschuiven (bijv. 0,10 = ±10% verzadiging).

Een cirkelvormig kleurenwiel dat een volledig spectrum aan tinten weergeeft, gelabeld met gradenwaarden rond de omtrek, oplopend in stappen van 30 graden van 0° bovenaan tot 360°.

"""
Create a Color Signature with the following values:
- index: 1
- red: 255
- green: 0
- blue: 0
- hangle: 20
- hdsat: 0.9
"""
# Create a red Color Signature
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)

Codedesc#

Codedesc creëert een kleurcode. Deze vereist ten minste twee reeds gedefinieerde kleursignaturen om te kunnen worden gebruikt. Er kunnen maximaal acht verschillende kleurcodes tegelijk op een visionsensor worden opgeslagen.

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

Parameter

Beschrijving

sig1

Een eerder aangemaakte Kleursignatuur.

sig2

Een eerder aangemaakte Kleursignatuur.

sig3

Optioneel. Een eerder aangemaakte Kleursignatuur.

sig4

Optioneel. Een eerder aangemaakte Kleursignatuur.

sig5

Optioneel. Een eerder aangemaakte Kleursignatuur.

# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)

# Create a Color Code with the Color Signatures
BOX_CODE = Codedesc(RED_BOX, BLUE_BOX)

Tagdesc#

Tagdesc creëert een AprilTag ID. Je kunt deze gebruiken om identificeerbare AprilTag ID’s te definiëren, waardoor je code overzichtelijker en beter leesbaar wordt.

Usage:
Tagdesc(id)

Parameter

Beschrijving

id

De te gebruiken AprilTag ID.

# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)