Kodavimas naudojant dirbtinio intelekto regos jutiklį VEXcode EXP C++ kalboje

Įsitikinkite, kad jūsų dirbtinio intelekto regėjimo jutiklyje sukonfigūruoti spalvų parašai ir spalvų kodai , kad juos būtų galima naudoti su jūsų blokais. Norėdami sužinoti daugiau apie tai, kaip juos sukonfigūruoti, galite perskaityti toliau pateiktus straipsnius:

Dirbtinio intelekto vaizdo jutiklis taip pat gali aptikti dirbtinio intelekto klasifikacijas ir „AprilTag“ žymas. Norėdami sužinoti, kaip įjungti šiuos aptikimo režimus, eikite čia:

Norėdami sužinoti daugiau apie šias atskiras komandas ir kaip jas naudoti VEXcode, apsilankykite API svetainėje.


Vizualinių duomenų gavimas naudojant dirbtinio intelekto regos jutiklį

Kiekviena dirbtinio intelekto regėjimo jutiklio komanda prasidės sukonfigūruoto dirbtinio intelekto regėjimo jutiklio pavadinimu. Visuose šio straipsnio pavyzdžiuose naudojamo AI regėjimo jutiklio pavadinimas bus AIVision.

takeSnapshot

takeSnapshot “ metodas nufotografuoja tai, ką šiuo metu mato dirbtinio intelekto vaizdo jutiklis, ir iš tos momentinės nuotraukos ištraukia duomenis, kuriuos vėliau galima naudoti projekte. Kai daroma momentinė nuotrauka, reikia nurodyti, kokio tipo objekto duomenis turėtų rinkti dirbtinio intelekto vaizdo jutiklis:

  • spalvų parašas arbaspalvų kodas
    • Šie vizualiniai parašai prasideda dirbtinio intelekto vaizdo jutiklio pavadinimu, dvigubu pabraukimu ir vizualinio parašo pavadinimu, pavyzdžiui: AIVision1__Blue.
  • Dirbtinio klasifikacijos aivision::ALL_AIOBJS
  • balandisŽymėsaivision::

Padarius momentinę kopiją, bus sukurtas visų jūsų nurodytų aptiktų objektų masyvas. Pavyzdžiui, jei norėtumėte aptikti „mėlyną“ spalvų parašąir dirbtinio intelekto regėjimo jutiklis aptiko 3 skirtingus mėlynos spalvos objektus, visų trijų duomenys būtų įdėti į masyvą.

Šiame pavyzdyje padaryta „mėlynos“ spalvos parašomomentinė nuotrauka iš dirbtinio intelekto regėjimo jutiklio, pavadinto AIVision1. Jis rodo masyve aptiktų objektų skaičių ir kas 0,5 sekundės fiksuoja naują momentinę kopiją.

while (true) {
// Gauti visų mėlynos spalvos objektų momentinę kopiją.
AIVision.takeSnapshot(AIVision1__Blue);

// Prieš ištraukiant duomenis, patikrinama, ar momentinėje kopijoje buvo aptiktas objektas.
jei (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
laukti(5, ms);
}

objektai

Kiekvienas momentinės nuotraukos objektas turi skirtingas savybes, kurias galima naudoti informacijai apie tą objektą pateikti. Objektų metodas leidžia pasiekti šias savybes.

Galimos šios savybės:

  • id
  • centras X ir centras Y
  • kilmėX ir kilmėY
  • plotis
  • aukštis
  • kampas
  • egzistuoja
  • rezultatas

Norėdami pasiekti objekto savybę, naudokite dirbtinio intelekto regėjimo jutiklio pavadinimą, po to – „objects“ metodą ir tada – objekto indeksą.

Objekto indeksas nurodo, kurio konkretaus objekto savybę norite gauti. Padarius momentinę nuotrauką, dirbtinio intelekto vaizdo jutiklis automatiškai rūšiuoja objektus pagal dydį. Didžiausiam objektui priskiriamas indeksas 0, o mažesniems objektams priskiriami didesni indekso numeriai.

Pavyzdžiui, iškvietus didžiausio objekto plotį, būtų AIVision1.objects[0].width.

id

Savybė id galima tik AprilTags ir AI klasifikacijoms.

Trys „AprilTag“ žymės yra stebimos „AI Vision Utility“. Kiekviena žymė yra identifikuojama, surandama ir apibrėžiama, o tai rodo, kad sistema ją seka. Šiame pavyzdyje „AprilTag“ ID yra 0, 3 ir 9.

AprilTagatveju, id savybė nurodo aptiktoAprilTag(s) ID numerį.

Konkrečių „AprilTags“ nustatymas leidžia pasirinkti navigaciją. Galite užprogramuoti savo robotą judėti link tam tikrų žymų, ignoruojant kitas, efektyviai jas naudojant kaip automatinės navigacijos kelio ženklus.

„AI Vision“ programa seka keturis objektus: du „BuckyBalls“ ir du „Rings“. Kiekvienas objektas yra identifikuojamas, surandamas ir apibrėžiamas, o tai rodo, kad sistema jį seka. Programa atkreipia dėmesį į objekto ID; šiame pavyzdyje yra raudonas rutulys, mėlynas rutulys, žalias žiedas ir raudonas žiedas.

Jei AI klasifikacijų, savybė „
konkretų aptiktos AI klasifikacijos tipą.
Konkrečių objektų identifikavimas Dirbtinio intelekto klasifikacijosleidžia robotui sutelkti dėmesį tik į konkrečius objektus, pavyzdžiui, norėti naviguoti tik link raudono, o ne mėlyno Buckyball'o.

Daugiau informacijos apie balandžio mėn. žymes ir DI klasifikacijas ir kaip įjungti jų aptikimą DI vizijos programoje rasite šiuose straipsniuose.

centras X ir centras Y

Tai yra aptikto objekto centro koordinatės pikseliais.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis mėlyną „Buckyball“ kamuoliuką. Bekbolą supa sekimo stačiakampis, o aukščiau pateikta etiketė rodo, kad jo X padėtis yra 176, o Y padėtis – 117. Sekimo stačiakampio centras yra paryškintas, siekiant parodyti, kad padėtis matuojama nuo centro.

„CenterX“ ir „CenterY“ koordinatės padeda naviguoti ir nustatyti padėtį. Dirbtinio intelekto vaizdo jutiklio skiriamoji geba yra 320 x 240 pikselių.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis du mėlynus kubus. Kubai aplink save turi sekimo stačiakampius, o vienas iš jų yra daug arčiau kameros. Arčiau esančio Y padėtis yra 184, o toliau esančio – 70.

Matote, kad objektas, esantis arčiau dirbtinio intelekto vaizdo jutiklio, turės žemesnę CenterY koordinatę nei objektas, esantis toliau.

Šiame pavyzdyje, kadangi dirbtinio intelekto vaizdo jutiklio vaizdo centras yra (160, 120), robotas suksis į dešinę, kol aptikto objekto centro X koordinatė bus didesnė nei 150 pikselių, bet mažesnė nei 170 pikselių.

while (true) {
  // Gauti visų mėlynos spalvos objektų momentinę kopiją.
  AIVision.takeSnapshot(AIVision__Blue);

  // Prieš ištraukiant duomenis, patikrinama, ar momentinėje kopijoje buvo aptiktas objektas.
  jei (AIVision.objectCount > 0) {

    jei (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(right);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, ms);
}

originX ir originY

„OriginX“ ir „OriginY“ yra aptikto objekto viršutinio kairiojo kampo koordinatė pikseliais.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis mėlyną „Buckyball“ kamuoliuką. Bekbolą supa sekimo stačiakampis, o aukščiau pateikta etiketė rodo, kad jo X padėtis yra 176, o Y padėtis – 117. Sekimo stačiakampio viršutinis kairysis kampas yra paryškintas, siekiant parodyti, kad pradinė padėtis matuojama nuo viršutinio kairiojo kampo.

„OriginX“ ir „OriginY“ koordinatės padeda naviguoti ir nustatyti padėtį. Sujungę šią koordinatę su objekto pločiu ir aukščiu, galite nustatyti objekto ribojančios dėžės dydį. Tai gali padėti sekti judančius objektus arba naršyti tarp jų.

plotis ir aukštis

Tai aptikto objekto plotis arba aukštis pikseliais.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis mėlyną „Buckyball“ kamuoliuką. „Buckyball“ rutulį supa sekimo stačiakampis, o aukščiau pateikta etiketė rodo, kad jo plotis yra 80 pikselių, o aukštis – 78 pikseliai. Raudonos rodyklės paryškina sekimo stačiakampį, kad būtų parodytas jo plotis ir aukštis.

Pločio ir aukščio matavimai padeda atpažinti skirtingus objektus. Pavyzdžiui, „Buckyball“ bus didesnio aukščio nei „Ring“.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis du mėlynus kubus. Kubai aplink save turi sekimo stačiakampius, o vienas iš jų yra daug arčiau kameros. Arčiau esančio plotis yra 144 ir aukštis – 113, o toliau esančio – 73 plotis ir 84 aukštis.

Plotis ir aukštis taip pat rodo objekto atstumą nuo dirbtinio intelekto vaizdo jutiklio. Mažesni matmenys paprastai reiškia, kad objektas yra toliau, o didesni – arčiau.

Šiame pavyzdyje objekto plotis naudojamas navigacijai. Robotas artės prie objekto, kol jo plotis pasieks tam tikrą dydį, o tada sustos.

while (true) {
  // Gauti visų mėlynų objektų momentinę kopiją.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Prieš ištraukiant duomenis, patikrinama, ar momentinėje kopijoje buvo aptiktas objektas.
  jei (AIVision.objectCount > 0) {

    jei (AIVision.objects[0].width < 250.0) {
      Pavarų dėžė.drive(pirmyn);
    } else {
      Pavarų dėžė.stop();
    }
  }
  laukti(5, ms);
}

kampas

Raudono ir žalio kvadratų, suktų kartu, animacija, rodanti 360 laipsnių kampo reikšmę.

Savybė angle galima tikColor Codes irAprilTags
.
Tai nurodo, ar aptiktas Spalvos kodasarba „AprilTag yra orientuotas kitaip.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis spalvų kodą – žalią, o tada mėlyną. Vaizdo įraše rodomas žalias kubas, sudėtas ant mėlyno kubo. Spalvos kodo kampo reikšmė yra paryškinta ir rodo 87 laipsnius, o tai rodo, kad spalvos kodas yra orientuotas vertikaliai.

Galite matyti, ar robotas yra orientuotas kitaipspalvų kodo ar„AprilTag atžvilgiu, ir pagal tai priimti navigacijos sprendimus.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis spalvų kodą – žalią, o tada mėlyną. Vaizdo įraše matyti žalias kubas, sėdintis šalia mėlyno kubo, tačiau jie yra neįprastu kampu, palyginti su jutikliu. Spalvos kodo kampo reikšmė yra paryškinta ir rodoma kaip 0 laipsnių, o tai reiškia, kad spalvos kodo kampo nuskaityti negalima.

Pavyzdžiui, jeispalvos kodas neaptinkamas tinkamu kampu, robotas gali netinkamai paimti objekto, kurį jis vaizduoja.

rezultatas

balo savybė naudojama, kai AI regėjimo jutikliu aptinkamosDI klasifikacijos.

„AI Vision“ programa seka keturis objektus: du „BuckyBalls“ ir du „Rings“. Kiekvienas objektas yra identifikuojamas, surandamas ir apibrėžiamas, o tai rodo, kad sistema jį seka. Programa taip pat pateikia kiekvieno objekto dirbtinio intelekto klasifikavimo balą, šiame pavyzdyje kiekvienas balas yra 99 %.

Pasitikėjimo balas rodo, kiek užtikrintas dirbtinio intelekto regos jutiklis aptikimo metu. Šiame paveikslėlyje 99 % tikslumu galima identifikuoti šių keturių objektų dirbtinio intelekto klasifikacijas. Šį balą galite naudoti norėdami užtikrinti, kad jūsų robotas sutelktų dėmesį tik į labai patikimus aptikimus.

egzistuoja

Savybė exists naudojama norint aptikti, ar paskutinėje padarytoje momentinėje kopijoje buvo aptiktas nurodytas vizualinis parašas.

Tai leidžia patikrinti, ar ankstesnėje momentinėje kopijoje buvo aptikti kokie nors objektai. Ši savybė grąžins reikšmę „True“, kai objektas egzistuoja, ir „False“, kai objekto nėra.


objektų skaičius

„objectCount“ metodas grąžina aptiktų objektų skaičių paskutinėje momentinėje kopijoje.

Rodomas dirbtinio intelekto vaizdo jutiklis, sekantis du mėlynus kubus. Kubai aplink save turi sekimo stačiakampius, o vienas iš jų yra daug arčiau kameros.

Šiame pavyzdyje aptikti du objektai, kurių spalvos parašas yrao spalva – „Mėlyna“. Jie abu bus įtraukti į masyvą, kai bus naudojamas „takeSnapshot“ metodas.

Šis kodo fragmentas nuolat atnaujina EXP Brain su aptiktų objektų skaičiumi. Remiantis pateiktu pavyzdžiu, jis pakartotinai siųs reikšmę 2, nurodydamas, kad aptikti du objektai.

while (true) {
// Gauti visų mėlynų objektų momentinę kopiją.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Prieš ištraukiant duomenis, patikrinama, ar momentinėje kopijoje buvo aptiktas objektas.
jei (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
laukia(5, ms);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: