Codering van de VEX AI-robot

Dit artikel behandelt een voorbeeldproject dat een dashboard weergeeft dat de status rapporteert voor robot-robotcommunicatie met behulp van VEXlink en ook de status naar de Jetson. Het ai_demo-project wordt gehost op onze Github. Dit demoproject verzamelt gegevens van de Jetson-processor via een seriële USB-verbinding. Zodra de gegevens zijn ontvangen, worden deze weergegeven op het scherm van de V5 Brain en ook verzonden naar een partner V5-robot die is verbonden via VEXlink.

Opmerking: Dit project vereist de nieuwste versie van de VS Code Extension voor V5. Download hier de VS Code-extensie voor V5 .


NVIDIA Jetson Nano naar VEX V5 hersencommunicatie

De Jetson-processor bevat een applicatie die de volgende gegevens verzamelt uit de VEX AI-software:

OverUnder.png

Robotlocatiegegevens:

  • De X,Y-locatie van de robot in meters vanaf het midden van het veld.
  • Robot's azimut (richting), hoogte (hoogte), rotatie (rol) allemaal in radialen.

Objectdetectiegegevens (drie typen):

Pixel (0,0).png

Beelddetectie (type één):
  • Deze gegevens vertegenwoordigen een gedetecteerd object door de VEX AI Intel Camera.
  • Deze gegevens beschrijven het object aan de hand van het camerabeeld.
  • Waarden voor X, Y, breedte en hoogte zijn in de eenheden van pixels. De pixelwaarden hebben betrekking op de linkerbovenhoek van het afbeeldings- en objectdetectievak. De beeldresolutie is 640 x 480.

 

AI XY (1).png

Kaartdetectie (type twee):

  • Deze gegevens vertegenwoordigen de locatie van het object op het veld in hetzelfde coördinatensysteem als de GPS-sensor, weergegeven in meters.
  • Elk object bevat ook de locatie van het object ten opzichte van het midden van het veld. Waarden voor X en Y zijn in meters vanaf het midden van het veld in hun respectieve as. De waarde van Z is meter vanaf de veldtegels (hoogte).

Detectieobject (type drie):

Structuren.PNG

  • Hierin wordt alle informatie over de gedetecteerde objecten samengevat.
  • Elk object bevat een waarde die de classificatie van het gedetecteerde object vertegenwoordigt. (Klasse-ID: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
  • Elk object bevat ook een waarschijnlijkheid die het vertrouwen van de VEX AI in de detectie vertegenwoordigt. Dit is na een filter in model.py dat detecties met een lage waarschijnlijkheid verwijdert.
  • Bovendien wordt de diepte van het object in meters gerapporteerd door de VEX AI Intel Camera.
  • De beelddetectie en kaartdetectie zijn aan elk object gekoppeld om de coördinaten van het object op het beeld en in de echte wereld weer te geven.

Een overzicht van het ai_demo-programma:

Hoofd.cpp

afbeelding5.png

Standaard omvat voor VEX-projecten:

afbeelding7.png

Declareer een instantie van de Jetson-klasse. Deze klasse wordt gebruikt om verzoeken om gegevens naar de Jetson te verzenden en om gegevens te ontvangen via de seriële USB-verbinding.

#define MANAGER_ROBOT 1

Define_manager_robot_1.png

Declareer een instantie van de robot_link-klasse. Dit object zal worden gebruikt om gegevens te verbinden en over te dragen tussen deze robot en een partnerrobot. Ditzelfde project kan worden gedownload naar twee afzonderlijke robots. Eén robot heeft de volgende regel nodig:

//#define MANAGER_ROBOT 1

Voordat u de code op de tweede robot laadt, moet u die regel becommentariëren:

De klasse robot_link stelt de VEXlink van de robot in en zorgt voor het verzenden en ontvangen van gegevens tussen de twee robots. We gaan in dit artikel niet in detail ingaan op hoe die klasse werkt. Het is een goed idee om eerst te begrijpen hoe de VEXlink werkt. Voor meer gedetailleerde informatie over het gebruik van de V5 VEXlink API, legt dit document nieuwe bibliotheken uit en hoe u deze effectief kunt gebruiken voor robot-tot-robot-communicatie.

  • Competitie Evenementbehandelaars

    eersteAutoFlag.png

    Een van de grootste verschillen tussen VAIC en VRC is dat er geen controleperiode voor de bestuurder is. In plaats daarvan zijn er twee autonome perioden: de isolatieperiode en de interactieperiode. In dit voorbeeld zijn er voor elke autonome periode afzonderlijke routines. Omdat de VEX API geen twee verschillende callbacks ondersteunt, moet er een vlag in het programma aanwezig zijn om te bepalen welke routine moet worden uitgevoerd. In dit voorbeeldprogramma wordt de “firstAutoFlag” gebruikt om de isolatiefunctie aan te roepen wanneer autonoom voor de eerste keer wordt ingeschakeld, en de interactiefunctie wanneer autonoom voor de tweede keer wordt ingeschakeld. Eén ding om op te merken is dat als de wedstrijd om de een of andere reden opnieuw moet worden ingesteld, het demoprogramma opnieuw moet worden gestart, zodat de eerste AutoFlag opnieuw kan worden ingesteld.

  • Voornaamst()

    Hoofdbestanddeel (1).PNG

    Dit is de hoofdtaak van dit project. Het begint met het aanroepen van vexcodeInit() om de VEXcode-omgeving correct in te stellen. Vervolgens wordt een lokaal AI_RECORD-object gedeclareerd om de gegevens op te slaan die we van de Jetson ontvangen. Er is ook een aparte taak ingesteld om het scherm bij te werken met de meest actuele gegevens. De code voor die taak bevindt zich in het bestand dashboard.cpp. De autonome callback wordt ook geregistreerd om af te handelen wanneer de autonome perioden worden geïnitieerd.

    De belangrijkste while()-lus begint met het kopiëren van de nieuwste gegevens van het jetson_comms-object naar ons lokale AI_RECORD-object. Vervolgens geeft het de locatie-informatie van de robot door aan het linkobject, zodat deze naar onze partnerrobot kan worden verzonden. Zodra het klaar is met het verwerken van de gegevens, vraagt ​​het vervolgens om meer gegevens van de Jetson en slaapt het gedurende 66 milliseconden. De pollingsnelheid voor deze gegevens is 15 Hz. Er is geen reden om sneller te peilen, aangezien de gegevens van het AI-systeem worden bijgewerkt op ongeveer 15 Hz.

    Opmerking: de Jetson-kaartgegevens hoeven slechts door één enkele taak te worden opgevraagd.

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

Last Updated: