Kodning av VEX AI-roboten

Den här artikeln kommer att behandla ett exempelprojekt som visar en instrumentpanel som rapporterar status för robot-till-robot-kommunikation med hjälp av VEXlink och även statusen till Jetson. ai_demo-projektet finns på vår Github. Detta demoprojekt samlar in data från Jetson-processorn via en seriell USB-anslutning. När data har mottagits visas de på V5 Brains skärm och överförs även till en partner-V5-robot som är ansluten via VEXlink.

Obs: Detta projekt kräver den senaste versionen av VS Code Extension för V5. Ladda ner VS-kodtillägget för V5 här.


NVIDIA Jetson Nano till VEX V5 Brain Communications

Jetson-processorn innehåller en applikation som samlar in följande data från VEX AI-programvaran:

Diagram som illustrerar processen för att använda VEX AI, och visar viktiga komponenter och arbetsflöde för effektiv implementering i V5-robotsystem.

Robotens platsdata:

  • Robotens X,Y-position i meter från fältets centrum.
  • Robotens azimut (kurs), höjd (lutning) och rotation (rullning), allt i radianer.

Objektdetekteringsdata (tre typer):

Diagram som illustrerar VEX AI-systemkomponenterna och deras interaktioner, och visar hur VEX AI förbättrar robotfunktionaliteten i V5-kategorin.

Bilddetektering (typ ett):
  • Denna data representerar ett objekt som detekterats av VEX AI Intel-kameran.
  • Denna data beskriver objektet med hänvisning till kamerabilden.
  • Värden för X, Y, bredd och höjd anges i pixlar. Pixelvärdena refererar till det övre vänstra hörnet av bild- och objektdetekteringsrutan. Bildupplösningen är 640x480.

 

Diagram som illustrerar funktionerna och komponenterna i VEX AI, och belyser dess tillämpningar och fördelar inom robotik, som en del av V5-kategoribeskrivningen.

Kartdetektering (typ två):

  • Denna data representerar objektets plats på fältet i samma koordinatsystem som GPS-sensorn, rapporterad i meter.
  • Varje objekt innehåller också objektets position i förhållande till fältets centrum. Värdena för X och Y är i meter från fältets centrum på respektive axel. Värdet på Z är meter från fältplattorna (höjd).

Detektionsobjekt (typ tre):

Diagram som illustrerar VEX AI-systemkomponenter och deras interaktioner, med fokus på viktiga funktioner och funktioner inom V5-robotplattformen.

  • Detta sammanfattar all information om de detekterade objekten.
  • Varje objekt innehåller ett värde som representerar klassificeringen av det detekterade objektet. (Klass-ID: 0 = GreenTriball, 1 = RedTriball, 2 = BlueTriball)
  • Varje objekt innehåller också en sannolikhet som representerar VEX AI:s tillförlitlighet i detekteringen. Detta är efter ett filter i model.py som tar bort detektioner med låg sannolikhet.
  • Dessutom rapporteras objektets djup i meter från VEX AI Intel-kameran.
  • Bilddetektering och kartdetektering är kopplade till varje objekt för att representera objektets koordinater på bilden såväl som i verkligheten.

En sammanfattning av ai_demo-programmet:

Huvud.cpp

Diagram som illustrerar funktionerna och funktionaliteterna hos VEX AI i V5-kategorin och visar hur man effektivt använder tekniken för robotapplikationer.

Standard inkluderar för VEX-projekt:

Diagram som illustrerar VEX AI-systemkomponenterna och deras interaktioner, som en del av V5-kategoribeskrivningen i avsnittet Använda VEX AI.

Deklarera en instans av Jetson-klassen. Denna klass används för att skicka dataförfrågningar till Jetson samt ta emot data via USB-seriell anslutning.

#define MANAGER_ROBOT 1

Diagram som illustrerar funktionerna och komponenterna i VEX AI i samband med V5-robotteknik, med framhävning av viktiga funktioner och användningsriktlinjer.

Deklarera en instans av robot_link-klassen. Det här objektet kommer att användas för att ansluta och överföra data mellan den här roboten och en partnerrobot. Samma projekt kan laddas ner till två separata robotar. En robot behöver ha linjen:

//#definiera MANAGER_ROBOT 1

Innan du laddar koden till den andra roboten måste du kommentera bort den raden:

Klassen robot_link konfigurerar robotens VEXlink och hanterar överföring och mottagning av data mellan de två robotarna. Vi kommer inte att gå in på detaljer i den här artikeln om hur den klassen fungerar. Det vore en bra idé att först förstå hur VEXlink fungerar. För mer detaljerad information om hur man använder V5 VEXlink API, förklarar detta dokument de nya biblioteken och hur man använder dem effektivt för robot-till-robot-kommunikation.

  • Tävlingsansvariga

    Diagram som illustrerar funktionerna och komponenterna i VEX AI i V5-robotsystemet, och belyser dess möjligheter att förbättra robotens prestanda och programmering.

    En av de största skillnaderna mellan VAIC och VRC är att det inte finns någon kontrollperiod för föraren. Istället finns det två autonoma perioder, isoleringsperioden och interaktionsperioden. I det här exemplet finns det separata rutiner för varje autonom period. Eftersom VEX API inte stöder två olika återanrop måste det finnas en flagga i programmet för att avgöra vilken rutin som ska köras. I det här exempelprogrammet används "firstAutoFlag" för att anropa isoleringsfunktionen första gången autonomous aktiveras, och interaktionsfunktionen när autonomous aktiveras för andra gången. En sak att notera är att om matchen av någon anledning behöver återställas, måste demoprogrammet startas om så att firstAutoFlag kan återställas.

  • Huvudsaklig()

    Diagram som illustrerar funktionerna och funktionaliteterna hos VEX AI inom V5-kategorin, med framhävning av viktiga komponenter och deras interaktioner för förbättrad robotprogrammering och automation.

    Detta är den viktigaste uppgiften för det här projektet. Det börjar med att anropa vexcodeInit() för att korrekt konfigurera VEXcode-miljön. Därefter deklareras ett lokalt AI_RECORD-objekt för att lagra de data vi tar emot från Jetson. En separat uppgift är också konfigurerad för att hantera uppdatering av skärmen med den senaste informationen. Koden för den uppgiften finns i filen dashboard.cpp. Det autonoma återanropet registreras också för att hantera när de autonoma perioderna initieras.

    Huvudslingan while() börjar med att kopiera den senaste informationen från jetson_comms-objektet till vårt lokala AI_RECORD-objekt. Den skickar sedan robotens platsinformation till länkobjektet så att den kan överföras till vår partnerrobot. När den är klar med att bearbeta data begär den mer data från Jetson och sover i 66 millisekunder. Pollingfrekvensen för dessa data är 15 Hz. Det finns ingen anledning att göra en snabbare poll eftersom AI-systemets data uppdateras vid cirka 15 Hz.

    Anmärkning: Jetson-kartdata behöver bara begäras av en enda uppgift.

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

Last Updated: