Dirbtinio intelekto regėjimo jutiklis#

Įvadas#

aivision klasė naudojama valdyti ir pasiekti duomenis iš IQ (2-osios kartos) dirbtinio intelekto regos jutiklio. Dirbtinio intelekto regos jutiklis gali aptikti:

  • Dirbtinio intelekto klasifikacijos (pvz., žaidimo objektai)

  • AprilTag ID

  • Pasirinktinės spalvos parašai

  • Pasirinktiniai spalvų kodai

Pateikiami objekto duomenys, įskaitant padėtį, dydį, orientaciją, klasifikavimo ID ir patikimumo balą.

Jutiklis apdoroja vaizdinę informaciją naudodamas integruotą dirbtinio intelekto modelį, pasirinktą VEXcode programoje „AI Vision Utility“. Pasirinktas modelis lemia, kurias dirbtinio intelekto klasifikacijas jutiklis gali aptikti. Naudojant VS Code, dirbtinio intelekto modelį pirmiausia reikia sukonfigūruoti VEXcode, kad jį būtų galima naudoti programoje. Aptikti objektai grąžinami per masyvą objects iškvietus takeSnapshot.

Klasės konstruktoriai#

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

Parametrai#

Parametras

Tipas

Aprašymas

index

int32_t

Išmanusis prievadas, prie kurio prijungtas dirbtinio intelekto vaizdo jutiklis, užrašomas kaip PORTx, kur x yra prievado numeris (pavyzdžiui, PORT1).

sigs

colordesc, codedesc, or AI constants

Vienas ar keli aptikimo tipai, kuriuos reikia užregistruoti jutiklyje:

  • aivision::ALL_AIOBJS — Visos dirbtinio intelekto klasifikacijos
  • aivision::ALL_TAGS — Visi „AprilTag“ ID
  • aivision::colordesc — Pasirinktinis spalvos parašas
  • aivision::codedesc — Pasirinktinis spalvos kodas

Dirbtinio intelekto modeliai ir klasifikacijos#

Dirbtinio intelekto regos jutiklis gali aptikti skirtingus objektus su tam tikromis dirbtinio intelekto klasifikacijomis. Priklausomai nuo dirbtinio intelekto klasifikacijos modelio, pasirinkto konfigūruojant dirbtinio intelekto regos jutiklį įrenginių lange, galima aptikti skirtingus objektus. Šiuo metu galimi modeliai:

Klasės elementai

ID numeris

DI klasifikacija

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX IQ robotikos varžybų maišymas ir derinimas

ID numeris

DI klasifikacija

0

beam

1

bluePin

2

redPin

3

orangePin

VEX IQ robotikos varžybų lygis aukštyn

ID numeris

DI klasifikacija

0

blueBeanBag

1

redBeanBag

2

yellowBeanBag

Pavyzdžiai#

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

Narių funkcijos#

aivision klasė apima šias narines funkcijas:

  • takeSnapshot – fiksuoja duomenis pagal konkretų spalvos parašą, spalvos kodą, dirbtinio intelekto klasifikavimo grupę arba „AprilTag ID“ grupę.

  • installed – Grąžina, ar dirbtinio intelekto regėjimo jutiklis prijungtas prie IQ (2-osios kartos) smegenų.

Norėdami pasiekti aptiktų objektų duomenis iškvietę takeSnapshot, naudokite Properties.

Prieš iškviečiant bet kokias aivision narių funkcijas, reikia sukurti aivision egzempliorių, kaip parodyta žemiau:

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

Užfiksuoja vaizdą iš dirbtinio intelekto regos jutiklio, apdoroja jį naudodamas pasirinktą dirbtinio intelekto modelį arba sukonfigūruotus spalvų parašus ir atnaujina objects masyvą.

Kiekvienas iškvietimas atnaujina objects masyvą naujausiais aptikimo rezultatais. Objektai yra rūšiuojami nuo didžiausio iki mažiausio (pagal plotį), pradedant nuo indekso 0Jei objektų neaptikta, objectCount bus 0 , o objects[i].exists bus false.

1 — Padaro momentinę kopiją naudodamas objekto ID ir tipą.

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

2 — Padaro momentinę nuotrauką naudodamas Spalvų parašą.

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

3 — Padaro momentinę nuotrauką naudodamas spalvų kodą.

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

4 — Padaro momentinę kopiją naudodamas AprilTag ID.

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

5 — Padaro momentinę kopiją naudodamas DI klasifikaciją.

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

6 — Padaro momentinę kopiją naudodamas objekto aprašą.

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

Parameters

Parametras

Tipas

Aprašymas

id

uint32_t

Objekto, kurį reikia aptikti naudojant funkciją (id, type, count) identifikatorius. Reikšmė priklauso nuo type:

  • colorObject — Spalvos deskriptoriaus indeksas (1–7)
  • codeObject — Spalvos kodo indeksas (1–8)
  • modelObject — AI klasifikacijos ID
  • tagObject — AprilTag ID (0–36)

Pastaba: VEXcode AI klasifikacijos pavadinimai (pvz., blueBall) gali būti naudojami tiesiogiai. VS Code turi būti naudojamas skaitmeninis ID.

type

objectType

Nurodo objekto kategoriją, susietą su id:

  • objectType::tagObject — Aptinka „AprilTag“ ID
  • objectType::colorObject — Aptinka Spalvų parašus
  • objectType::codeObject — Aptinka Spalvų kodus
  • objectType::modelObject — Aptinka DI klasifikacijas
  • objectType::allObject — Aptinka viską, ką jutiklis gali atpažinti

desc

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

Deskriptorius, naudojamas konkrečiam objektui aptikti. Perduodamas tiesiai į takeSnapshot, pavyzdžiui:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Iš anksto apibrėžtos deskriptorių konstantos:
  • aivision::ALL_TAGS — Aptinka visus „AprilTag“ ID
  • aivision::ALL_COLORS — Aptinka visus sukonfigūruotus spalvų parašus
  • aivision::ALL_CODES — Aptinka visus sukonfigūruotus spalvų kodus
  • aivision::ALL_AIOBJS — Aptinka visus dirbtinio intelekto klasifikacijas
  • aivision::ALL_OBJECTS — Aptinka viską, ką jutiklis gali atpažinti

count

uint32_t / int32_t

Didžiausias momentinėje kopijoje saugomų objektų skaičius. Numatytoji reikšmė yra 8.

Grąžinamosios reikšmės

Grąžina int32_t , nurodantį aptiktų objektų, atitinkančių nurodytą parašą arba aptikimo tipą, skaičių.

Pastabos

  • Prieš pasiekiant objekto duomenis, dirbtinio intelekto vaizdo jutiklis turi padaryti momentinę kopiją.

  • objects masyvas atnaujinamas kiekvieno iškvietimo metu.

  • Kai nurodyta count , saugomi tik didžiausi aptikti objektai (iki nurodyto kiekio).

DI klasifikacijos priklauso nuo modelio, pasirinkto „VEXcode“ DI vizijos įrankyje.

Pavyzdžių

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

Grąžina, ar DI regos jutiklis prijungtas prie IQ (2-osios kartos) smegenų.

Galimos funkcijos

bool installed();

Parametrai

Ši funkcija nepriima jokių parametrų.

Grąžinamosios reikšmės

Grąžina loginę reikšmę, nurodančią, ar prijungtas dirbtinio intelekto vaizdo jutiklis:

  • true — Prijungtas dirbtinio intelekto vaizdo jutiklis.

  • false — Dirbtinio intelekto regėjimo jutiklis neprijungtas.

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

Ypatybės#

Iškviečiant takeSnapshot, atnaujinami dirbtinio intelekto regos jutiklio aptikimo rezultatai. Kiekviena momentinė kopija atnaujina objects masyvą, kuriame yra aptikti objektai pagal prašomą dirbtinio intelekto klasifikaciją, spalvos parašą, spalvos kodą arba „AprilTag“ ID.

Prie „AI Vision“ duomenų galima prisijungti per objektų, saugomų faile AIVisionSensor.objects[index], ypatybes, kur index prasideda nuo 0.

Objektai surūšiuoti nuo didžiausio iki mažiausio (pagal plotą).

Dirbtinio intelekto vaizdo jutiklio vaizdo skiriamoji geba yra 320 × 240 pikseliųObjekto padėties ir dydžio vertės pateikiamos pikselių vienetais, atsižvelgiant į dabartinį jutiklio vaizdą.

Galima įsigyti šias savybes:

  • objectCount — Grąžina aptiktų objektų skaičių iš naujausios momentinės kopijos.

  • largestObject – Pasirenka didžiausią aptiktą objektą iš naujausios momentinės kopijos.

  • objects – masyvas, kuriame yra aptikti objektai, atnaujinti naudojant takeSnapshot.

  • .exists — Ar objekto įraše yra galiojančių duomenų.

  • .width — Aptikto objekto plotis pikseliais.

  • .height — Aptikto objekto aukštis pikseliais.

  • .centerX — X position of the object’s center in pixels.

  • .centerY — objekto centro Y padėtis pikseliais.

  • .originX — X position of the object’s top-left corner in pixels.

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

  • .angle — Orientation of a Color Code or AprilTag ID in degrees.

  • .id — Classification ID or AprilTag ID.

  • .score – DI klasifikacijų patikimumo balas.

objectCount#

objectCount grąžina elementų skaičių masyve objects kaip sveikąjį skaičių.

Syntax
AIVisionSensor.objectCount

Components

Komponentas

Aprašymas

AIVisionSensor

Jūsų DI regėjimo jutiklio egzemplioriaus pavadinimas.

Pavyzdžių

// 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 iš „ objects masyvo paima didžiausią aptiktą objektą.

Šis metodas gali būti naudojamas norint visada gauti didžiausią objektą iš objects , nenurodant indekso.

Syntax
AIVisionSensor.largestObject

Components

Komponentas

Aprašymas

AIVisionSensor

Jūsų DI regėjimo jutiklio egzemplioriaus pavadinimas.

Pavyzdžių

// 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 grąžina aptiktų objektų savybių masyvą. Naudokite masyvą, norėdami pasiekti konkrečias atskirų objektų property reikšmes.

Kiekvienam objektui, saugomam masyve objects , panaudojus takeSnapshot , priskiriamos dešimt savybių.

Visos ypatybių reikšmės, išskyrus id ir score apibūdina aptikto objekto padėtį ir dydį dirbtinio intelekto regos jutiklio rodinyje tuo metu, kai buvo naudojama takeSnapshot . Šios reikšmės matuojamos pikseliais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.

Syntax
AIVisionSensor.objects[index].property

Components

Komponentas

Aprašymas

AIVisionSensor

Jūsų DI regėjimo jutiklio egzemplioriaus pavadinimas.

index

Objekto indeksas masyve. Indeksas prasideda nuo 0.

property

Viena iš galimų objekto savybių.

.egzistuoja#

.exists grąžina, ar nurodytame objekto indekse yra galiojantis aptiktas objektas.

Prieiga

SensorName.objects[index].exists

Grąžinamosios reikšmės

Grąžina loginę reikšmę, nurodančią, ar nurodytame objekto indekse yra galiojantis aptiktas objektas:

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

Pavyzdžių

// 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);
}

.plotis#

.width grąžina aptikto objekto plotį.

Prieiga

SensorName.objects[index].width

Grąžinamosios reikšmės

Grąžina int16_t , nurodantį aptikto objekto plotį pikseliais. Reikšmė svyruoja nuo 1 iki 320.

Pavyzdžių

// 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);
}

.aukštis#

.height grąžina aptikto objekto aukštį.

Prieiga

SensorName.objects[index].height

Grąžinamosios reikšmės

Grąžina int16_t nurodantį aptikto objekto aukštį pikseliais. Reikšmė svyruoja nuo 1 iki 240.

Pavyzdžių

// 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 grąžina aptikto objekto centro x koordinatę.

Prieiga

SensorName.objects[index].centerX

Grąžinamosios reikšmės

Grąžina int16_t reiškiančią objekto centro x koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 320.

Pavyzdžių

// 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 grąžina aptikto objekto centro y koordinatę.

Prieiga

SensorName.objects[index].centerY

Grąžinamosios reikšmės

Grąžina int16_t reiškiančią objekto centro y koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 240.

Pavyzdžių

// 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);
}

.kampas#

.angle grąžina aptikto spalvos kodo arba „AprilTag“ ID orientaciją.

Prieiga

SensorName.objects[index].angle

Grąžinamosios reikšmės

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

Pavyzdžių

// 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę.

Prieiga

SensorName.objects[index].originX

Grąžinamosios reikšmės

Grąžina int16_t reiškiančią objekto ribojančio langelio pradžios x koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 320.

Pavyzdžių

// 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę.

Prieiga

SensorName.objects[index].originY

Grąžinamosios reikšmės

Grąžina int16_t reiškiančią objekto ribojančio langelio pradžios y koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 240.

Pavyzdžių

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

.id grąžina aptiktą „AprilTag“ ID arba AI klasifikacijos ID.

Prieiga

SensorName.objects[index].id

Grąžinamosios reikšmės

Grąžina int32_t , nurodantį aptikto objekto ID:

Pavyzdžių

// 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);
}

.score#

.score grąžina aptiktos dirbtinio intelekto klasifikacijos patikimumo balą.

Prieiga

SensorName.objects[index].score

Grąžinamosios reikšmės

Grąžina int16_t , nurodantį aptiktos dirbtinio intelekto klasifikacijos patikimumo balą nuo 1 iki 100.

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

Pavyzdžių

// 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);
}