Codage du robot VEX AI

Cet article couvrira un exemple de projet qui affiche un tableau de bord signalant l'état des communications de robot à robot à l'aide de VEXlink ainsi que l'état du Jetson. Le projet ai_demo est hébergé sur notre Github. Ce projet de démonstration collecte les données du processeur Jetson via une connexion série USB. Une fois les données reçues, elles sont affichées sur l'écran du V5 Brain et également transmises à un robot partenaire V5 connecté via VEXlink.

Remarque : Ce projet nécessite la dernière version de l'extension VS Code pour la V5. Téléchargez l'extension VS Code pour V5 ici.


Communications cérébrales NVIDIA Jetson Nano vers VEX V5

Le processeur Jetson contient une application qui collecte les données suivantes à partir du logiciel VEX AI :

Au-dessusDessous.png

Données de localisation du robot :

  • Emplacement X,Y du robot en mètres du centre du champ.
  • Azimut (cap), élévation (pas), rotation (roulis) du robot, le tout en radians.

Données de détection d'objets (trois types) :

Pixel (0,0).png

Détection d'image (type 1) :
  • Ces données représentent un objet détecté par la caméra VEX AI Intel.
  • Ces données décrivent l'objet en référence à l'image de la caméra.
  • Les valeurs de X, Y, de largeur et de hauteur sont exprimées en pixels. Les valeurs des pixels font référence au coin supérieur gauche de la zone de détection d'image et d'objet. La résolution de l'image est de 640x480.

 

IA XY (1).png

Détection de carte (type deux) :

  • Ces données représentent l'emplacement de l'objet sur le terrain dans le même système de coordonnées que le capteur GPS, rapporté en mètres.
  • Chaque objet contient également l'emplacement de l'objet par rapport au centre du champ. Les valeurs de X et Y sont en mètres à partir du centre du champ dans leur axe respectif. La valeur de Z est en mètres des tuiles du champ (hauteur).

Objet de détection (type trois) :

Structures.PNG

  • Cela encapsule toutes les informations sur les objets détectés.
  • Chaque objet contient une valeur qui représente la classification de l'objet détecté. (ID de classe : 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
  • Chaque objet contient également une probabilité qui représente la confiance de l'IA VEX dans la détection. C'est après un filtre dans model.py qui supprime les détections de faible probabilité.
  • De plus, la profondeur de l'objet est indiquée en mètres par la caméra VEX AI Intel.
  • La détection d'image et la détection de carte sont attachées à chaque objet pour représenter les coordonnées de l'objet sur l'image ainsi que dans le monde réel.

Une ventilation du programme ai_demo :

Main.cpp

image5.png

La norme inclut pour les projets VEX :

image7.png

Déclarez une instance de la classe Jetson. Cette classe est utilisée pour envoyer des demandes de données au Jetson ainsi que pour recevoir des données via la connexion série USB.

#définir MANAGER_ROBOT 1

Define_manager_robot_1.png

Déclarez une instance de la classe robot_link. Cet objet servira à connecter et transférer des données entre ce robot et un robot partenaire. Ce même projet peut être téléchargé sur deux robots distincts. Un robot aura besoin de la ligne :

//#définir MANAGER_ROBOT 1

Avant de charger le code sur le deuxième robot, vous devrez commenter cette ligne :

La classe robot_link configure le VEXlink du robot et gère la transmission et la réception des données entre les deux robots. Nous n’entrerons pas dans les détails dans cet article sur le fonctionnement de cette classe. Ce serait une bonne idée de comprendre d'abord comment fonctionne VEXlink. Pour des informations plus détaillées sur l'utilisation de l'API VEXlink V5, ce document explique les nouvelles bibliothèques et comment les utiliser efficacement pour la communication de robot à robot.

  • Gestionnaires d'événements de compétition

    premierAutoFlag.png

    L'une des plus grandes différences entre VAIC et VRC est qu'il n'y a pas de période de contrôle du conducteur. Au lieu de cela, il existe deux périodes autonomes, la période d'isolement et la période d'interaction. Dans cet exemple, il existe des routines distinctes pour chaque période autonome. Étant donné que l'API VEX ne prend pas en charge deux rappels différents, il doit y avoir un indicateur dans le programme pour déterminer quelle routine doit être exécutée. Dans cet exemple de programme, le « firstAutoFlag » est utilisé pour appeler la fonction d'isolation la première fois que l'autonomie est activée, et la fonction d'interaction lorsqu'elle est autonome est activée pour la deuxième fois. Une chose à noter est que si, pour une raison quelconque, la correspondance doit être réinitialisée, le programme de démonstration devra être redémarré afin que le firstAutoFlag puisse être réinitialisé.

  • Principal()

    Principal (1).PNG

    C'est la tâche principale de ce projet. Cela commence par appeler vexcodeInit() pour configurer correctement l'environnement VEXcode. Ensuite, un objet AI_RECORD local est déclaré pour stocker les données que nous recevons du Jetson. Une tâche distincte est également configurée pour gérer la mise à jour de l'écran avec les données les plus récentes. Le code de cette tâche est contenu dans le fichier Dashboard.cpp. Le rappel autonome est également enregistré pour être géré lorsque les périodes autonomes sont initiées.

    La boucle principale while() commence par copier les dernières données de l'objet jetson_comms dans notre objet AI_RECORD local. Il transmet ensuite les informations de localisation du robot à l'objet lien afin qu'elles puissent être transmises à notre robot partenaire. Une fois le traitement des données terminé, il demande ensuite plus de données au Jetson et se met en veille pendant 66 millisecondes. Le taux d'interrogation de ces données est de 15 Hz. Il n’y a aucune raison d’interroger plus rapidement puisque les données du système d’IA se mettent à jour à environ 15 Hz.

    Note: les données cartographiques Jetson ne doivent être demandées que par une seule tâche.

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

Last Updated: