AI-visie#

Invoering#

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

De AI-visiesensor heeft een resolutie van 320×240 pixels. Het nulpunt (0, 0) bevindt zich in de linkerbovenhoek, waardoor het midden van de sensor op (160, 120) ligt, zoals weergegeven in het onderstaande diagram:

Een diagram dat de resolutie van de AIM AI Vision Sensor weergeeft, met de coördinaat 0, 0 linksboven in het diagram, 320, 0 rechtsboven en 0, 240 linksonder, met 160, 120 precies in het midden.

Hieronder vindt u een lijst van alle methoden en eigenschappen:

Acties — De AI Vision-camerabeelden weergeven of verbergen.

Getters — Detecteren of de robot een object vasthoudt.

  • get_data — Retourneert een tuple van gedetecteerde objecten voor een specifieke signatuur.

  • has_sports_ball — Geeft aan of de robot een sportbal heeft.

  • has_any_barrel — Geeft aan of de robot een vat van welk type dan ook heeft.

  • has_blue_barrel — Geeft aan of de robot een blauw vat heeft.

  • has_orange_barrel — Geeft aan of de robot een oranje vat heeft.

Eigenschappen — Objectgegevens geretourneerd door get_data.

  • exists — Geeft aan of het object in de huidige detectie bestaat, als een Booleaanse waarde.

  • 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.

  • bearing — Horizontale hoek ten opzichte van de voorkant van de robot.

  • rotation — Oriëntatie van het object.

  • 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.

  • type — Retourneert het type van het object (AI, Tag, Kleur of Code).

Constructors — Definieer kleursignaturen en -codes.

Acties#

show_aivision#

show_aivision geeft de live datafeed van de AI Vision Sensor weer op het scherm van de robot. De live datafeed bedekt alle andere afbeeldingen of tekst op het scherm.

Opmerking: Het scherm zal geen andere afbeeldingen of tekst weergeven, tenzij hide_aivision wordt gebruikt om de feed te verbergen.

Usage:
robot.screen.show_aivision()

Parameters

Beschrijving

Deze methode heeft geen parameters.

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

hide_aivision#

hide_aivision verwijdert de live datafeed van de AI Vision Sensor van het scherm van de robot.

Usage:
robot.screen.hide_aivision()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 schakelt de AprilTag ID-detectie in of uit, waarbij de status een Booleaanse waarde is.

De sensor kan AprilTag ID’s 0 tot en met 36 uit de Circle21h7-familie detecteren.

Usage:
robot.vision.tag_detection(state)

Parameters

Beschrijving

state

De waarden zijn: True, waarmee AprilTag ID-detectie wordt ingeschakeld, of False, waarmee AprilTag ID-detectie wordt uitgeschakeld.

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)

Getters#

get_data#

get_data filtert gegevens uit het frame van de AI Vision Sensor naar een 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 de AI Vision Utility worden geconfigureerd voordat ze met deze methode kunnen worden gebruikt.

De tuple slaat objecten op, geordend 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:
robot.vision.get_data(signature, count)

Parameters

Beschrijving

signature

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

  • ALL_VISION - Sportballen, vaten, VEX AIM Coding Robots, AprilTag ID’s, kleuren en kleurcodes
  • ALL_CARGO - Sportballen en vaten
  • ALL_TAGS - Alle AprilTag ID’s
  • ALL_COLORS - Alle geconfigureerde kleursignaturen en kleurcodes
  • SPORTS_BALL - Alleen sportballen
  • BLUE_BARREL - Alleen blauwe vaten
  • ORANGE_BARREL - Alleen oranje vaten
  • AIM_ROBOT - Alle VEX AIM Coding Robots
  • TAG0 t/m TAG37 - Een enkele AprilTag ID van 0 tot 37
  • NAME - Kleursignatuur of kleurcode waarbij NAME de naam is die is geconfigureerd in de AI Vision Utility.

count

Optioneel. Hiermee stelt u het maximale aantal objecten in dat kan worden geretourneerd, van 1 tot 24 (standaard: 8).

Opmerking: AprilTag-ID’s 5 tot en met 37 kunnen worden verkregen door gebruik te maken van de afgedrukte AprilTag-ID’s van AIM Printables.

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

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(robot.vision.get_data(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(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Gegevens bekijken#

Het afdrukken van de tuple die wordt geretourneerd door get_data geeft een lijst weer van alle eigenschappen van alle gedetecteerde objecten:

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

Schermafbeelding van het consolevenster met debug-uitvoer voor gedetecteerde AprilTag-ID's. De tekst toont 'Object #0' met velden zoals exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 en rotation: 0.0, gevolgd door een scheidingslijn en het begin van 'Object #1' met exists: True, type: AprilTag ID, id: 4 en centerX: 122.

AI-classificaties#

De AIM AI Vision Sensor kan de volgende AI-classificaties detecteren:

ID-nummer

AI-classificatie

Handtekening

0

Bal

SPORTS_BALL

1

Blauwe Ton

BLUE_BARREL

2

Oranje vat

ORANGE_BARREL

3

AIM-robot

AIM_ROBOT

Kleursignaturen#

Een kleursignatuur is een unieke kleur die de AI Vision Sensor kan herkennen. Deze signaturen stellen de sensor 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 get_data om gekleurde objecten in realtime te verwerken en te detecteren.

De AI Vision Utility toont een aangesloten beeldsensor die twee gekleurde objecten detecteert. Aan de linkerkant wordt een live camerabeeld weergegeven met een blauw kader links en een rood kader rechts, beide omlijnd met witte kaders. Zwarte labels tonen hun respectievelijke namen, coördinaten en afmetingen. Aan de rechterkant bevinden zich instellingen voor de kleursignatuur, met schuifregelaars voor de tint en verzadiging van zowel het rode als het blauwe kader. Onderaan bevinden zich knoppen voor het toevoegen van kleuren, het pauzeren van de video, het kopiëren en opslaan van de afbeelding, samen met een sluitknop in de rechterbenedenhoek.

# 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!")

Kleurcodes#

Een kleurcode is een gestructureerd patroon dat bestaat uit 2 tot 4 kleursignaturen die in een specifieke volgorde zijn gerangschikt. Deze codes stellen de AI-visiesensor 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.

De interface van AI Vision Utility toont een aangesloten beeldsensor die twee naast elkaar gelegen objecten detecteert: een blauwe doos aan de linkerkant en een rode doos aan de rechterkant. Deze objecten zijn samen gegroepeerd in één wit kader met het label BlauwRood. De detectiegegevens omvatten de hoek (A:11°), coördinaten (X:143, Y:103), breedte (W:233) en hoogte (H:108). In het rechterpaneel worden drie kleursignaturen weergegeven: Rood_Doos, Blauw_Doos en BlauwRood, met instelbare tint- en verzadigingsbereiken. De BlauwRood-signatuur combineert de Blauw_Doos en de Rood_Doos. Onder de videostream bevinden zich knoppen met de labels Video bevriezen, Afbeelding kopiëren, Afbeelding opslaan en Sluiten.

# 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 retourneert een Booleaanse waarde die aangeeft of de robot momenteel een sportbal heeft.

  • True — De robot heeft een sportbal.

  • False — De robot heeft geen sportbal.

Usage:
robot.has_sports_ball()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 retourneert een Booleaanse waarde die aangeeft of de robot momenteel een vat van welk type dan ook heeft.

  • True — De robot heeft een vat.

  • False — De robot heeft geen loop.

Usage:
robot.has_any_barrel()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 retourneert een Booleaanse waarde die aangeeft of de robot momenteel een blauw vat heeft.

  • True — De robot heeft een blauwe loop.

  • False — De robot heeft geen blauwe loop.

Usage:
robot.has_blue_barrel()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 retourneert een Booleaanse waarde die aangeeft of de robot momenteel een oranje vat heeft.

  • True — De robot heeft een oranje vat.

  • False — De robot heeft geen oranje vat.

Usage:
robot.has_orange_barrel()

Parameters

Beschrijving

Deze methode heeft geen parameters.

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

    wait(50, MSEC)

Eigenschappen#

Er zijn twaalf eigenschappen die worden opgenomen bij elk object dat in een tuple wordt opgeslagen nadat de methode robot.vision.get_data is gebruikt.

Alle eigenschapswaarden, behalve .id, .score, en .type , beschrijven de positie, grootte, oriëntatie of richting van het gedetecteerde object op het moment dat robot.vision.get_data werd gebruikt. Deze waarden worden gemeten in pixels of graden, gebaseerd op de resolutie van de sensor van 320 bij 240 pixels.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. De x- en y-assen zijn respectievelijk gelabeld van 0 tot 320 van links naar rechts aan de bovenkant en van 0 tot 240 van boven naar beneden aan de linkerkant.

.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:
    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 retourneert de breedte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 320.

Opmerking: Pixelwaarden zijn relatief ten opzichte van het coördinatensysteem van de sensor. Zie het diagram in de Inleiding ter referentie.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. Twee verticale rode stippellijnen lopen vanaf de bovenkant van het kader naar de linker- en rechterrand van het kader. Een dubbele zwarte pijl tussen deze lijnen geeft de breedte aan.

# 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 retourneert de hoogte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 240.

Opmerking: Pixelwaarden zijn relatief ten opzichte van het coördinatensysteem van de sensor. Zie het diagram in de Inleiding ter referentie.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. Twee horizontale rode stippellijnen lopen vanaf de linkerkant van het kader naar de boven- en onderrand van het kader. Een dubbele zwarte pijl tussen deze lijnen geeft de hoogte aan.

# 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 retourneert de x-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 320.

Opmerking: Pixelwaarden zijn relatief ten opzichte van het coördinatensysteem van de sensor. Zie het diagram in de Inleiding ter referentie.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. Een verticale rode stippellijn loopt vanaf de bovenkant van het kader naar het midden van het kader en geeft de X-coördinaat van het middelpunt aan.

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

Opmerking: Pixelwaarden zijn relatief ten opzichte van het coördinatensysteem van de sensor. Zie het diagram in de Inleiding ter referentie.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. Een horizontale rode stippellijn loopt vanaf de linkerkant van het kader naar het midden van het kader en geeft de Y-coördinaat van het middelpunt aan.

# 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 retourneert een decimaal (float) dat aangeeft hoe ver een object zich links of rechts van het midden van het gezichtsveld van de AI Vision Sensor bevindt, uitgedrukt in graden. Een waarde van 0 betekent dat het object in het midden staat, positieve waarden betekenen dat het object zich rechts bevindt en negatieve waarden betekenen dat het object zich links bevindt.

Bovenaanzichtdiagram met een VEX AIM-codeerrobot in het midden van een cirkelvormige basis, met een verticale referentielijn en een rode lijn die schuin naar een sportbal aan de linkerkant wijst, aangeduid met -30 graden. Bovenaanzichtdiagram met een VEX AIM-codeerrobot in het midden van een cirkelvormige basis, met een verticale referentielijn en een rode lijn die onder een hoek van 30 graden naar een sportbal aan de rechterkant wijst.
# 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 geeft de oriëntatie van het object op het weergavevlak van de AI Vision Sensor terug, gemeten in graden van 0 tot 359. Een kleurcode is 0° wanneer de kleuren in een horizontale lijn zijn gerangschikt (bijvoorbeeld rood-blauw). Als de kleuren worden gedraaid, verandert de hoek (bijvoorbeeld blauw-rood geeft 180° terug).

In het onderstaande voorbeeld is de kleurcode zo ingesteld dat rood links en blauw rechts staat.

In deze afbeelding komt het plaatsen van blauw bovenop rood overeen met het 270 graden naar rechts draaien van de oorspronkelijke kleurcode.

Een camera-interface toont een verticaal gestapeld object met een blauwe bovenhelft en een rode onderhelft, gecentreerd in het beeld. Een label onder het object luidt Rood_Blauw A:270° CX:185 CY:81 W:93 H:150, met de naam van het object, de rotatiehoek, de X- en Y-coördinaten van het middelpunt, de breedte en de hoogte. Rasterlijnen en numerieke assen markeren de afmetingen van het beeld, waarbij X varieert van 0 tot 320 en Y van 0 tot 240.

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

Opmerking: Pixelwaarden zijn relatief ten opzichte van het coördinatensysteem van de sensor. Zie het diagram in de Inleiding ter referentie.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. Een verticale rode stippellijn loopt van de bovenkant van het kader naar de linkerrand van het kader en geeft de X-coördinaat van het middelpunt van het kader aan.

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

Opmerking: Pixelwaarden zijn relatief ten opzichte van het coördinatensysteem van de sensor. Zie het diagram in de Inleiding ter referentie.

Een blauw vat met een oranje streep is gecentreerd in het kader, omgeven door een zwart kader. Een horizontale rode stippellijn loopt van de linkerkant van het kader naar de bovenrand van het kader en geeft de Y-coördinaat van het beginpunt van het kader aan.

# 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 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 37. 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 = 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 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.

# 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 retourneert een geheel getal dat het type van het gedetecteerde object aangeeft. U kunt deze waarde vergelijken met behulp van het typenummer of de overeenkomstige benoemde constante:

Objecttype

Inbegrepen objecten

AiVision.AI_OBJECT

— Sportballen
— Blauwe vaten
— Oranje vaten

AiVision.TAG_OBJECT

— AprilTag ID’s

AiVision.COLOR_OBJECT

— Kleursignaturen

AiVision.CODE_OBJECT

— Kleurcodes

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

Constructeurs#

Creating a Color Signature#

Een nieuwe kleursignatuur wordt aangemaakt met behulp van de Colordesc constructor en vervolgens geregistreerd bij de AI Vision Sensor met behulp van de color_description methode. Een Colordesc object definieert 1 van maximaal 7 detecteerbare kleursignaturen voor de sensor, maar deze moet expliciet worden ingesteld met behulp van color_description om effect te sorteren.

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

Parameter

Beschrijving

index

Een geheel getal van 1 tot 7 dat de index van de kleursignatuur vertegenwoordigt. Als twee kleursignaturen dezelfde index gebruiken, heeft de tweede voorrang op de eerste.

red

Een geheel getal van 0 tot 255 voor het rode component van de kleur.

green

Een geheel getal van 0 tot 255 voor de groene component van de kleur.

blue

Een geheel getal van 0 tot 255 voor het blauwe component van de kleur.

hangle

Een zwevendekommagetal van 1 tot 40 dat het kleurbereik in graden weergeeft.

hdsat

Een zwevendekommagetal tussen 0,10 en 1,00 dat het verzadigingsbereik aangeeft.

kleurbeschrijving Gebruik:
robot.vision.color_description(object)

Parameter

Beschrijving

object

Het object Colordesc moet worden ingesteld als een detecteerbare kleursignatuur.

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

Een nieuwe kleurcode wordt aangemaakt met behulp van de Codedesc constructor en vervolgens geactiveerd met behulp van de code_description methode. Een kleurcode groepeert 2 tot 4 bestaande Colordesc objecten in één enkele identifier die de AI Vision Sensor als een reeks kan detecteren, maar deze moet expliciet worden ingesteld met behulp van code_description om effect te sorteren.

Gebruik van Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)

Parameter

Beschrijving

index

De index van de kleurcode, van 1 tot 8. Let op: als u twee objecten van het type Codedesc met dezelfde index aanmaakt, zal het tweede object het eerste overschrijven.

c1

Het eerste Colordesc object in de code.

c2

Het tweede Colordesc object in de code.

c3

Optioneel. Een derde Colordesc object.

c4

Optioneel. Een vierde Colordesc object.

code_description Gebruik:
robot.vision.code_description(object)

Parameter

Beschrijving

object

Een Codedesc object dat geregistreerd moet worden als een detecteerbare kleurcode.

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