Kodavimas naudojant dirbtinio intelekto regos jutiklį VEXcode V5 C++ kalba

Į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 AI regėjimo jutiklio komanda prasidės sukonfigūruoto AI 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ų įtraukti į 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 norint pateikti informaciją apie tą objektą. 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 regos 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 kvadratiniai identifikavimo žymekliai, pažymėti ID 0, 9 ir 3, kurių kiekvieno atitinkamos koordinatės ir dydžio matavimai rodomi baltame tekste. ID 0 yra kairėje, ID 9 – dešinėje, o ID 3 – apačioje centre. Kiekvienas žymeklis kvadrato viduje turi unikalų nespalvotą raštą.

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

Konkrečių „AprilTags“ identifikavimas 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.

Paveikslėlyje atpažinti du kamuoliukai ir du žiedai, o etiketėse nurodyta jų vieta, dydis ir rezultatas. Raudonas rutulys yra kairėje, mėlynas rutulys – dešinėje, žalias žiedas yra apačioje kairėje, o raudonas žiedas – apačioje dešinėje. Kiekvienas objektas pažymėtas baltu langeliu, o tokia informacija kaip X ir Y koordinatės, plotis, aukštis ir 99 % įvertinimas rodomi baltu tekstu.

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. žymas 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.

Mėlynas Buckyball'as, sekamas kompiuterinės regos sistema. Objektas apibrėžtas baltu kvadratu, o kontūro viduje yra mažesnis raudonas kvadratas, supantis centre esantį baltą kryžių. Viršutiniame kairiajame vaizdo kampe esantis užrašas rodo, kad objektas yra mėlynas, jo koordinatės X:176, Y:117, o matmenys P:80, A:78.

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

Du mėlyni kubiniai objektai, sekami regėjimo sistema. Viršutinis objektas pažymėtas koordinatėmis X:215, Y:70 ir matmenimis W:73, H:84, baltu kontūru ir centre esančiu baltu kryžiumi. Apatinis objektas pažymėtas koordinatėmis X:188, Y:184, o matmenys W:144, H:113, taip pat apibrėžti baltai su centre esančiu baltu kryžiumi.

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

Šiame pavyzdyje, kadangi dirbtinio intelekto regos 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.

Mėlyną Buckyball'ą seka regėjimo sistema. Objektą supa baltas kontūras, o kontūro viduje – centruotas baltas kryžius. Viršutiniame kairiajame kampe esanti etiketė nurodo objekto spalvą – mėlyną, koordinates X:176, Y:117 ir matmenis W:80, H:78. Mažas raudonas kvadratas paryškina objekto viršutinį kairįjį kampą.

„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.

Paveikslėlyje pavaizduotas mėlynas Buckyball su baltu kvadratiniu kontūru. Viršutiniame kairiajame kampe yra etiketė, nurodanti, kad tai mėlynas objektas, kurio koordinatės X:176, Y:117, o matmenys P:80, A:78. Raudonos rodyklės žymi objekto plotį ir aukštį.

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

Du mėlyni kubiniai objektai, kuriuos seka vizualinio atpažinimo sistema. Viršutinis kubas turi baltą kontūrą su užrašu, nurodančiu jo padėtį: X:215, Y:70, o matmenys: P:73, Aukštis:84. Apatinis kubas turi panašų baltą kontūrą su užrašu X:188, Y:184 ir matmenimis W:144, H:113. Kiekvienas kubas turi centre esantį baltą kryžių, kuris greičiausiai nurodo sekimo centrą. Etiketės paryškina kiekvieno objekto matavimus ir sekimo duomenis.

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

Besisukantis GIF paveikslėlis, kuriame rodomi raudoni ir žali blokai. Kai blokeliai yra idealiai horizontaliai išdėstyti nuo raudonos iki žalios spalvos, jie rodomi kaip 0 laipsnių. Jei raudonas blokas yra vertikaliai virš žalio bloko, jis yra 90 laipsnių kampu. Jei blokeliai horizontaliai yra žali arba raudoni, tai yra 180 laipsnių. Jei žalias blokas yra vertikaliai virš raudono bloko, tai yra 20 laipsnių.

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

Dviejų kubelių krūvelė, vienas žalias viršuje ir vienas mėlynas apačioje, sekama regėjimo sistema. Abu kubus supa baltas kontūras, o žalio kubo centre yra baltas kryžius. Vaizdo apačioje esančioje etiketėje rodoma „Green_Blue A:87°“, nurodanti aptiktas spalvas ir kampo matavimą. Žemiau koordinatės išdėstytos taip: X:117, Y:186, o matmenys W:137, H:172 rodo sudėtų kubelių padėtį ir dydį kadre.

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

Du kubai, vienas žalias ir vienas mėlynas, sudėti greta ir stebimi vaizdo sistemos. Abu kubus supa baltas kontūras, o centre – baltas kryžius. Viršutiniame kairiajame kampe esanti etiketė nurodo „Green_Blue A:0°“, nurodant aptiktas spalvas ir kampo matavimą. Žemiau koordinatės rodomos kaip X:150, Y:102, o matmenys W:179, H:109 rodo kubelių padėtį ir dydį kadre.

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.

Paveikslėlyje matyti keturi objektai, kuriuos seka regėjimo sistema: du rutuliai ir du žiedai. Raudonas rutulys pažymėtas koordinatėmis X:122, Y:84, W:67, H:66 ir 99 % rezultatu. Mėlynas kamuoliukas turi X:228, Y:86, W:70, H:68, o jo balas yra 99 %. Žalias žiedas turi koordinates X:109, Y:186, W:98, H:92 ir 99 % balą. Raudonas žiedas pažymėtas X:259, Y:187, W:89, H:91, o jo įvertinimas yra 99 %. Kiekvienas objektas yra pažymėtas balta spalva, nurodant sekimo tikslumą.

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.

„AI Vision Utility“ sąsaja su dviem mėlynais kubeliais, aptiktais kairėje pusėje, kiekvienas pažymėtas X ir Y koordinatėmis bei matmenimis. Sistema prijungta, o „AprilTags“ įjungtos, o DI klasifikacija išjungta. Dešinėje pusėje rodomi mėlynos spalvos nustatymai su reguliuojamais atspalvio ir sodrumo diapazonais, atitinkamai nustatytais ties 22 ir 0,34. Yra galimybė pridėti arba nustatyti spalvą ir sustabdyti vaizdo įrašą. Programinė-aparatinė įranga yra atnaujinta, veikia 1.0.0.b16 versija, o apačioje yra uždarymo mygtukas.

Š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: