Cet article couvrira un exemple de projet qui affiche un tableau de bord indiquant l'état des communications de robot à robot à l'aide de VEXlink et également 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 V5 partenaire connecté via VEXlink.

Ce projet nécessite la dernière version de VEXcode Pro V5 (versions 2.0.2 et ultérieures). Téléchargé VEXcode Pro V5 ici.

VEXcode-Pro-V5-icon.png


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 :

Screen_Shot_2021-02-05_at_3.30.04_PM.png

Données de localisation du robot :

  • Emplacement X,Y du robot en mm à partir du centre du champ.
  • Azimut du robot (cap), élévation (tangage), rotation (rouleau) le tout en radians.

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

image4.png

Informations sur la boîte (type un) :
  • Ces données représentent un objet détecté par le capteur d'image AI.
  • Les données contiennent une valeur qui représente la classification de l'objet détecté. (Valeurs : 0 = Balle Rouge, 1 = Balle Bleue, 2 = But)
  • Ces données décrivent l'objet en référence à l'image vidéo.
  • Les valeurs de X, Y, largeur et hauteur sont en unités de pixels. Les valeurs de pixels se réfèrent au coin supérieur gauche de l'écran vidéo. La résolution de l'image est de 320x240.

image2.png

image6.png

Informations sur la carte (type deux) :

  • Ces données représentent les mêmes données que les informations de la boîte, mais ces données persisteront si l'objet cesse d'être détecté.
  • Chaque objet a une valeur d'âge qui s'incrémente pour chaque image de vidéo pendant laquelle l'objet n'est pas détecté. Ainsi, plus l'âge d'un objet est élevé, plus il s'est écoulé longtemps depuis que le système d'IA a détecté cet objet.
  • Chaque objet contient une valeur qui représente la classification de l'objet détecté. (Valeurs : 0 = Balle Rouge, 1 = Balle Bleue, 2 = But)
  • Chaque objet contient également l'emplacement de l'objet par rapport au centre du champ. Les valeurs de X et Y sont exprimées en millimètres à partir du centre du champ dans leur axe respectif. La valeur de Z est à quelques millimètres des tuiles de champ.

    Remarque: ces valeurs sont converties en pouces et en degrés pour correspondre aux données affichées sur le tableau de bord Web.
  • Dans le programme ai_demo, les valeurs de ces objets sont représentées par la structure MAP_RECORD.

Une ventilation du programme ai_demo :

        • Main.cpp

          image5.png

          La norme comprend 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.

          #define MANAGER_ROBOT 1

          Define_manager_robot_1.png

          Déclarez une instance de la classe robot_link. Cet objet sera utilisé pour 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 d'avoir la ligne :

          //#define 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 de données entre les deux robots. Nous n'allons pas entrer 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 le VEXlink. Pour des informations plus détaillées sur l'utilisation de l'API V5 VEXlink, ce document explique les nouvelles bibliothèques et comment les utiliser efficacement pour communication de robot à robot.

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

    firstAutoFlag.png

    L'une des plus grandes différences entre le VAIC et le VRC est qu'il n'y a pas de période de contrôle du conducteur. Au lieu de cela, il y a 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'isolement la première fois que l'autonomie est activée, et la fonction d'interaction lorsque l'autonomie 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 premier AutoFlag puisse être réinitialisé.

  • Principale()

    image3.png

    C'est la tâche principale de ce projet. Il commence par appeler vexcodeInit() pour configurer correctement l'environnement VEXcode. Ensuite, un objet MAP_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 gérer lorsque les périodes autonomes sont initiées.

    La boucle while() principale commence par copier les dernières données de l'objet jetson_comms dans notre objet MAP_RECORD local. Il transmet ensuite les informations de localisation du robot à l'objet lien afin qu'il puisse être transmis à 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 car les données du système AI sont mises à jour à environ 15 Hz.

    Remarque : les données de la carte 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