Tekoälyvisio#

Johdanto#

VEX AIM -koodausrobotin tekoälynäköanturi tunnistaa ja seuraa esineitä, värejä ja AprilTag-tunnuksia. Tämän avulla robotti voi analysoida ympäristöään, seurata esineitä ja reagoida havaittujen visuaalisten tietojen perusteella.

Tekoälynäköanturin resoluutio on 320 × 240 pikseliä. Origo (0, 0) sijaitsee vasemmassa yläkulmassa, ja anturin keskipiste on kohdassa (160, 120), kuten alla olevassa kaaviossa näkyy:

Kaavio, joka näyttää AIM AI -näköanturin resoluution. Kaavion vasemmassa yläkulmassa on koordinaatit 0, 0, oikeassa yläkulmassa 320, 0, vasemmassa alakulmassa 0, 240 ja keskellä koordinaatit 160, 120.

Alla on luettelo kaikista metodeista ja ominaisuuksista:

Toiminnot — Näytä tai piilota tekoälykameran syöte.

  • show_aivision — Näyttää tekoälynäkösyötteen robotin näytöllä.

  • hide_aivision — Piilottaa tekoälynäkösyötteen näytöltä.

  • tag_detection — Ottaa AprilTag-tunnuksen tunnistuksen käyttöön tai poistaa sen käytöstä.

Getterit — Havaitsevat, piteleekö robotti esinettä.

Ominaisuudet — get_data-funktiosta palautetut objektitiedot

  • exists — Onko objekti olemassa nykyisessä havainnossa totuusarvona.

  • width — Havaitun kohteen leveys.

  • height — Havaitun kohteen korkeus.

  • centerX — Objektin keskipisteen X-sijainti.

  • centerY — Objektin keskipisteen Y-sijainti.

  • bearing — Vaakasuora kulma robotin etuosaan nähden.

  • rotation — Kohteen suunta.

  • originX — Objektin vasemman yläkulman X-sijainti.

  • originY — Objektin vasemman yläkulman Y-sijainti.

  • id — Kohteen luokitus tai tunnistetunnus.

  • score — Tekoälyluokitusten luotettavuuspisteet.

  • type — Palauttaa objektin tyypin (tekoäly, tunniste, väri tai koodi).

Konstruktorit — Määritä väritunnisteet ja -koodit.

  • Luo väritunnus — Luo uuden väritunnustuksen RGB- ja sävy-/kylläisyysalueiden perusteella.

  • Luo värikoodi — Yhdistää useita väritunnisteita yhdeksi värikoodiksi.

Toiminnot#

show_aivision#

show_aivision näyttää tekoälynäköanturin reaaliaikaisen datasyötteen robotin näytöllä. Reaaliaikainen datasyöte peittää kaikki muut näytöllä olevat kuvat tai tekstit.

Huomautus: Näytöllä ei näytetä muita kuvia tai tekstiä, ellei syötettä piiloteta komennolla hide_aivision.

Usage:
robot.screen.show_aivision()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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

hide_aivision#

hide_aivision poistaa tekoälynäköanturin reaaliaikaisen datasyötteen robotin näytöltä.

Usage:
robot.screen.hide_aivision()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 ottaa käyttöön tai poistaa käytöstä AprilTag-tunnuksen tunnistuksen, jossa tila on totuusarvo.

Anturi pystyy tunnistamaan Circle21h7-perheen AprilTag-tunnukset 0–36.

Usage:
robot.vision.tag_detection(state)

Parametrit

Kuvaus

state

Arvot ovat: True, joka ottaa käyttöön AprilTag ID:n tunnistuksen, tai False, joka poistaa AprilTag ID:n tunnistuksen käytöstä.

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)

Getterit#

get_data#

get_data suodattaa tekoälynäköanturin kehyksen tiedot yhdeksi allekirjoitukseksi – tallennetuksi kuvaukseksi jostakin, jonka anturi tunnistaa, kuten esikoulutetusta objektista, AprilTag-tunnuksesta tai määritetystä väriallekirjoituksesta tai värikoodista – ja palauttaa tuple.

Väritunnisteet ja Värikoodit on ensin määritettävä AI Vision -apuohjelmassa, ennen kuin niitä voidaan käyttää tämän menetelmän kanssa.

tuple tallentaa objektit leveyden mukaan suurimmasta pienimpään järjestettyinä alkaen indeksistä 0. Kunkin objektin properties-ominaisuuksiin pääsee käsiksi sen indeksin avulla. Jos vastaavia objekteja ei löydy, palautetaan tyhjä tuple.

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

Parametrit

Kuvaus

signature

Suodattaa tietojoukon sisältämään vain annetun allekirjoituksen tiedot. Käytettävissä olevat allekirjoitukset ovat:

  • ALL_VISION - Urheilupallot, tynnyrit, VEX AIM -koodausrobotit, AprilTag-tunnukset, värit ja värikoodit
  • ALL_CARGO - Urheilupallot ja -tynnyrit
  • ALL_TAGS - Kaikki AprilTag-tunnukset
  • ALL_COLORS - Kaikki määritetyt väriallekirjoitukset ja värikoodit
  • SPORTS_BALL - Vain urheilupallot
  • BLUE_BARREL - Vain siniset tynnyrit
  • ORANGE_BARREL - Vain oranssit tynnyrit
  • AIM_ROBOT - Kaikki VEX AIM -koodausrobotit
  • TAG0 TAG37 - Yksi AprilTag-tunnus 0–37
  • NAME - Väritunniste tai värikoodi, jossa NAME on AI Vision -apuohjelmassa määritetty nimi.

count

Valinnainen. Asettaa palautettavien objektien enimmäismäärän väliltä 1–24 (oletus: 8).

Huomautus: AprilTag-tunnukset 5–37 voidaan saada käyttämällä AIM Printables -sivustolta tulostettuja AprilTag-tunnuksia.

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

Huom: Palautettu tuple voidaan lajitella minkä tahansa ominaisuuden mukaan, ei pelkästään leveyden, käyttämällä Pythonin sorted -funktiota. Esimerkiksi lajittelu AprilTag ID:n mukaan:

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

Tai lajittelu korkeuden mukaan:

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

Tietojen tarkastelu#

Funktion get_data palauttaman tuplen tulostaminen näyttää luettelon kaikkien havaittujen objektien ominaisuuksista:

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

Kuvakaappaus konsoli-ikkunasta, joka näyttää havaittujen AprilTag-tunnusten debug-tulosteen. Tekstissä luetellaan 'Object #0', jonka kentät ovat esimerkiksi exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 ja rotation: 0.0. Tämän jälkeen tulee erotinviiva ja 'Object #1':n alku, jossa on exists: True, type: AprilTag ID, id: 4 ja centerX: 122.

Tekoälyluokitukset#

AIM AI -näköanturi pystyy havaitsemaan seuraavat tekoälyluokitukset:

Henkilötunnus

Tekoälyluokitus

Allekirjoitus

0

Pallo

SPORTS_BALL

1

Sininen tynnyri

BLUE_BARREL

2

Oranssi tynnyri

ORANGE_BARREL

3

AIM-robotti

AIM_ROBOT

Väriallekirjoitukset#

Väritunniste on ainutlaatuinen väri, jonka tekoälynäköanturi tunnistaa. Näiden tunnisteiden avulla anturi voi havaita ja seurata kohteita niiden värin perusteella. Kun väritunniste on määritetty, anturi voi tunnistaa näkökentässään olevia kohteita, joilla on kyseinen väri. Väritunnisteita käytetään yhdessä get_data -funktion kanssa värillisten kohteiden käsittelyyn ja havaitsemiseen reaaliajassa.

AI Vision Utility -apuohjelma, jossa näkyy yhdistetty konenäköanturi, joka havaitsee kaksi värillistä kohdetta. Vasemmalla puolella näkyy reaaliaikainen kamerakuva, jossa on vasemmalla sininen laatikko ja oikealla punainen laatikko, jotka molemmat on rajattu valkoisilla rajaavilla laatikoilla. Mustat otsikot näyttävät laatikoiden nimet, koordinaatit ja mitat. Oikealla puolella on väriasetusasetukset sekä liukusäätimet sekä punaisen että sinisen laatikon sävylle ja kylläisyydelle. Värien lisäämiseen, videon pysäyttämiseen, kopioimiseen ja kuvan tallentamiseen tarkoitetut painikkeet ovat alareunassa, ja oikeassa alakulmassa on sulkemispainike.

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

Värikoodit#

Värikoodi on jäsennelty kuvio, joka koostuu 2–4 tietyssä järjestyksessä olevasta väritunnisteesta. Näiden koodien avulla tekoälynäköanturi pystyy tunnistamaan ennalta määritellyt värikuviot. Värikoodit ovat hyödyllisiä monimutkaisten objektien tunnistamisessa tai ainutlaatuisten merkkien luomisessa autonomista navigointia varten.

AI Vision Utility -käyttöliittymässä näkyy yhdistetty konenäköanturi, joka havaitsee kaksi vierekkäistä kohdetta: vasemmalla sinisen laatikon ja oikealla punaisen laatikon, jotka on ryhmitelty yhteen valkoiseen rajaavaan laatikkoon, jonka nimi on BlueRed. Tunnistustiedot sisältävät kulman (A:11°), koordinaatit (X:143, Y:103), leveyden (W:233) ja korkeuden (H:108). Oikeanpuoleisessa paneelissa on lueteltu kolme väritunnistetta: Red_Box, Blue_Box ja BlueRed, joissa on säädettävät sävy- ja kylläisyysalueet. BlueRed-tunniste yhdistää Blue_Boxin ja Red_Boxin. Videosyötteen alapuolella on painikkeet, joiden nimi on Freeze Video (Pysäytysvideo), Copy Image (Kopioi kuva), Save Image (Tallenna kuva) ja Close (Sulje).

# 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 palauttaa totuusarvon, joka ilmaisee, onko robotilla tällä hetkellä urheilupallo.

  • True — Robotilla on urheilupallo.

  • False — Robotilla ei ole urheilupalloa.

Usage:
robot.has_sports_ball()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 palauttaa totuusarvon, joka ilmaisee, onko robotilla tällä hetkellä minkään tyyppistä tynnyriä.

  • True — Robotilla on tynnyri.

  • False — Robotilla ei ole tynnyriä.

Usage:
robot.has_any_barrel()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 palauttaa totuusarvon, joka ilmaisee, onko robotilla tällä hetkellä sininen tynnyri.

  • True — Robotilla on sininen tynnyri.

  • False — Robotilla ei ole sinistä tynnyriä.

Usage:
robot.has_blue_barrel()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 palauttaa totuusarvon, joka ilmaisee, onko robotilla tällä hetkellä oranssi tynnyri.

  • True — Robotilla on oranssi tynnyri.

  • False — Robotilla ei ole oranssia tynnyriä.

Usage:
robot.has_orange_barrel()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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

    wait(50, MSEC)

Ominaisuudet#

Tupleen tallennetuille objektille on kaksitoista ominaisuutta, jotka sisällytetään robot.vision.get_data-metodin käytön jälkeen.

Kaikki ominaisuusarvot paitsi .id, .scoreja .type kuvaavat havaitun kohteen sijainnin, koon, suunnan tai suuntauksen sillä hetkellä, robot.vision.get_data -metodia käytettiin. Nämä arvot mitataan pikseleinä tai asteina anturin 320 x 240 pikselin resoluution perusteella.

Sininen tynnyri, jossa on oranssi raita, on keskellä kehystä, ja sitä ympäröi musta rajaava laatikko. X- ja y-akselit on merkitty yläreunassa vasemmalta oikealle 0–320 ja vasemmalla puolella ylhäältä alas 0–240.

.exists#

.exists palauttaa totuusarvon, joka ilmaisee, onko indeksi olemassa tuplessa vai ei.

  • True — Indeksi on olemassa.

  • False — Indeksiä ei ole olemassa.

# 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 palauttaa havaitun objektin leveyden pikseleinä, joka on kokonaisluku väliltä 1–320.

Huomautus: Pikseliarvot ovat suhteessa anturin koordinaatistoon. Katso viitteeksi johdannon kaavio.

Sininen tynnyri, jossa on oranssi raita, on keskellä kehystä, ja sitä ympäröi musta rajaava laatikko. Kaksi pystysuoraa punaista katkoviivaa ulottuu kehyksen yläreunasta alas rajaavan laatikon vasempaan ja oikeaan reunaan. Näiden viivojen välissä oleva kaksipäinen musta nuoli osoittaa leveysmitan.

# 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 palauttaa havaitun objektin korkeuden pikseleinä, joka on kokonaisluku väliltä 1 ja 240.

Huomautus: Pikseliarvot ovat suhteessa anturin koordinaatistoon. Katso viitteeksi johdannon kaavio.

Sininen tynnyri, jossa on oranssi raita, on keskellä kehystä, ja sitä ympäröi musta rajaava laatikko. Kaksi vaakasuoraa punaista katkoviivaa ulottuu kehyksen vasemmalta puolelta rajaavan laatikon ylä- ja alareunoihin. Näiden viivojen välissä oleva kaksipäinen musta nuoli osoittaa korkeusmittauksen.

# 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 palauttaa havaitun objektin keskipisteen x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–320.

Huomautus: Pikseliarvot ovat suhteessa anturin koordinaatistoon. Katso viitteeksi johdannon kaavio.

Sininen tynnyri, jossa on oranssi raita, on keskellä kehystä, ja sitä ympäröi musta rajaava laatikko. Pystysuora punainen katkoviiva ulottuu kehyksen yläreunasta alas rajaavan laatikon keskelle ja osoittaa keskipisteen X-koordinaatin.

# 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 palauttaa havaitun objektin keskipisteen y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–240.

Huomautus: Pikseliarvot ovat suhteessa anturin koordinaatistoon. Katso viitteeksi johdannon kaavio.

Sininen tynnyri, jossa on oranssi raita, on keskellä kehystä, ja sitä ympäröi musta rajaava laatikko. Vaakasuora punainen katkoviiva ulottuu kehyksen vasemmalta puolelta rajaavan laatikon keskelle ja osoittaa keskipisteen Y-koordinaatin.

# 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 palauttaa desimaaliluvun (liukuluku), joka kuvaa asteina, kuinka kaukana kohde on tekoälynäköanturin näkymän keskikohdasta vasemmalla tai oikealla. Arvo 0 tarkoittaa, että kohde on keskellä, positiiviset arvot tarkoittavat, että kohde on oikealla, ja negatiiviset arvot tarkoittavat, että kohde on vasemmalla.

Ylhäältä alas -kaavio, jossa näkyy VEX AIM -koodausrobotti pyöreän jalustan keskellä, jossa on pystysuora vertailuviiva ja punainen viiva, joka on suunnattu kohti vasemmalla olevaa urheilupalloa ja merkitty -30 astetta. Ylhäältä alas -kaavio, jossa näkyy VEX AIM -koodausrobotti pyöreän jalustan keskellä, jossa on pystysuora vertailuviiva ja punainen viiva, joka on suunnattu kohti oikealla puolella olevaa urheilupalloa ja merkitty 30 astetta.
# 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 palauttaa objektin suunnan tekoälynäköanturin katselutasolla mitattuna asteina välillä 0–359. Värikoodi on 0°, kun sen värit on järjestetty vaakasuoraan viivaan (esim. punainen–sininen). Jos värejä kierretään, kulma muuttuu (esim. sininen–punainen-järjestely palauttaa 180°).

Alla olevassa esimerkissä värikoodi on määritetty siten, että punainen on vasemmalla ja sininen oikealla.

Tässä kuvassa sinisen lisääminen punaisen päälle vastaa alkuperäisen värikoodin kiertämistä 270 astetta oikealle.

Kameran käyttöliittymä näyttää pystysuunnassa pinotun objektin, jonka yläosa on sininen ja alaosa punainen, keskellä kuvaa. Objektin alla olevassa tekstissä lukee Red_Blue A:270° CX:185 CY:81 W:93 H:150, joka ilmaisee objektin nimen, kiertokulman, keskipisteen X- ja Y-koordinaatit, leveyden ja korkeuden. Ruudukko ja numeeriset akselit merkitsevät kuvan mitat, X:n vaihdellessa välillä 0–320 ja Y:n välillä 0–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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–320.

Huomautus: Pikseliarvot ovat suhteessa anturin koordinaatistoon. Katso viitteeksi johdannon kaavio.

Sininen tynnyri, jossa on oranssi raita, on keskitetty kehykseen, ja sitä ympäröi musta rajaava laatikko. Pystysuora punainen katkoviiva ulottuu kehyksen yläreunasta rajaavan laatikon vasempaan reunaan ja osoittaa rajaavan laatikon alkuperän X-koordinaatin.

# 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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–240.

Huomautus: Pikseliarvot ovat suhteessa anturin koordinaatistoon. Katso viitteeksi johdannon kaavio.

Sininen tynnyri, jossa on oranssi raita, on keskellä kehystä, ja sitä ympäröi musta rajaava laatikko. Vaakasuora punainen katkoviiva ulottuu kehyksen vasemmalta puolelta rajaavan laatikon yläreunaan ja osoittaa rajaavan laatikon alkuperän Y-koordinaatin.

# 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 palauttaa havaitun tekoälyluokituksen tai AprilTag-tunnuksen kokonaislukuna.

AprilTag-tunnuksen tapauksessa .id -ominaisuus edustaa havaitun AprilTag-tunnuksen numeroa väliltä 0–37. Tekoälyluokituksen tapauksessa .id -ominaisuus vastaa AI-luokitukset-osiossa ennalta määritettyä tunnusta.

# 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 palauttaa havaitun tekoälyluokituksen luotettavuuspistemäärän kokonaislukuna väliltä 1–100.

Alhaisempi pistemäärä tarkoittaa, että anturi on vähemmän varma havaitusta kohteesta, kun taas korkeampi pistemäärä tarkoittaa, että anturi on varmempi.

# 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 palauttaa kokonaisluvun, joka ilmaisee havaitun objektin tyypin. Voit verrata tätä arvoa joko tyypin numerolla tai vastaavalla nimetyllä vakiolla:

Objektityyppi

Sisältyvät objektit

AiVision.AI_OBJECT

— Urheilupallot
— Siniset tynnyrit
— Oranssit tynnyrit

AiVision.TAG_OBJECT

— AprilTag-tunnukset

AiVision.COLOR_OBJECT

— Väriallekirjoitukset

AiVision.CODE_OBJECT

— Värikoodit

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

Rakentajat#

Creating a Color Signature#

Uusi väritunniste luodaan konstruktorilla Colordesc ja rekisteröidään sitten tekoälynäköanturiin color_description -metodilla. Colordesc -objekti määrittelee yhden enintään seitsemästä havaittavasta väritunnisteesta anturille, mutta se on asetettava erikseen käyttämällä color_description -metodia, jotta se tulee voimaan.

Värimäärityksen käyttö:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametri

Kuvaus

index

Kokonaisluku 1–7, joka edustaa väritunnisteen indeksiä. Jos kahdella väritunnisteella on sama indeksi, toinen korvaa ensimmäisen.

red

Kokonaisluku väliltä 0–255 värin punaiselle komponentille.

green

Kokonaisluku 0–255 värin vihreälle komponentille.

blue

Kokonaisluku väliltä 0–255 värin siniselle komponentille.

hangle

Liukuluku 1–40, joka edustaa sävyaluetta asteina.

hdsat

Liukuluku 0,10:stä 1,00:aan, joka edustaa kylläisyysaluetta.

värin_kuvaus Käyttö:
robot.vision.color_description(object)

Parametri

Kuvaus

object

Colordesc -objekti, joka asetetaan havaittavaksi väriallekirjoitukseksi.

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

A new Color Code is created using the Codedesc constructor and then activated using the code_description method. A Color Code groups 2 to 4 existing Colordesc objects into a single identifier that the AI Vision Sensor can detect as a sequence, but it must be explicitly set using code_description to take effect.

Codedescin käyttö:
Codedesc(index, c1, c2, c3, c4, c5)

Parametri

Kuvaus

index

Värikoodin indeksi 1–8. Huomautus: Jos luot kaksi Codedesc -objektia samalla indeksillä, toinen korvaa ensimmäisen.

c1

Koodin ensimmäinen Colordesc -objekti.

c2

Koodin toinen Colordesc -objekti.

c3

Valinnainen. Kolmas Colordesc -objekti.

c4

Valinnainen. Neljäs Colordesc -objekti.

koodi_kuvaus Käyttö:
robot.vision.code_description(object)

Parametri

Kuvaus

object

Codedesc -objekti, joka rekisteröidään havaittavaksi värikoodiksi.

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