Dirbtinio intelekto vizija#

Įvadas#

VEX AIM kodavimo roboto dirbtinio intelekto regos jutiklis aptinka ir seka objektus, spalvas ir „AprilTag“ ID. Tai leidžia robotui analizuoti aplinką, sekti objektus ir reaguoti pagal aptiktus vaizdinius duomenis.

Dirbtinio intelekto vaizdo jutiklio skiriamoji geba yra 320 × 240 pikselių. Pradinis taškas (0, 0) yra viršutiniame kairiajame kampe, o jutiklio centras yra ties (160, 120), kaip parodyta toliau pateiktoje diagramoje:

Diagrama, kurioje parodyta AIM AI vaizdo jutiklio skiriamoji geba, kai viršutiniame kairiajame kampe yra 0, 0 koordinatė, viršutiniame dešiniajame kampe – 320, 0, apatiniame kairiajame kampe – 0, 240, o tiksliai centre – 160, 120 koordinatės.

Žemiau pateikiamas visų metodų ir savybių sąrašas:

Veiksmai – Rodyti arba slėpti dirbtinio intelekto kameros vaizdą.

  • show_aivision — Rodo dirbtinio intelekto vaizdo srautą roboto ekrane.

  • hide_aivision — Paslepia dirbtinio intelekto vaizdo transliaciją ekrane.

  • tag_detection — Įjungia arba išjungia „AprilTag“ ID aptikimą.

Geteris – aptinka, ar robotas laiko objektą.

  • get_data — Grąžina aptiktų objektų rinkinį, skirtą konkrečiam parašui.

  • has_sports_ball — Grąžina, ar robotas turi sportinį kamuolį.

  • has_any_barrel — Grąžina, ar robotas turi kokio nors tipo statinę.

  • has_blue_barrel — Grąžina, ar robotas turi mėlyną statinę.

  • has_orange_barrel — Grąžina, ar robotas turi oranžinę statinę.

Ypatybės — Objekto duomenys, grąžinti iš get_data.

  • exists – Ar objektas egzistuoja dabartiniame aptikime kaip loginė reikšmė.

  • width — Aptikto objekto plotis.

  • height — Aptikto objekto aukštis.

  • centerX — objekto centro X padėtis.

  • centerY — objekto centro Y padėtis.

  • bearing — Horizontalus kampas roboto priekio atžvilgiu.

  • rotation — Objekto orientacija.

  • originX — objekto viršutinio kairiojo kampo X padėtis.

  • originY — objekto viršutinio kairiojo kampo Y padėtis.

  • id — Objekto klasifikacija arba žymės ID.

  • score – DI klasifikacijų patikimumo balas.

  • type — Grąžina objekto tipą (DI, ŽYMA, Spalva arba Kodas).

Konstruktoriai – apibrėžkite spalvų parašus ir kodus.

Veiksmai#

show_aivision#

show_aivision rodo dirbtinio intelekto regos jutiklio tiesioginius duomenis roboto ekrane. Tiesioginiai duomenys uždengs visus kitus ekrane esančius vaizdus ar tekstą.

Pastaba: Ekrane nebus rodomi jokie kiti vaizdai ar tekstas, nebent hide_aivision būtų naudojamas kanalui paslėpti.

Usage:
robot.screen.show_aivision()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

hide_aivision#

hide_aivision pašalina dirbtinio intelekto regėjimo jutiklio tiesioginius duomenis iš roboto ekrano.

Usage:
robot.screen.hide_aivision()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 įjungia arba išjungia „AprilTag“ ID aptikimą, kur būsena yra loginė reikšmė.

Jutiklis gali aptikti „AprilTag“ ID nuo 0 iki 36 iš „Circle21h7“ šeimos.

Usage:
robot.vision.tag_detection(state)

Parametrai

Aprašymas

state

Reikšmės yra: True, kuri įjungia „AprilTag“ ID aptikimą, arba False, kuri išjungia „AprilTag“ ID aptikimą.

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)

Getteriai#

get_data#

get_data filtruoja duomenis iš AI regėjimo jutiklio kadro į vieną parašą – išsaugotą aprašymą to, ką jutiklis gali atpažinti, pvz., iš anksto apmokytą objektą, „AprilTag“ ID arba sukonfigūruotą spalvos parašą arba spalvos kodą – ir grąžina tuple.

Prieš naudojant šį metodą, pirmiausia „AI Vision Utility“ programoje reikia sukonfigūruoti Spalvų parašus ir Spalvų kodus.

Tuple saugo objektus, surūšiuotus nuo didžiausio iki mažiausio pagal plotį, pradedant nuo indekso 0. Kiekvieno objekto properties galima pasiekti naudojant jo indeksą. Jei nerandama atitinkamų objektų, grąžinama tuščia seka.

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

Parametrai

Aprašymas

signature

Filtruoja duomenų rinkinį, kad būtų įtraukti tik nurodyto parašo duomenys. Galimi parašai:

  • ALL_VISION – Sportiniai kamuoliai, statinės, VEX AIM kodavimo robotai, „AprilTag“ ID, spalvos ir spalvų kodai
  • ALL_CARGO – Sportiniai kamuoliai ir statinės
  • ALL_TAGS – Visi „AprilTag“ ID
  • ALL_COLORS – Visi sukonfigūruoti spalvų parašai ir spalvų kodai
  • SPORTS_BALL – Tik sportiniai kamuoliai
  • BLUE_BARREL – Tik mėlynos statinės
  • ORANGE_BARREL – Tik oranžinės statinės
  • AIM_ROBOT – Visi VEX AIM kodavimo robotai
  • TAG0 TAG37 – Vienas „AprilTag“ ID nuo 0 iki 37
  • NAME – Spalvos parašas arba spalvos kodas, kur NAME yra pavadinimas, konfigūruotas „AI Vision Utility“ programoje.

count

Pasirinktinai. Nustato maksimalų grąžinamų objektų skaičių nuo 1 iki 24 (numatytasis: 8).

Pastaba: „AprilTag“ ID nuo 5 iki 37 galima gauti naudojant atspausdintus „AprilTag“ ID iš 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)

Pastaba: Grąžintą rinkinį galima rūšiuoti pagal bet kurią savybę, ne tik pagal plotį, naudojant Python funkciją sorted Pavyzdžiui, rūšiuojant pagal 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)

Arba rūšiuoti pagal ūgį:

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

Duomenų peržiūra#

Spausdinant get_data grąžintą rinkinį, rodomas visų aptiktų objektų savybių sąrašas:

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

Konsolės lango ekrano kopija, kurioje rodoma aptiktų „AprilTag“ ID derinimo išvestis. Tekste pateikiamas „Objektas #0“ su tokiais laukais kaip „exists: True“, tipas: „AprilTag ID“, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1, and rotation: 0.0“, po kurios seka skiriamoji linija ir „Objekto #1“ pradžia su „exists: True“, tipas: „AprilTag ID“, id: 4, and centerX: 122.

DI klasifikacijos#

AIM AI vaizdo jutiklis gali aptikti šias DI klasifikacijas:

ID numeris

DI klasifikacija

Parašas

0

Kamuolys

SPORTS_BALL

1

Mėlyna statinė

BLUE_BARREL

2

Oranžinė statinė

ORANGE_BARREL

3

AIM robotas

AIM_ROBOT

Spalvų parašai#

Spalvos parašas yra unikali spalva, kurią gali atpažinti dirbtinio intelekto regos jutiklis. Šie parašai leidžia jutikliui aptikti ir sekti objektus pagal jų spalvą. Sukonfigūravus spalvos parašą, jutiklis gali atpažinti objektus savo matymo lauke su ta konkrečia spalva. Spalvų parašai naudojami su get_data, kad būtų galima apdoroti ir aptikti spalvotus objektus realiuoju laiku.

„AI Vision Utility“ programa rodo prijungtą regėjimo jutiklį, aptinkantį du spalvotus objektus. Kairėje pusėje rodomas tiesioginis kameros vaizdas su mėlynu langeliu kairėje ir raudonu langeliu dešinėje, kiekvienas iš jų apibrėžtas baltais ribojančiais langeliais. Juodos etiketės rodo jų atitinkamus pavadinimus, koordinates ir matmenis. Dešinėje pusėje yra spalvų parašo nustatymai su slankikliais, skirtais atspalviui ir sodrumo diapazonui tiek raudonam, tiek mėlynam langeliams. Mygtukai spalvoms pridėti, vaizdo įrašui sustabdyti, kopijuoti ir vaizdui išsaugoti yra apačioje, o uždarymo mygtukas – apatiniame dešiniajame kampe.

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

Spalvų kodai#

Spalvų kodas yra struktūrizuotas raštas, sudarytas iš 2–4 spalvų parašų, išdėstytų tam tikra tvarka. Šie kodai leidžia dirbtinio intelekto regos jutikliui atpažinti iš anksto nustatytus spalvų raštus. Spalvų kodai yra naudingi norint identifikuoti sudėtingus objektus arba sukurti unikalius žymeklius autonominei navigacijai.

„AI Vision Utility“ sąsajoje rodomas prijungtas regėjimo jutiklis, aptinkantis du gretimus objektus: mėlyną langelį kairėje ir raudoną langelį dešinėje, sugrupuotus viename baltame ribojančiame langelyje, pažymėtame „BlueRed“. Aptikimo informacija apima kampą (A:11°), koordinates (X:143, Y:103), plotį (W:233) ir aukštį (H:108). Dešiniajame skydelyje išvardyti trys spalvų parašai: „Red_Box“, „Blue_Box“ ir „BlueRed“, su reguliuojamais atspalvio ir sodrumo diapazonais. „BlueRed“ parašas sujungia „Blue_Box“ ir „Red_Box“. Po vaizdo įrašo srautu yra mygtukai, pažymėti „Freeze Video“ (Užšaldyti vaizdo įrašą), „Copy Image“ (Kopijuoti vaizdą), „Save Image“ (Įrašyti vaizdą) ir „Close“ (Uždaryti).

# 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 grąžina loginę reikšmę, nurodančią, ar robotas šiuo metu turi sportinį kamuolį.

  • True — Robotas turi sportinį kamuolį.

  • False — Robotas neturi sportinio kamuolio.

Usage:
robot.has_sports_ball()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 grąžina loginę reikšmę, nurodančią, ar robotas šiuo metu turi kokio nors tipo statinę.

  • True — Robotas turi statinę.

  • False — Robotas neturi statinės.

Usage:
robot.has_any_barrel()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 grąžina loginę reikšmę, nurodančią, ar robotas šiuo metu turi mėlyną statinę.

  • True — Robotas turi mėlyną vamzdį.

  • False — Robotas neturi mėlyno cilindro.

Usage:
robot.has_blue_barrel()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 grąžina loginę reikšmę, nurodančią, ar robotas šiuo metu turi oranžinę statinę.

  • True — Robotas turi oranžinį vamzdį.

  • False — Robotas neturi oranžinio cilindro.

Usage:
robot.has_orange_barrel()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

    wait(50, MSEC)

Ypatybės#

Kiekvienam objektui, saugomam rinkinyje panaudojus robot.vision.get_data, priskiriamos dvylika savybių.

Visos ypatybių reikšmės, išskyrus .id, .scoreir .type , apibūdina aptikto objekto padėtį, dydį, orientaciją arba kryptį tuo metu, kai buvo naudojamas robot.vision.get_data Šios reikšmės matuojamos pikseliais arba laipsniais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.

Kadro centre yra mėlynas statinės formos objektas su oranžine juostele, apsuptas juodo rėmelio. x ir y ašys viršuje pažymėtos nuo 0 iki 320 iš kairės į dešinę, o kairėje pusėje – nuo ​​0 iki 240 iš viršaus į apačią.

.exists#

.exists grąžina loginę reikšmę, nurodančią, ar indeksas egzistuoja rinkinyje, ar ne.

  • True — Indeksas yra.

  • False — Indekso nėra.

# 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 grąžina aptikto objekto plotį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 320.

Pastaba: Pikselių vertės yra santykinės jutiklio koordinačių sistemos atžvilgiu. Žr. diagramą įvade.

Mėlynas statinės formos objektas su oranžine juostele yra centre rėmelio, apsuptas juodo ribojančio langelio. Dvi vertikalios raudonos punktyrinės linijos tęsiasi nuo rėmelio viršaus iki ribojančio langelio kairiojo ir dešiniojo kraštų. Dvipusė juoda rodyklė tarp šių linijų rodo pločio matmenį.

# 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 grąžina aptikto objekto aukštį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 240.

Pastaba: Pikselių vertės yra santykinės jutiklio koordinačių sistemos atžvilgiu. Žr. diagramą įvade.

Kadro centre yra mėlynas statinės formos objektas su oranžine juostele, apsuptas juodo ribojančio langelio. Dvi horizontalios raudonos punktyrinės linijos tęsiasi nuo kairiosios kadro pusės iki ribojančio langelio viršutinio ir apatinio kraštų. Dvipusė juoda rodyklė tarp šių linijų rodo aukščio matavimą.

# 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 grąžina aptikto objekto centro x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 320.

Pastaba: Pikselių vertės yra santykinės jutiklio koordinačių sistemos atžvilgiu. Žr. diagramą įvade.

! Kadro centre yra mėlynas statinės formos objektas su oranžine juostele, apsuptas juodo ribojančio langelio. Vertikali raudona punktyrinė linija tęsiasi nuo kadro viršaus iki ribojančio langelio centro, nurodydama centro X koordinatę.

# 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 grąžina aptikto objekto centro y koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 240.

Pastaba: Pikselių vertės yra santykinės jutiklio koordinačių sistemos atžvilgiu. Žr. diagramą įvade.

! Kadro centre yra mėlynas statinės formos objektas su oranžine juostele, apsuptas juodo ribojančio langelio. Nuo kairės kadro pusės iki ribojančio langelio centro eina horizontali raudona punktyrinė linija, rodanti centro Y koordinatę.

# 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 grąžina dešimtainį (float), rodantį, kiek objektas yra nutolęs į kairę arba į dešinę nuo DI vaizdo jutiklio matymo lauko centro laipsniais. 0 reikšmė reiškia, kad objektas yra centre, teigiamos reikšmės reiškia, kad objektas yra dešinėje, o neigiamos reikšmės reiškia, kad objektas yra kairėje.

Iš viršaus į apačią iš viršaus pavaizduotas VEX AIM kodavimo robotas, esantis apskritame pagrinde su vertikalia atskaitos linija ir raudona linija, nukreipta į sportinį kamuolį kairėje, pažymėta minus 30 laipsnių kampu. Iš viršaus į apačią iš viršaus pavaizduotas VEX AIM kodavimo robotas, esantis apskritame pagrinde su vertikalia atskaitos linija ir raudona linija, nukreipta į sportinį kamuolį dešinėje, pažymėta 30 laipsnių kampu.
# 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 grąžina objekto orientaciją dirbtinio intelekto vaizdo jutiklio žiūrėjimo plokštumoje, matuojamą laipsniais nuo 0 iki 359. Spalvos kodas yra 0°, kai jo spalvos išdėstytos horizontalioje linijoje (pvz., raudona–mėlyna). Jei spalvos pasukamos, kampas pasikeičia (pvz., išdėstymas mėlyna–raudona grąžina 180°).

Žemiau pateiktame pavyzdyje spalvų kodas sukonfigūruotas taip, kad raudona spalva būtų kairėje, o mėlyna – dešinėje.

Šiame paveikslėlyje mėlynos spalvos uždėjimas ant raudonos spalvos atitinka pradinio spalvų kodo pasukimą 270 laipsnių į dešinę.

Kameros sąsajoje rodomas vertikaliai sukrautas objektas su mėlyna viršutine ir raudona apatine pusėmis, centre kadro. Po objektu yra užrašas „Red_Blue A:270° CX:185 CY:81 W:93 H:150“, nurodantis objekto pavadinimą, pasukimo kampą, centro X ir Y koordinates, plotį ir aukštį. Tinklelio linijos ir skaitinės ašys žymi vaizdo matmenis, kur X svyruoja nuo 0 iki 320, o Y – nuo ​​0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 320.

Pastaba: Pikselių vertės yra santykinės jutiklio koordinačių sistemos atžvilgiu. Žr. diagramą įvade.

! Kadro centre yra mėlynas statinės formos objektas su oranžine juostele, apsuptas juodo ribojančio langelio. Vertikali raudona punktyrinė linija tęsiasi nuo kadro viršaus iki ribojančio langelio kairiojo krašto, nurodydama ribojančio langelio pradžios X koordinatę.

# 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais, kurie yra sveikasis skaičius nuo 0 iki 240.

Pastaba: Pikselių vertės yra santykinės jutiklio koordinačių sistemos atžvilgiu. Žr. diagramą įvade.

Kadro centre yra mėlynas statinės formos objektas su oranžine juostele, apsuptas juodo ribojančio langelio. Nuo kairiosios kadro pusės iki ribojančio langelio viršutinio krašto tęsiasi horizontali raudona punktyrinė linija, nurodanti ribojančio langelio pradžios Y koordinatę.

# 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 grąžina aptiktos dirbtinio intelekto klasifikacijos ID arba „AprilTag“ ID kaip sveikąjį skaičių.

„AprilTag“ ID atveju savybė .id nurodo aptiktą „AprilTag“ ID numerį intervale nuo 0 iki 37. AI klasifikacijos atveju savybė „ .id atitinka iš anksto apibrėžtą ID skyriuje AI klasifikacijos.

# 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 grąžina aptiktos dirbtinio intelekto klasifikacijos patikimumo balą kaip sveikąjį skaičių nuo 1 iki 100.

Mažesnis balas reiškia, kad jutiklis mažiau pasitiki aptiktu objektu, o didesnis balas – kad jutiklis labiau pasitiki.

# 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 grąžina sveikąjį skaičių, nurodantį aptikto objekto tipą. Šią reikšmę galite palyginti naudodami tipo numerį arba atitinkamą įvardytąją konstantą:

Objekto tipas

Įtraukti objektai

AiVision.AI_OBJECT

— Sportiniai kamuoliai
— Mėlynos statinės
— Oranžinės statinės

AiVision.TAG_OBJECT

— AprilTag ID

AiVision.COLOR_OBJECT

— Spalvų parašai

AiVision.CODE_OBJECT

— Spalvų kodai

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

Konstruktoriai#

Creating a Color Signature#

Naujas spalvos parašas sukuriamas naudojant konstruktorių Colordesc ir užregistruojamas dirbtinio intelekto regėjimo jutiklyje naudojant metodą color_description . Objektas Colordesc apibrėžia 1 iš iki 7 aptinkamų jutiklio spalvų parašų, tačiau, kad jis įsigaliotų, jis turi būti aiškiai nustatytas naudojant color_description.

Spalvos aprašymo naudojimas:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametras

Aprašymas

index

Sveikasis skaičius nuo 1 iki 7, žymintis spalvos parašo indeksą. Jei du spalvų parašai naudoja tą patį indeksą, antrasis pakeis pirmąjį.

red

Sveikasis skaičius nuo 0 iki 255, žymintis raudoną spalvos komponentą.

green

Sveikasis skaičius nuo 0 iki 255, žymintis žalią spalvos komponentą.

blue

Sveikasis skaičius nuo 0 iki 255, žymintis mėlyną spalvos komponentą.

hangle

Skaičius nuo 1 iki 40, žymintis atspalvių diapazoną laipsniais.

hdsat

Plūduriuojantis skaičius nuo 0,10 iki 1,00, rodantis prisotinimo diapazoną.

color_description Usage:
robot.vision.color_description(object)

Parametras

Aprašymas

object

Colordesc objektas, kuris bus nustatytas kaip aptinkamas spalvos parašas.

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

Naujas spalvos kodas sukuriamas naudojant konstruktorių Codedesc ir aktyvuojamas naudojant metodą code_description . Spalvos kodas sugrupuoja Colordesc objektus į vieną identifikatorių, kurį dirbtinio intelekto regėjimo jutiklis gali aptikti kaip seką, tačiau, kad jis įsigaliotų, jis turi būti aiškiai nustatytas naudojant code_description.

Codedesc naudojimas:
Codedesc(index, c1, c2, c3, c4, c5)

Parametras

Aprašymas

index

Spalvos kodo indeksas nuo 1 iki 8. Pastaba: jei sukursite du Codedesc objektus su tuo pačiu indeksu, antrasis pakeis pirmąjį.

c1

Pirmasis Colordesc objektas kode.

c2

Antrasis Colordesc objektas kode.

c3

Pasirinktinai. Trečias Colordesc objektas.

c4

Pasirinktinai. Ketvirtas Colordesc objektas.

code_description Usage:
robot.vision.code_description(object)

Parametras

Aprašymas

object

Codedesc objektas, kuris bus užregistruotas kaip aptinkamas spalvų kodas.

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