Questo articolo tratterà un progetto di esempio che visualizza un dashboard che riporta lo stato delle comunicazioni da robot a robot utilizzando VEXlink e anche lo stato a Jetson. Il progetto ai_demo è ospitato sul nostro Github . Questo progetto demo raccoglie i dati dal processore Jetson tramite connessione seriale USB. Una volta ricevuti, i dati vengono visualizzati sullo schermo del V5 Brain e trasmessi anche a un robot V5 partner collegato tramite VEXlink.

Nota: questo progetto richiede l'ultima versione dell'estensione VS Code per V5. Scarica qui l'estensione VS Code per V5 .


Comunicazioni cerebrali da NVIDIA Jetson Nano a VEX V5

Il processore Jetson contiene un'applicazione che raccoglie i seguenti dati dal software VEX AI:

Diagramma che illustra il processo di utilizzo di VEX AI, evidenziando i componenti chiave e il flusso di lavoro per un'implementazione efficace nei sistemi robotici V5.

Dati sulla posizione del robot:

  • Posizione X,Y del robot in metri dal centro del campo.
  • Azimut (direzione), elevazione (inclinazione), rotazione (rollio) del robot, tutti in radianti.

Dati di rilevamento oggetti (tre tipi):

Diagramma che illustra i componenti del sistema VEX AI e le loro interazioni, evidenziando come VEX AI migliori la funzionalità della robotica nella categoria V5.

Rilevamento immagine (tipo uno):
  • Questi dati rappresentano un oggetto rilevato dalla fotocamera Intel VEX AI.
  • Questi dati descrivono l'oggetto con riferimento all'immagine della telecamera.
  • I valori per X, Y, larghezza e altezza sono espressi in pixel. I valori dei pixel si riferiscono all'angolo in alto a sinistra della casella di rilevamento dell'immagine e dell'oggetto. La risoluzione dell'immagine è 640x480.

 

Diagramma che illustra le caratteristiche e i componenti di VEX AI, evidenziandone le applicazioni e i vantaggi nella robotica, come parte della descrizione della categoria V5.

Rilevamento mappa (tipo due):

  • Questi dati rappresentano la posizione dell'oggetto sul campo nello stesso sistema di coordinate del sensore GPS, riportato in metri.
  • Ogni oggetto contiene anche la posizione dell'oggetto rispetto al centro del campo. I valori per X e Y sono in unità di metri dal centro del campo nel rispettivo asse. Il valore di Z è metri dalle tessere del campo (altezza).

Oggetto di rilevamento (tipo tre):

Diagramma che illustra i componenti del sistema VEX AI e le loro interazioni, evidenziando le caratteristiche e le funzionalità principali all'interno della piattaforma robotica V5.

  • Questo incapsula tutte le informazioni sugli oggetti rilevati.
  • Ogni oggetto contiene un valore che rappresenta la classificazione dell'oggetto rilevato. (ID classe: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
  • Ogni oggetto contiene anche una probabilità che rappresenta la fiducia dell'IA VEX nel rilevamento. Questo avviene dopo un filtro nel model.py che rimuove i rilevamenti di bassa probabilità.
  • Inoltre, la profondità dell'oggetto viene segnalata in metri dalla VEX AI Intel Camera.
  • Il rilevamento dell'immagine e il rilevamento della mappa sono associati a ciascun oggetto per rappresentare le coordinate dell'oggetto sull'immagine e nel mondo reale.

Una ripartizione del programma ai_demo:

Main.cpp

Diagramma che illustra le caratteristiche e le funzionalità di VEX AI nella categoria V5, mostrando come utilizzare efficacemente la tecnologia per applicazioni robotiche.

Lo standard include per i progetti VEX:

Diagramma che illustra i componenti del sistema VEX AI e le loro interazioni, come parte della descrizione della categoria V5 nella sezione Utilizzo di VEX AI.

Dichiara un'istanza della classe Jetson. Questa classe viene utilizzata per inviare richieste di dati a Jetson e per ricevere dati tramite la connessione seriale USB.

#define MANAGER_ROBOT 1

Diagramma che illustra le caratteristiche e i componenti di VEX AI nel contesto della robotica V5, evidenziando le funzionalità chiave e le linee guida per l'utilizzo.

Dichiara un'istanza della classe robot_link. Questo oggetto verrà utilizzato per connettere e trasferire dati tra questo robot e un robot partner. Questo stesso progetto può essere scaricato su due robot separati. Un robot avrà bisogno della linea:

//#definisce MANAGER_ROBOT 1

Prima di caricare il codice sul secondo robot, dovrai commentare quella riga:

La classe robot_link configura il VEXlink del robot e gestisce la trasmissione e la ricezione dei dati tra i due robot. Non entreremo nei dettagli in questo articolo su come funziona quella classe. Sarebbe una buona idea capire prima come funziona VEXlink. Per informazioni più dettagliate sull'utilizzo dell'API VEXlink V5, questo documento spiega le nuove librerie e come utilizzarle in modo efficace per la comunicazione tra robot.

  • Gestori degli eventi di competizione

    Diagramma che illustra le caratteristiche e i componenti di VEX AI nel sistema robotico V5, evidenziandone le capacità di migliorare le prestazioni e la programmazione del robot.

    Una delle maggiori differenze tra VAIC e VRC è che non esiste un periodo di controllo del conducente. Esistono invece due periodi autonomi, il periodo di isolamento e il periodo di interazione. In questo esempio, sono presenti routine separate per ciascun periodo autonomo. Poiché l'API VEX non supporta due diversi callback, nel programma deve essere presente un flag per determinare quale routine deve essere eseguita. In questo programma di esempio, il "firstAutoFlag" viene utilizzato per richiamare la funzione di isolamento la prima volta che l'autonomo viene abilitato e la funzione di interazione quando l'autonomo viene abilitato per la seconda volta. Una cosa da notare è che se per qualche motivo la partita dovesse essere reimpostata, il programma demo dovrebbe essere riavviato in modo che il primo AutoFlag possa essere reimpostato.

  • Principale()

    Diagramma che illustra le caratteristiche e le funzionalità di VEX AI nella categoria V5, evidenziando i componenti chiave e le loro interazioni per una programmazione e un'automazione robotica avanzate.

    Questo è il compito principale di questo progetto. Inizia chiamando vexcodeInit() per impostare correttamente l'ambiente VEXcode. Successivamente, viene dichiarato un oggetto AI_RECORD locale per archiviare i dati che riceviamo da Jetson. Viene inoltre impostata un'attività separata per gestire l'aggiornamento dello schermo con i dati più recenti. Il codice per tale attività è contenuto nel file dashboard.cpp. La richiamata autonoma viene registrata anche per essere gestita quando vengono avviati i periodi autonomi.

    Il ciclo while() principale inizia copiando i dati più recenti dall'oggetto jetson_comms nel nostro oggetto AI_RECORD locale. Quindi trasmette le informazioni sulla posizione del robot all'oggetto collegamento in modo che possano essere trasmesse al nostro robot partner. Una volta terminata l'elaborazione dei dati, richiede altri dati da Jetson e dorme per 66 millisecondi. La frequenza di polling per questi dati è 15Hz. Non c'è motivo di eseguire il polling più velocemente poiché i dati del sistema AI si aggiornano a circa 15Hz.

    Nota: i dati della mappa Jetson devono essere richiesti solo da una singola attività.

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

Last Updated: