AI látás#

Bevezetés#

A VEX AIM kódolórobot mesterséges intelligenciával működő vizuális érzékelője tárgyakat, színeket és AprilTag azonosítókat érzékel és követ. Ez lehetővé teszi a robot számára, hogy elemezze a környezetét, kövesse a tárgyakat, és a detektált vizuális adatok alapján reagáljon.

Az AI Vision Sensor felbontása 320×240 pixel. Az origó (0, 0) a bal felső sarokban található, az érzékelő középpontja pedig (160, 120) pontban van, ahogy az az alábbi ábrán is látható:

Az AIM AI vizuális érzékelő felbontását bemutató ábra, a 0, 0 koordinátával a diagram bal felső sarkában, a 320, 0 koordinátával a jobb felső sarokban, a 0, 240 koordinátával a bal alsó sarokban, a 160, 120 koordinátákkal pontosan középen.

Az alábbiakban felsoroljuk az összes metódust és tulajdonságot:

Műveletek – Az AI Vision kameraképének megjelenítése vagy elrejtése.

  • show_aivision — Megjeleníti az AI Vision képfolyamot a robot képernyőjén.

  • hide_aivision — Elrejti az AI Vision képfolyamot a képernyőn.

  • tag_detection — Be- vagy kikapcsolja az AprilTag ID észlelését.

Getterek – Érzékelik, ha a robot tart egy tárgyat.

  • get_data — Egy adott aláíráshoz tartozó észlelt objektumok egy tuple-jét adja vissza.

  • has_sports_ball — Visszaadja, hogy a robotnak van-e sportlabdája.

  • has_any_barrel — Visszaadja, hogy a robotnak van-e bármilyen típusú hordója.

  • has_blue_barrel — Visszaadja, hogy a robotnak van-e kék hordója.

  • has_orange_barrel — Visszaadja, hogy a robotnak van-e narancssárga hordója.

Tulajdonságok — A get_data függvényből visszaadott objektumadatok.

  • exists — Meghatározza, hogy az objektum létezik-e az aktuális észlelésben logikai értékként.

  • width — A detektált objektum szélessége.

  • height — Az érzékelt tárgy magassága.

  • centerX — Az objektum középpontjának X pozíciója.

  • centerY — Az objektum középpontjának Y pozíciója.

  • bearing — Vízszintes szög a robot elejéhez képest.

  • rotation — Az objektum tájolása.

  • originX — Az objektum bal felső sarkának X pozíciója.

  • originY — Az objektum bal felső sarkának Y pozíciója.

  • id — Az objektum osztályozása vagy címkeazonosítója.

  • score — A mesterséges intelligencia osztályozásának megbízhatósági pontszáma.

  • type — Visszaadja az objektum típusát (AI, Tag, Color vagy Code).

Konstruktorok – Színaláírások és -kódok definiálása.

Műveletek#

show_aivision#

show_aivision A 0 …

Megjegyzés: A képernyőn nem jelennek meg más képek vagy szövegek, kivéve, ha a hide_aivision paranccsal elrejti a hírfolyamot.

Usage:
robot.screen.show_aivision()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

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

hide_aivision#

hide_aivision parancs eltávolítja az AI Vision Sensor élő adatfolyamát a robot képernyőjéről.

Usage:
robot.screen.hide_aivision()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 engedélyezi vagy letiltja az AprilTag azonosító észlelését, ahol az állapot egy logikai érték.

Az érzékelő a Circle21h7 család 0–36-os AprilTag azonosítóit képes érzékelni.

Usage:
robot.vision.tag_detection(state)

Paraméterek

Leírás

state

Az értékek: True, amely engedélyezi az AprilTag ID észlelését, vagy False, amely letiltja az AprilTag ID észlelését.

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)

Getterek#

get_data#

A get_data függvény egyetlen aláírásra szűri az AI Vision Sensor keretrendszeréből származó adatokat – egy mentett leírást valamiről, amit az érzékelő felismer, például egy előre betanított objektumot, egy AprilTag azonosítót vagy egy konfigurált színaláírást vagy színkódot –, és egy tuple értéket ad vissza.

A Színaláírások és a Színkódok beállításokat először konfigurálni kell az AI Vision segédprogramban, mielőtt ezzel a módszerrel használhatók lennének.

A tuple a 0 indextől kezdődően szélesség szerint a legnagyobbtól a legkisebbig rendezett objektumokat tárolja. Minden objektum properties tulajdonsága a hozzá tartozó index segítségével érhető el. Ha nem található egyező objektum, akkor egy üres tuple kerül visszaadásra.

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

Paraméterek

Leírás

signature

Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető szignatúrák:

  • ALL_VISION - Sportlabdák, hordók, VEX AIM kódoló robotok, AprilTag azonosítók, színek és színkódok
  • ALL_CARGO - Sportlabdák és hordók
  • ALL_TAGS - Minden AprilTag azonosító
  • ALL_COLORS - Minden konfigurált színszignatúra és színkód
  • SPORTS_BALL - Csak sportlabdák
  • BLUE_BARREL - Csak kék hordók
  • ORANGE_BARREL - Csak narancssárga hordók
  • AIM_ROBOT - Minden VEX AIM kódoló robot
  • TAG0 TAG37 - Egyetlen AprilTag azonosító 0-tól 37-
  • NAME - Színaláírás vagy színkód, ahol NAME az AI Vision Utilityben konfigurált név.

count

Opcionális. Beállítja a visszaadható objektumok maximális számát 1 és 24 között (alapértelmezett: 8).

Megjegyzés: Az 5–37. számú AprilTag azonosítók a AIM Printables oldalról kinyomtatott AprilTag azonosítók segítségével szerezhetők be.

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

Megjegyzés: A visszaadott tuple bármely property szerint rendezhető, nem csak szélesség szerint, a Python sorted függvényével. Például az AprilTag ID szerinti rendezés:

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

Vagy inkább magasság szerinti rendezés:

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

Adatok megtekintése#

A get_data által visszaadott tuple kinyomtatása megjeleníti az összes észlelt objektum összes tulajdonságának listáját:

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

Képernyőkép a konzolablakról, amely az észlelt AprilTag azonosítók hibakeresési kimenetét jeleníti meg. A szöveg az „Object #0” objektumot listázza olyan mezőkkel, mint például: existes: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1, and rotation: 0.0, majd egy elválasztó vonal és az „Object #1” objektum eleje existes: True, type: AprilTag ID, id: 4, and centerX: 122.

MI-besorolások#

Az AIM AI vizuális érzékelő a következő AI-besorolásokat képes érzékelni:

Azonosító szám

AI osztályozás

Aláírás

0

Labda

SPORTS_BALL

1

Kék hordó

BLUE_BARREL

2

Narancssárga hordó

ORANGE_BARREL

3

AIM robot

AIM_ROBOT

Színaláírások#

A színaláírás egy egyedi szín, amelyet a mesterséges intelligencia által vezérelt látásérzékelő felismer. Ezek az aláírások lehetővé teszik az érzékelő számára, hogy a színük alapján érzékelje és kövesse nyomon az objektumokat. Miután egy színaláírást konfiguráltak, az érzékelő képes azonosítani a látóterében lévő adott színű objektumokat. A színaláírásokat a get_data függvénnyel együtt használják a színes objektumok valós idejű feldolgozásához és érzékeléséhez.

Az AI Vision Utility egy csatlakoztatott látásérzékelőt ábrázol, amint két színes objektumot érzékel. A bal oldalon egy élő kamerakép látható, bal oldalon egy kék, jobb oldalon egy piros mezővel, mindegyiket fehér határolókeretekkel körülvéve. A fekete címkék a megfelelő neveket, koordinátákat és méreteket mutatják. A jobb oldalon a színaláírás beállításai találhatók, csúszkákkal a színárnyalat és a telítettség tartományához mind a piros, mind a kék mezők esetében. A színek hozzáadására, a videó kimerevítésére, a másolásra és a kép mentésére szolgáló gombok alul találhatók, a jobb alsó sarokban pedig egy bezárás gomb található.

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

Színkódok#

A színkód egy strukturált minta, amely 2-4 színjelből áll, meghatározott sorrendben elrendezve. Ezek a kódok lehetővé teszik a mesterséges intelligencia által vezérelt vizuális érzékelő számára, hogy felismerje az előre meghatározott színmintákat. A színkódok hasznosak összetett objektumok azonosításához vagy egyedi jelölők létrehozásához az autonóm navigációhoz.

Az AI Vision Utility felülete egy csatlakoztatott látásérzékelőt mutat, amely két szomszédos objektumot észlel, egy kék dobozt a bal oldalon és egy piros dobozt a jobb oldalon, egyetlen fehér határoló dobozban csoportosítva, BlueRed felirattal. Az érzékelési információk tartalmazzák a szöget (A:11°), a koordinátákat (X:143, Y:103), a szélességet (W:233) és a magasságot (H:108). A jobb oldali panelen három színjelzés látható: Red_Box, Blue_Box és BlueRed, állítható színárnyalat- és telítettségi tartományokkal. A BlueRed jelzés egyesíti a Blue_Box és a Red_Box színeket. A videojel alatt a Videó kimerevítése, Kép másolása, Kép mentése és Bezárás feliratú gombok találhatók.

# 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 Egy logikai értéket ad vissza, amely azt jelzi, hogy a robotnak jelenleg van-e sportlabdája.

  • True — A robotnak van egy sportlabdája.

  • False — A robotnak nincs sportlabdája.

Usage:
robot.has_sports_ball()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 Egy logikai értéket ad vissza, amely azt jelzi, hogy a robotnak jelenleg van-e bármilyen típusú hordója.

  • True — A robotnak van egy csöve.

  • False — A robotnak nincs csöve.

Usage:
robot.has_any_barrel()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 egy logikai értéket ad vissza, amely azt jelzi, hogy a robotnak jelenleg van-e kék hordója.

  • True — A robotnak kék csöve van.

  • False — A robotnak nincs kék csöve.

Usage:
robot.has_blue_barrel()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 egy logikai értéket ad vissza, amely azt jelzi, hogy a robotnak jelenleg van-e narancssárga hordója.

  • True — A robotnak narancssárga csöve van.

  • False — A robotnak nincs narancssárga csöve.

Usage:
robot.has_orange_barrel()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

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

    wait(50, MSEC)

Tulajdonságok#

A robot.vision.get_data metódus használata után a tuple-ben tárolt objektumokhoz tizenkét tulajdonság tartozik.

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.

Egy narancssárga csíkkal átkötött kék henger látható a keret közepén, fekete határolókerettel körülvéve. Az x és y tengelyek felül 0-tól 320-ig balról jobbra, bal oldalon pedig 0-tól 240-ig vannak jelölve.

.exists#

.exists függvény egy logikai értéket ad vissza, amely jelzi, hogy az index létezik-e a tuple-ben vagy sem.

  • True — Az index létezik.

  • False — Az index nem létezik.

# 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 Visszaadja a detektált objektum szélességét pixelben, ami egy 1 és 320 közötti egész szám.

Megjegyzés: A pixelértékek az érzékelő koordináta-rendszeréhez viszonyítottak. Lásd a Bevezetésben található ábrát referenciaként.

Egy narancssárga csíkkal átkötött kék hordó középen helyezkedik el a keretben, fekete határoló kerettel körülvéve. Két függőleges piros szaggatott vonal húzódik a keret tetejétől a határoló keret bal és jobb széléig. A vonalak között egy kétfejű fekete nyíl jelzi a szélesség mértékét.

# 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 A detektált objektum magasságát adja vissza pixelben, ami egy 1 és 240 közötti egész szám.

Megjegyzés: A pixelértékek az érzékelő koordináta-rendszeréhez viszonyítottak. Lásd a Bevezetésben található ábrát referenciaként.

Egy narancssárga csíkkal átkötött kék hordó középen helyezkedik el a keretben, fekete határoló kerettel körülvéve. Két vízszintes, piros szaggatott vonal húzódik a keret bal oldalától a határoló keret felső és alsó széléig. A vonalak között egy kétfejű fekete nyíl jelzi a magasságmérést.

# 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 Visszaadja a detektált objektum középpontjának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.

Megjegyzés: A pixelértékek az érzékelő koordináta-rendszeréhez viszonyítottak. Lásd a Bevezetésben található ábrát referenciaként.

Egy narancssárga csíkkal átkötött kék hordó középen helyezkedik el a keretben, fekete határolókerettel körülvéve. Egy függőleges piros szaggatott vonal húzódik a keret tetejétől a határolókeret közepéig, jelezve a középpont X koordinátáját.

# 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 Visszaadja a detektált objektum középpontjának y koordinátáját pixelben, ami egy 0 és 240 közötti egész szám.

Megjegyzés: A pixelértékek az érzékelő koordináta-rendszeréhez viszonyítottak. Lásd a Bevezetésben található ábrát referenciaként.

Egy narancssárga csíkkal átkötött kék hordó középen helyezkedik el a keretben, fekete határolókerettel körülvéve. Egy vízszintes, piros szaggatott vonal húzódik a keret bal oldalától a határolókeret közepéig, jelezve a középpont Y koordinátáját.

# 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 függvény egy decimális (float) értéket ad vissza, amely fokban kifejezve azt jelenti, hogy egy objektum milyen messze van balra vagy jobbra az AI Vision Sensor látóterének közepétől. A 0 érték azt jelenti, hogy középen van, a pozitív érték azt jelenti, hogy az objektum jobbra, a negatív érték pedig azt, hogy az objektum balra van.

Felülről lefelé haladó ábra, amely egy VEX AIM kódolórobotot mutat egy kör alakú alapban, függőleges referenciavonallal és egy bal oldalon egy sportlabda felé mutató piros vonallal, mínusz 30 fokkal jelölve. Felülről lefelé haladó ábra, amely egy VEX AIM kódolórobotot mutat egy kör alakú alapban, függőleges referenciavonallal és egy jobb oldalon egy sportlabda felé mutató piros vonallal, 30 fokkal jelölve.
# 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 függvény visszaadja az objektum tájolását az AI Vision Sensor látósíkján, 0 és 359 fok között mérve. Egy színkód 0°, ha a színei vízszintes vonalban helyezkednek el (pl. Piros-Kék). Ha a színek elforgatásra kerülnek, a szög megváltozik (pl. Kék-Piros elrendezés 180°-ot ad vissza).

Az alábbi példában a színkód bal oldalon piros, jobb oldalon kék színnel van konfigurálva.

Ezen a képen a kék pirosra helyezése egyenértékű az eredeti színkód 270 fokkal jobbra forgatásával.

A kamerafelület egy függőlegesen egymásra helyezett objektumot jelenít meg, amelynek felső fele kék, alsó fele piros, a képkocka közepén. Az objektum alatt a következő felirat olvasható: Red_Blue A:270° CX:185 CY:81 W:93 H:150, amely az objektum nevét, elforgatási szögét, a középpont X és Y koordinátáit, szélességét és magasságát jelzi. A kép méreteit rácsvonalak és numerikus tengelyek jelzik, ahol az X érték 0 és 320, az Y érték pedig 0 és 240 között lehet.

# 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 visszaadja a detektált objektum határolókeretének bal felső sarkának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.

Megjegyzés: A pixelértékek az érzékelő koordináta-rendszeréhez viszonyítottak. Lásd a Bevezetésben található ábrát referenciaként.

Egy narancssárga csíkkal átkötött kék hordó középen helyezkedik el a keretben, amelyet egy fekete határolókeret vesz körül. Egy függőleges piros szaggatott vonal húzódik a keret tetejétől a határolókeret bal széléig, jelezve a határolókeret origójának X koordinátáját.

# 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 visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját pixelben, ami egy 0 és 240 közötti egész szám.

Megjegyzés: A pixelértékek az érzékelő koordináta-rendszeréhez viszonyítottak. Lásd a Bevezetésben található ábrát referenciaként.

Egy narancssárga csíkkal átkötött kék hordó középen helyezkedik el a keretben, amelyet egy fekete határoló keret vesz körül. Egy vízszintes, piros szaggatott vonal húzódik a keret bal oldalától a határoló keret felső széléig, jelezve a határoló keret origójának Y koordinátáját.

# 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 Az észlelt AI osztályozás vagy AprilTag azonosító azonosítóját adja vissza egész számként.

Egy AprilTag ID esetében a .id tulajdonság a detektált AprilTag azonosító számát jelöli 0 és 37 közötti tartományban. Egy AI osztályozás esetében a .id tulajdonság az AI osztályozások szakaszban előre definiált azonosítónak felel meg.

# 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 Az észlelt AI-osztályozás megbízhatósági pontszámát adja vissza 1 és 100 közötti egész számként.

Az alacsonyabb pontszám azt jelenti, hogy az érzékelő kevésbé bízik az észlelt tárggyal kapcsolatban, míg a magasabb pontszám azt jelenti, hogy az érzékelő nagyobb valószínűséggel észleli a hibát.

# 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 függvény egy egész számot ad vissza, amely az észlelt objektum típusát jelzi. Ezt az értéket összehasonlíthatja a típusszám vagy a megfelelő elnevezett konstans használatával:

Objektumtípus

Belefoglalt objektumok

AiVision.AI_OBJECT

— Sportlabdák
— Kék hordók
— Narancssárga hordók

AiVision.TAG_OBJECT

— AprilTag azonosítók

AiVision.COLOR_OBJECT

— Színaláírások

AiVision.CODE_OBJECT

— Színkódok

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

Konstruktorok#

Creating a Color Signature#

Egy új színaláírás jön létre a Colordesc konstruktorral, majd regisztrálódik az AI Vision Sensorral a color_description metódussal. Egy Colordesc objektum maximum 7 érzékelhető színaláírás egyikét definiálja az érzékelő számára, de ezt explicit módon be kell állítani color_description metódussal ahhoz, hogy érvénybe lépjen.

Színleírás használata:
Colordesc(index, red, green, blue, hangle, hdsat)

Paraméter

Leírás

index

Egy 1 és 7 közötti egész szám, amely a színaláírás indexét jelöli. Ha két színaláírás ugyanazt az indexet használja, a második felülírja az elsőt.

red

Egy 0 és 255 közötti egész szám, amely a szín vörös komponensét jelöli.

green

Egy 0 és 255 közötti egész szám, amely a szín zöld komponensét jelöli.

blue

Egy 0 és 255 közötti egész szám, amely a szín kék komponensét jelöli.

hangle

Egy 1 és 40 közötti lebegőpontos szám, amely a színárnyalat-tartományt jelöli fokban.

hdsat

Egy 0,10 és 1,00 közötti lebegőpontos szám, amely a telítettségi tartományt jelöli.

színleírás Használat:
robot.vision.color_description(object)

Paraméter

Leírás

object

A Colordesc objektum, amelyet érzékelhető színaláírásként kell beállítani.

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

Egy új színkód jön létre a Codedesc konstruktorral, majd aktiválódik a code_description metódussal. A színkód 2-4 meglévő Colordesc objektumot csoportosít egyetlen azonosítóba, amelyet az AI Vision Sensor sorozatként képes érzékelni, de ezt explicit módon be kell állítani code_description metódussal ahhoz, hogy érvénybe lépjen.

Kódleírás Használata:
Codedesc(index, c1, c2, c3, c4, c5)

Paraméter

Leírás

index

A színkód indexe 1-től 8-ig. Megjegyzés: Ha két azonos indexű Codedesc objektumot hoz létre, a második felülírja az elsőt.

c1

A kód első Colordesc objektuma.

c2

A kód második Colordesc objektuma.

c3

Opcionális. Egy harmadik Colordesc objektum.

c4

Opcionális. Egy negyedik Colordesc objektum.

kód_leírás Használat:
robot.vision.code_description(object)

Paraméter

Leírás

object

Egy Codedesc értékű objektum, amely detektálható színkódként regisztrálható.

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