Tämä artikkeli kattaa esimerkkiprojektin, joka näyttää kojelaudan, joka raportoi robottien ja robottien välisen viestinnän tilan VEXlinkin avulla sekä tilan Jetsonille. Ai_demo-projektia isännöi Github. Tämä demoprojekti kerää tietoja Jetson-prosessorista USB-sarjaliitännän kautta. Kun tiedot on vastaanotettu, ne näkyvät V5 Brainin näytöllä ja lähetetään myös kumppani V5-robotille, joka on yhdistetty VEXlinkin kautta.
Huomautus: Tämä projekti vaatii uusimman version VS Code Extension for V5. Lataa VS Code Extension for V5 tästä.
NVIDIA Jetson Nanosta VEX V5 Brain Communicationsille
Jetson-prosessori sisältää sovelluksen, joka kerää seuraavat tiedot VEX AI -ohjelmistosta:
Robotin sijaintitiedot:
- Robotin X,Y sijainti metreinä pellon keskustasta.
- Robotin atsimuutti (suunta), korkeus (pituus), kierto (rulla) kaikki radiaaneina.
Objektin tunnistustiedot (kolme tyyppiä):
- Nämä tiedot edustavat VEX AI Intel -kameran havaitsemaa kohdetta.
- Nämä tiedot kuvaavat kohdetta viitaten kameran kuvaan.
- X:n, Y:n, leveyden ja korkeuden arvot ovat pikseleinä. Pikseliarvot viittaavat kuvan ja kohteen tunnistusruudun vasempaan yläkulmaan. Kuvan resoluutio on 640x480.
Kartan tunnistus (tyyppi kaksi):
- Nämä tiedot edustavat kohteen sijaintia pellolla samassa koordinaattijärjestelmässä kuin GPS-sensori, metreinä.
- Jokainen objekti sisältää myös kohteen sijainnin suhteessa kentän keskipisteeseen. X:n ja Y:n arvot ovat metreinä pellon keskipisteestä vastaavalla akselillaan. Z:n arvo on metriä peltolaatoista (korkeus).
Havaintoobjekti (tyyppi kolme):
- Tämä kapseloi kaikki tiedot havaituista kohteista.
- Jokainen objekti sisältää arvon, joka edustaa havaitun kohteen luokittelua. (Luokan tunnus: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Jokainen objekti sisältää myös todennäköisyyden, joka edustaa VEX AI:n luottamusta ilmaisuun. Tämä tapahtuu model.py-tiedoston suodattimen jälkeen, joka poistaa alhaisen todennäköisyyden havainnot.
- Lisäksi kohteen syvyys raportoidaan metreinä VEX AI Intel -kamerasta.
- Kuvantunnistus ja kartantunnistus on liitetty jokaiseen kohteeseen edustamaan kohteen koordinaatit kuvassa sekä todellisessa maailmassa.
Ai_demo-ohjelman erittely:
Main.cpp
Standardi sisältää VEX-projekteille:
Ilmoita Jetson-luokan esiintymä. Tätä luokkaa käytetään datapyyntöjen lähettämiseen Jetsonille sekä tietojen vastaanottamiseen USB-sarjaliitännän kautta.
#define MANAGER_ROBOT 1
Ilmoita robot_link-luokan esiintymä. Tätä objektia käytetään yhdistämään ja siirtämään tietoja tämän robotin ja kumppanirobotin välillä. Tämä sama projekti voidaan ladata kahdelle erilliselle robotille. Yksi robotti tarvitsee rivin:
//#define MANAGER_ROBOT 1
Ennen kuin lataat koodin toiseen robottiin, sinun on kommentoitava tämä rivi:
Robot_link-luokka perustaa robotin VEXlinkin ja hoitaa datan lähettämisen ja vastaanottamisen kahden robotin välillä. Emme aio mennä tässä artikkelissa yksityiskohtiin siitä, kuinka tämä luokka toimii. Olisi hyvä idea ensin ymmärtää, miten VEXlink toimii. Jos haluat lisätietoja V5 VEXlink API:n käytöstä, tässä asiakirjassa selitetään uudet kirjastot ja kuinka niitä käytetään tehokkaasti robottien välisessä viestinnässä.
-
Kilpailutapahtumien ohjaajat
Yksi suurimmista eroista VAIC:n ja VRC:n välillä on, että kuljettajan valvontajaksoa ei ole. Sen sijaan on kaksi autonomista jaksoa, eristysjakso ja vuorovaikutusjakso. Tässä esimerkissä jokaiselle autonomiselle ajanjaksolle on erilliset rutiinit. Koska VEX API ei tue kahta eri takaisinsoittoa, ohjelmassa on oltava lippu, joka määrittää suoritettavan rutiinin. Tässä esimerkkiohjelmassa "firstAutoFlag" -toimintoa käytetään kutsumaan eristystoimintoa, kun autonominen otetaan käyttöön ensimmäisen kerran, ja vuorovaikutustoimintoa, kun autonominen otetaan käyttöön toisen kerran. Yksi huomioitava asia on, että jos ottelu jostain syystä on nollattava, demo-ohjelma on käynnistettävä uudelleen, jotta ensimmäinen AutoFlag voidaan nollata.
-
Pää()
Tämä on tämän projektin päätehtävä. Se alkaa kutsumalla vexcodeInit() määrittääkseen VEXcode-ympäristön oikein. Seuraavaksi paikallinen AI_RECORD-objekti määritetään tallentamaan Jetsonilta saamamme tiedot. Erillinen tehtävä on myös asetettu käsittelemään näytön päivittämistä uusimmilla tiedoilla. Tehtävän koodi on dashboard.cpp-tiedostossa. Autonominen takaisinsoitto on myös rekisteröity käsittelemään autonomisten jaksojen alkaessa.
Main while()-silmukka alkaa kopioimalla uusimmat tiedot jetson_comms-objektista paikalliseen AI_RECORD-objektiin. Sitten se välittää robotin sijaintitiedot linkkiobjektille, jotta se voidaan välittää kumppanirobotillemme. Kun se on käsitellyt tiedot, se pyytää lisää tietoja Jetsonilta ja nukkuu 66 millisekuntia. Näiden tietojen kyselytaajuus on 15 Hz. Ei ole mitään syytä kyselyyn nopeammin, koska tekoälyjärjestelmän tiedot päivittyvät noin 15 Hz:n taajuudella.
Huomautus: Jetson-karttatietoja tarvitsee pyytää vain yksi tehtävä.