Tekoälynäköanturi#

Johdanto#

aivision -luokkaa käytetään EXP AI -näköanturin tietojen ohjaamiseen ja käyttämiseen. AI-näköanturi voi havaita:

  • Tekoälyn luokitukset (kuten peliobjektit)

  • AprilTag-tunnukset

  • Mukautetut väriallekirjoitukset

  • Mukautetut värikoodit

Se tarjoaa objektitietoja, kuten sijainnin, koon, suunnan, luokittelutunnuksen ja luotettavuuspistemäärän.

Anturi käsittelee visuaalista tietoa käyttämällä sisäänrakennettua tekoälymallia, joka on valittu VEXcoden AI Vision Utility -apuohjelmassa. Valittu malli määrittää, mitä tekoälyluokituksia anturi voi havaita. VS Codea käytettäessä tekoälymalli on ensin konfiguroitava VEXcodessa, ennen kuin sitä voidaan käyttää ohjelmassa. Havaitut objektit palautetaan objects-taulukon kautta takeSnapshot-funktion kutsumisen jälkeen.

Luokanrakentajat#

aivision(
  int32_t index,
  Args&... sigs );

Parametrit#

Parametri

Tyyppi

Kuvaus

index

int32_t

Älyportti, johon tekoälynäköanturi on kytketty, kirjoitetaan muodossa PORTx, jossa x on portin numero (esimerkiksi PORT1).

sigs

colordesc, codedesc, or AI constants

Yksi tai useampi anturiin rekisteröitävä tunnistustyyppi:

  • aivision::ALL_AIOBJS — Kaikki tekoälyluokitukset
  • aivision::ALL_TAGS — Kaikki AprilTag-tunnukset
  • aivision::colordesc — Mukautettu väriallekirjoitus
  • aivision::codedesc — Mukautettu värikoodi

Tekoälymallit ja -luokitukset#

Tekoälynäköanturi voi havaita erilaisia ​​kohteita, joilla on tietyt tekoälyluokitukset. Laitteet-ikkunassa tekoälynäköanturia määritettäessä valitun tekoälyluokittelumallin mukaan erilaisia ​​kohteita voidaan havaita. Tällä hetkellä saatavilla olevat mallit ovat:

Luokkahuoneen elementit

Henkilötunnus

Tekoälyluokitus

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 -robotiikkakilpailu, korkeat panokset

Henkilötunnus

Tekoälyluokitus

0

mobileGoal

1

redRing

2

blueRing

VEX V5 -robotiikkakilpailun vastarinta

Henkilötunnus

Tekoälyluokitus

0

blueBlock

1

redBlock

VEX V5 -robotiikkakilpailun ohitus

Henkilötunnus

Tekoälyluokitus

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Esimerkkejä#

// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT11,                  // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

Jäsenten toiminnot#

aivision -luokka sisältää seuraavat jäsenfunktiot:

  • takeSnapshot — Tallentaa tiedot tietylle väriallekirjoitukselle, värikoodille, tekoälyluokitusryhmälle tai AprilTag ID -ryhmälle.

  • installed — Palauttaa, onko tekoälynäköanturi kytketty EXP Brainiin.

Päästäksesi havaittujen objektien tietoihin takeSnapshot-funktion kutsumisen jälkeen, käytä käytettävissä olevia Properties-ominaisuuksia.

Ennen minkään aivision -jäsenfunktion kutsumista on luotava aivision -instanssi alla olevan mukaisesti:

/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT1,                   // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

takeSnapshot#

Kaappaa kuvan tekoälynäköanturilta, käsittelee sen valitun tekoälymallin tai määritettyjen väritunnisteiden avulla ja päivittää objects -matriisin.

Jokainen kutsu päivittää objects -taulukon uusimmilla havaintotuloksilla. Objektit järjestetään suurimmasta pienimpään (leveyden mukaan) alkaen indeksistä 0Jos objekteja ei havaita, objectCount on 0 ja objects[i].exists on false.

1 — Ottaa tilannekuvan käyttämällä objektitunnusta ja objektityyppiä.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — Ottaa tilannekuvan käyttäen Väriasetus.

int32_t takeSnapshot(
  const colordesc &desc,
  int32_t count = 8 );

3 — Ottaa tilannekuvan käyttämällä Värikoodi.

int32_t takeSnapshot(
  const codedesc &desc,
  int32_t count = 8 );

4 — Ottaa tilannekuvan käyttämällä AprilTag ID -tunnistetta.

int32_t takeSnapshot(
  const tagdesc &desc,
  int32_t count = 8 );

5 — Ottaa tilannekuvan käyttäen tekoälyluokitusta.

int32_t takeSnapshot(
  const aiobjdesc &desc,
  int32_t count = 8 );

6 — Ottaa tilannekuvan käyttämällä objektideskriptoria.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

Parametri

Tyyppi

Kuvaus

id

uint32_t

Havaittavan objektin tunniste käytettäessä funktiota (id, type, count) Merkitys riippuu tyypistä type:

  • colorObject — Värinkuvaajan indeksi (1–7)
  • codeObject — Värikoodin indeksi (1–8)
  • modelObject — Tekoälyn luokittelun tunnus
  • tagObject — AprilTag ID (0–36)

Huomautus: VEXcodessa tekoälyluokitusten nimiä (kuten blueBall) voidaan käyttää suoraan. VS Codessa on käytettävä numeerista tunnusta.

type

objectType

Määrittää id:

  • objectType::tagObject — Tunnistaa AprilTag-tunnukset
  • objectType::colorObject — Tunnistaa Väritunnisteet
  • objectType::codeObject — Tunnistaa Värikoodit
  • objectType::modelObject — Tunnistaa Tekoälyluokitukset
  • objectType::allObject — Tunnistaa kaiken, minkä anturi tunnistaa

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Tietyn objektin havaitsemiseen käytetty kuvaaja. Välitetään suoraan funktiolle takeSnapshot, esimerkiksi:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Ennalta määritetyt kuvaajavakiot:
  • aivision::ALL_TAGS — Tunnistaa kaikki AprilTag-tunnukset
  • aivision::ALL_COLORS — Tunnistaa kaikki määritetyt väritunnisteet
  • aivision::ALL_CODES — Tunnistaa kaikki määritetyt värikoodit
  • aivision::ALL_AIOBJS — Tunnistaa kaikki tekoälyluokitukset
  • aivision::ALL_OBJECTS — Tunnistaa kaiken, minkä anturi tunnistaa

count

uint32_t / int32_t

Tilannevedoksesta tallennettavien objektien enimmäismäärä. Oletusarvo on 8.

Paluuarvot

Palauttaa arvon int32_t joka edustaa määritettyä allekirjoitusta tai tunnistustyyppiä vastaavien havaittujen objektien lukumäärää.

Muistiinpanoja

  • Tekoälynäköanturin on otettava tilannekuva ennen kuin objektitietoihin voidaan päästä käsiksi.

  • objects -taulukko päivitetään jokaisen kutsun yhteydessä.

  • Kun määritetään count , vain suurimmat havaitut objektit (määritettyyn määrään asti) tallennetaan.

Tekoälyluokitukset riippuvat VEXcoden AI Vision -apuohjelmassa valitusta mallista.

Esimerkkejä

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

installed#

Palauttaa, onko tekoälynäköanturi yhdistetty EXP Brainiin.

Käytettävissä olevat toiminnot

bool installed();

Parametrit

Tämä funktio ei ota vastaan ​​parametreja.

Paluuarvot

Palauttaa totuusarvon, joka ilmaisee, onko tekoälynäköanturi yhdistetty:

  • true — Tekoälynäköanturi on yhdistetty.

  • false — Tekoälynäköanturia ei ole kytketty.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

Ominaisuudet#

Kutsumalla takeSnapshot päivitetään tekoälynäköanturin tunnistustulokset. Jokainen tilannekuva päivittää objects -taulukon, joka sisältää pyydetyn tekoälyluokituksen, väriallekirjoituksen, värikoodin tai AprilTag-tunnuksen mukaiset havaitut objektit.

AI Vision -dataan päästään käsiksi AIVisionSensor.objects[index]-muuttujaan tallennettujen objektien ominaisuuksien kautta, missä index alkaa merkistä 0.

Objektit on järjestetty suurimmasta pienimpään (pinta-alan mukaan).

Tekoälynäköanturin kuvan resoluutio on 320 × 240 pikseliäKohteen sijainti- ja kokoarvot ilmoitetaan pikseliyksiköissä suhteessa anturin nykyiseen näkymään.

Seuraavat ominaisuudet ovat saatavilla:

  • objectCount — Palauttaa havaittujen objektien määrän viimeisimmästä tilannevedoksesta.

  • largestObject — Valitsee suurimman havaitun objektin viimeisimmästä tilannevedoksesta.

  • objects — Taulukko, joka sisältää havaitut objektit, jotka on päivitetty takeSnapshot -metodilla.

  • .exists — Sisältääkö objektimerkintä kelvollisia tietoja.

  • .width — Havaitun kohteen leveys pikseleinä.

  • .height — Havaitun kohteen korkeus pikseleinä.

  • .centerX — Objektin keskipisteen X-sijainti pikseleinä.

  • .centerY — Objektin keskipisteen Y-sijainti pikseleinä.

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

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

  • .angle — Värikoodin tai AprilTag-tunnuksen suunta asteina.

  • .id — Classification ID or AprilTag ID.

  • .score — Tekoälyluokitusten luotettavuuspisteet.

objectCount#

objectCount palauttaa taulukon objects alkioiden lukumäärän kokonaislukuna.

Syntax
AIVisionSensor.objectCount

Components

Komponentti

Kuvaus

AIVisionSensor

Tekoälynäköanturi-instanssisi nimi.

Esimerkkejä

// Display the number of detected objects
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.objectCount);
  }
  wait(50, msec);
}

largestObject#

largestObject hakee suurimman havaitun objektin objects -taulukosta.

Tätä metodia voidaan käyttää aina suurimman objektin hakemiseen objects joukosta ilman indeksin määrittämistä.

Syntax
AIVisionSensor.largestObject

Components

Komponentti

Kuvaus

AIVisionSensor

Tekoälynäköanturi-instanssisi nimi.

Esimerkkejä

// Display the closest AprilTag ID
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.largestObject.id);
  }
  wait(50, msec);
}

objects#

objects palauttaa taulukon havaittujen objektien ominaisuuksista. Käytä taulukkoa yksittäisten objektien tiettyjen property-arvojen käyttämiseen.

takeSnapshot käytön jälkeen objects -taulukkoon tallennettuun objektiin sisältyy kymmenen ominaisuutta.

Kaikki ominaisuusarvot paitsi id ja score kuvaavat havaitun kohteen sijainnin ja koon tekoälynäköanturin näkymässä sillä hetkellä, kun takeSnapshot käytettiin. Nämä arvot mitataan pikseleinä anturin 320 x 240 pikselin resoluution perusteella.

Syntax
AIVisionSensor.objects[index].property

Components

Komponentti

Kuvaus

AIVisionSensor

Tekoälynäköanturi-instanssisi nimi.

index

Objektin indeksi taulukossa. Indeksi alkaa luvusta 0.

property

Yksi käytettävissä olevista objektin ominaisuuksista.

.olemassa#

.exists palauttaa, sisältääkö määritetty objekti-indeksi kelvollisen havaitun objektin.

Käyttöoikeus

SensorName.objects[index].exists

Paluuarvot

Palauttaa totuusarvon, joka ilmaisee, sisältääkö määritetty objekti-indeksi kelvollisen havaitun objektin:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

Esimerkkejä

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

.leveys#

.width palauttaa havaitun objektin leveyden.

Käyttöoikeus

SensorName.objects[index].width

Paluuarvot

Palauttaa arvon int16_t joka edustaa havaitun objektin leveyttä pikseleinä. Arvo vaihtelee välillä 1 - 320.

Esimerkkejä

// Approach an object until it's at least 100 pixels wide
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].width < 100) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.korkeus#

.height palauttaa havaitun objektin korkeuden.

Käyttöoikeus

SensorName.objects[index].height

Paluuarvot

Palauttaa arvon int16_t joka edustaa havaitun objektin korkeutta pikseleinä. Arvo vaihtelee välillä 1 - 240.

Esimerkkejä

// Approach an object until it's at least 90 pixels tall
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].height < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.centerX#

.centerX palauttaa havaitun objektin keskipisteen x-koordinaatin.

Käyttöoikeus

SensorName.objects[index].centerX

Paluuarvot

Palauttaa arvon int16_t joka edustaa objektin keskipisteen x-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 320.

Esimerkkejä

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(10, msec);
}

.centerY#

.centerY palauttaa havaitun objektin keskipisteen y-koordinaatin.

Käyttöoikeus

SensorName.objects[index].centerY

Paluuarvot

Palauttaa arvon int16_t joka edustaa objektin keskipisteen y-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 240.

Esimerkkejä

// Approach an object until it's close to the sensor
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerY < 150) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.kulma#

.angle palauttaa havaitun värikoodin tai AprilTag-tunnuksen suunnan.

Käyttöoikeus

SensorName.objects[index].angle

Paluuarvot

Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.

Esimerkkejä

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  AIVision1.takeSnapshot(AIVision1__redBlue);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
      Drivetrain.turn(right);
    }
    else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[0].angle < 330) {
      Drivetrain.turn(left);
    }
    else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.originX#

.originX palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin.

Käyttöoikeus

SensorName.objects[index].originX

Paluuarvot

Palauttaa arvon int16_t joka edustaa objektin rajaavan laatikon origon x-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 320.

Esimerkkejä

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originX < 120) {
      Brain.Screen.print("To the left!");
    } else {
      Brain.Screen.print("To the right!");
    }
  } else {
    Brain.Screen.print("No objects");
  }
  wait(100, msec);
}

.originY#

.originY palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin.

Käyttöoikeus

SensorName.objects[index].originY

Paluuarvot

Palauttaa arvon int16_t joka edustaa objektin rajaavan laatikon origon y-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 240.

Esimerkkejä

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originY < 110) {
      Brain.Screen.print("Close");
    } else {
      Brain.Screen.print("Far");
    }
  }
  wait(100, msec);
}

.id-tiedosto#

.id palauttaa havaitun AprilTag-tunnuksen tai tekoälyluokituksen tunnuksen.

Käyttöoikeus

SensorName.objects[index].id

Paluuarvot

Palauttaa arvon int32_t joka edustaa havaitun objektin tunnusta:

Esimerkkejä

// Move forward when AprilTag ID 1 is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].id == 1) {
      Drivetrain.drive(forward);
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.pisteet#

.score palauttaa havaitun tekoälyluokituksen luotettavuuspistemäärän.

Käyttöoikeus

SensorName.objects[index].score

Paluuarvot

Palauttaa arvon int16_t joka ilmaisee havaitun tekoälyluokituksen luotettavuuspistemäärän 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.

Esimerkkejä

// Display if a score is confident
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    Brain.screen.clearScreen();
    Brain.screen.setCursor(1, 1);

    if (AIVision1.objects[0].score > 95) {
      Brain.Screen.print("Confident");
    } else {
      Brain.Screen.print("Not confident");
    }
  }
  wait(50, msec);
}