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 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.
Színaláírás létrehozása — Új színaláírást hoz létre az RGB és a színárnyalat/telítettség tartományok alapján.
Színkód létrehozása — Több színaláírást egyesít egyetlen színkóddá.
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 |
|---|---|
|
Az értékek: |
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 |
|---|---|
|
Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető szignatúrák:
|
|
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)

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 |
|
1 |
Kék hordó |
|
2 |
Narancssárga hordó |
|
3 |
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.

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

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

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

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

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

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

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

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

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

# 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 |
|---|---|
|
— Sportlabdák |
|
— AprilTag azonosítók |
|
— Színaláírások |
|
— 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 |
|---|---|
|
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. |
|
Egy 0 és 255 közötti egész szám, amely a szín vörös komponensét jelöli. |
|
Egy 0 és 255 közötti egész szám, amely a szín zöld komponensét jelöli. |
|
Egy 0 és 255 közötti egész szám, amely a szín kék komponensét jelöli. |
|
Egy 1 és 40 közötti lebegőpontos szám, amely a színárnyalat-tartományt jelöli fokban. |
|
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 |
|---|---|
|
A |
# 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 |
|---|---|
|
A színkód indexe 1-től 8-ig. Megjegyzés: Ha két azonos indexű |
|
A kód első |
|
A kód második |
|
Opcionális. Egy harmadik |
|
Opcionális. Egy negyedik |
kód_leírás Használat:
robot.vision.code_description(object)
Paraméter |
Leírás |
|---|---|
|
Egy |
# 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)