Šiame straipsnyje bus pateiktas pavyzdinis projektas, kuriame rodoma prietaisų skydelis, kuriame pranešama apie roboto ir roboto ryšių, naudojant VEXlink, būseną ir Jetson būseną. Projektas ai_demo yra priglobtas mūsų Github. Šis demonstracinis projektas renka duomenis iš Jetson procesoriaus per USB nuoseklųjį ryšį. Kai duomenys gaunami, jie rodomi V5 Brain ekrane ir taip pat perduodami partneriui V5 robotui, kuris yra prijungtas per VEXlink.
pastaba: Šiam projektui reikalinga naujausia V5 skirto VS kodo plėtinio versija. Atsisiųskite V5 VS kodo plėtinį čia.
NVIDIA Jetson Nano į VEX V5 Brain Communications
„Jetson“ procesoriuje yra programa, kuri renka šiuos duomenis iš VEX AI programinės įrangos:
Roboto vietos duomenys:
- Roboto X,Y vieta metrais nuo lauko centro.
- Roboto azimutas (kryptis), aukštis (žygis), sukimasis (riedėjimas) – viskas radianais.
Objekto aptikimo duomenys (trys tipai):
- Šie duomenys rodo VEX AI Intel Camera aptiktą objektą.
- Šie duomenys apibūdina objektą atsižvelgiant į fotoaparato vaizdą.
- X, Y, pločio ir aukščio reikšmės pateikiamos pikselių vienetais. Pikselių reikšmės nurodytos viršutiniame kairiajame vaizdo ir objekto aptikimo laukelio kampe. Vaizdo skiriamoji geba yra 640x480.
Žemėlapio aptikimas (antrasis tipas):
- Šie duomenys rodo objekto vietą lauke toje pačioje koordinačių sistemoje kaip ir GPS jutiklis, metrais.
- Kiekviename objekte taip pat yra objekto vieta lauko centro atžvilgiu. X ir Y reikšmės nurodytos metrais nuo lauko centro atitinkamoje ašyje. Z reikšmė yra metrai nuo lauko plytelių (aukštis).
Aptikimo objektas (trečias tipas):
- Tai apima visą informaciją apie aptiktus objektus.
- Kiekviename objekte yra reikšmė, nurodanti aptikto objekto klasifikaciją. (Klasės ID: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Kiekviename objekte taip pat yra tikimybė, kuri parodo VEX AI pasitikėjimą aptikimu. Tai atliekama po model.py filtro, kuris pašalina mažos tikimybės aptikimus.
- Be to, „VEX AI Intel Camera“ praneša objekto gylį metrais.
- Vaizdo aptikimas ir žemėlapio aptikimas yra pritvirtinti prie kiekvieno objekto, kad atvaizduotų objekto koordinates vaizde ir realiame pasaulyje.
Programos ai_demo suskirstymas:
Pagrindinis.cpp
Standartas apima VEX projektus:
Paskelbkite Jetson klasės atvejį. Ši klasė naudojama duomenų užklausoms siųsti į Jetson, taip pat duomenims gauti per USB nuoseklųjį ryšį.
#define MANAGER_ROBOT 1
Deklaruokite klasės robot_link egzempliorių. Šis objektas bus naudojamas prijungti ir perduoti duomenis tarp šio roboto ir partnerio roboto. Tą patį projektą galima atsisiųsti į du atskirus robotus. Vienam robotui reikės šios eilutės:
//#define MANAGER_ROBOT 1
Prieš įkeldami kodą į antrąjį robotą, turėsite pakomentuoti šią eilutę:
Robot_link klasė nustato roboto VEXlink ir tvarko duomenų perdavimą bei priėmimą tarp dviejų robotų. Šiame straipsnyje mes nesigilinsime į tai, kaip ši klasė veikia. Būtų gera idėja pirmiausia suprasti, kaip veikia VEXlink. Norėdami gauti išsamesnės informacijos apie V5 VEXlink API naudojimą, šiame dokumente paaiškinamos naujos bibliotekos ir kaip efektyviai jas naudoti robotų ir robotų ryšiui.
-
Varžybų renginių vedėjai
Vienas didžiausių VAIC ir VRC skirtumų yra tas, kad nėra vairuotojo kontrolės laikotarpio. Vietoj to yra du savarankiški laikotarpiai – izoliacijos laikotarpis ir sąveikos laikotarpis. Šiame pavyzdyje kiekvienam autonominiam laikotarpiui yra atskira tvarka. Kadangi VEX API nepalaiko dviejų skirtingų atgalinių skambučių, programoje turi būti vėliavėlė, leidžianti nustatyti, kuri tvarka turi būti vykdoma. Šioje pavyzdinėje programoje „firstAutoFlag“ naudojama išskirti funkcijai iškviesti, kai pirmą kartą įjungiama autonominė funkcija, ir sąveikos funkcijai, kai autonominė įjungiama antrą kartą. Vienas dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad jei dėl kokios nors priežasties atitiktį reikia nustatyti iš naujo, demonstracinė programa turi būti paleista iš naujo, kad būtų galima iš naujo nustatyti pirmąją AutoFlag.
-
Pagrindinis ()
Tai yra pagrindinė šio projekto užduotis. Jis pradedamas iškvietus vexcodeInit(), kad būtų tinkamai nustatyta VEXcode aplinka. Tada deklaruojamas vietinis AI_RECORD objektas, kuriame saugomi duomenys, kuriuos gauname iš „Jetson“. Taip pat nustatyta atskira užduotis, skirta atnaujinti ekraną naujausiais duomenimis. Tos užduoties kodas yra faile dashboard.cpp. Autonominis atgalinis skambutis taip pat užregistruotas, kad būtų galima apdoroti, kai inicijuojami autonominiai laikotarpiai.
Pagrindinė while() kilpa prasideda nukopijuojant naujausius duomenis iš objekto jetson_comms į vietinį AI_RECORD objektą. Tada jis perduoda roboto buvimo vietos informaciją nuorodos objektui, kad ją būtų galima perduoti mūsų partneriui robotui. Baigęs apdoroti duomenis, jis paprašo daugiau duomenų iš „Jetson“ ir miega 66 milisekundes. Šių duomenų apklausos dažnis yra 15 Hz. Nėra jokios priežasties apklausti greičiau, nes AI sistemos duomenys atnaujinami maždaug 15 Hz.
pastaba: Jetson žemėlapio duomenų reikia paprašyti tik atliekant vieną užduotį.