In diesem Artikel wird ein Beispielprojekt behandelt, das ein Dashboard anzeigt, das den Status der Roboter-zu-Roboter-Kommunikation über VEXlink sowie den Status an Jetson meldet. Das ai_demo-Projekt wird auf unserem Githubgehostet. Dieses Demoprojekt sammelt Daten vom Jetson-Prozessor über eine serielle USB-Verbindung. Sobald die Daten empfangen wurden, werden sie auf dem Bildschirm des V5 Brain angezeigt und auch an einen Partner-V5-Roboter übertragen, der über VEXlink verbunden ist.
Hinweis: Dieses Projekt erfordert die neueste Version der VS Code Extension für V5. Laden Sie hier die VS Code-Erweiterung für V5 herunter.
NVIDIA Jetson Nano zu VEX V5 Brain Communications
Der Jetson-Prozessor enthält eine Anwendung, die die folgenden Daten von der VEX AI-Software sammelt:
Roboterstandortdaten:
- Die X- und Y-Position des Roboters in Metern von der Feldmitte entfernt.
- Azimut (Kurs), Höhe (Neigung) und Rotation (Rollen) des Roboters, alle im Bogenmaß.
Objekterkennungsdaten (drei Typen):
- Diese Daten stellen ein von der VEX AI Intel-Kamera erkanntes Objekt dar.
- Diese Daten beschreiben das Objekt anhand des Kamerabildes.
- Die Werte für X, Y, Breite und Höhe werden in Pixeln angegeben. Die Pixelwerte beziehen sich auf die obere linke Ecke des Bild- und Objekterkennungsfelds. Die Bildauflösung beträgt 640x480.
Kartenerkennung (Typ zwei):
- Diese Daten stellen die Position des Objekts auf dem Feld im gleichen Koordinatensystem wie der GPS-Sensor dar, angegeben in Metern.
- Jedes Objekt enthält auch die Position des Objekts relativ zur Feldmitte. Die Werte für X und Y sind in der Einheit Meter von der Feldmitte in ihrer jeweiligen Achse angegeben. Der Wert von Z beträgt Meter von den Feldplättchen (Höhe).
Erkennungsobjekt (Typ drei):
- Dadurch werden alle Informationen über die erkannten Objekte gekapselt.
- Jedes Objekt enthält einen Wert, der die Klassifizierung des erkannten Objekts darstellt. (Klassen-ID: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Jedes Objekt enthält außerdem eine Wahrscheinlichkeit, die das Vertrauen der VEX-KI in die Erkennung darstellt. Dies erfolgt nach einem Filter in model.py, der Erkennungen mit geringer Wahrscheinlichkeit entfernt.
- Darüber hinaus wird die Tiefe des Objekts in Metern von der VEX AI Intel Camera gemeldet.
- Die Bilderkennung und die Kartenerkennung sind an jedem Objekt angebracht, um die Koordinaten des Objekts sowohl auf dem Bild als auch in der realen Welt darzustellen.
Eine Aufschlüsselung des ai_demo-Programms:
Main.cpp
Der Standard umfasst für VEX-Projekte:
Deklarieren Sie eine Instanz der Jetson-Klasse. Diese Klasse wird verwendet, um Datenanfragen an den Jetson zu senden und Daten über die serielle USB-Verbindung zu empfangen.
#define MANAGER_ROBOT 1
Deklarieren Sie eine Instanz der robot_link-Klasse. Dieses Objekt wird zum Verbinden und Übertragen von Daten zwischen diesem Roboter und einem Partnerroboter verwendet. Dasselbe Projekt kann auf zwei separate Roboter heruntergeladen werden. Ein Roboter benötigt die folgende Zeile:
//#define MANAGER_ROBOT 1
Bevor Sie den Code auf den zweiten Roboter laden, müssen Sie diese Zeile auskommentieren:
Die robot_link-Klasse richtet den VEXlink des Roboters ein und übernimmt das Senden und Empfangen von Daten zwischen den beiden Robotern. Wir werden in diesem Artikel nicht näher auf die Funktionsweise dieser Klasse eingehen. Es wäre eine gute Idee, zuerst zu verstehen, wie der VEXlink funktioniert. Ausführlichere Informationen zur Verwendung der V5 VEXlink-API finden Sie diesem Dokument , in dem die neuen Bibliotheken und deren effektive Nutzung für die Roboter-zu-Roboter-Kommunikation erläutert werden.
-
Betreuer von Wettkampfveranstaltungen
Einer der größten Unterschiede zwischen VAIC und VRC besteht darin, dass es keinen Fahrerkontrollzeitraum gibt. Stattdessen gibt es zwei autonome Perioden, die Isolationsperiode und die Interaktionsperiode. In diesem Beispiel gibt es für jede autonome Periode separate Routinen. Da die VEX-API keine zwei verschiedenen Rückrufe unterstützt, muss im Programm ein Flag vorhanden sein, um zu bestimmen, welche Routine ausgeführt werden soll. In diesem Beispielprogramm wird „firstAutoFlag“ verwendet, um die Isolationsfunktion aufzurufen, wenn Autonomous zum ersten Mal aktiviert wird, und die Interaktionsfunktion, wenn Autonomous zum zweiten Mal aktiviert wird. Zu beachten ist, dass, wenn das Spiel aus irgendeinem Grund zurückgesetzt werden muss, das Demoprogramm neu gestartet werden muss, damit das firstAutoFlag zurückgesetzt werden kann.
-
Hauptsächlich()
Dies ist die Hauptaufgabe dieses Projekts. Es beginnt mit dem Aufruf von vexcodeInit(), um die VEXcode-Umgebung korrekt einzurichten. Als nächstes wird ein lokales AI_RECORD-Objekt deklariert, um die Daten zu speichern, die wir vom Jetson erhalten. Für die Aktualisierung des Bildschirms mit den aktuellsten Daten ist außerdem eine separate Aufgabe eingerichtet. Der Code für diese Aufgabe ist in der Datei „dashboard.cpp“ enthalten. Der autonome Rückruf wird auch registriert, um zu verarbeiten, wann die autonomen Zeiträume eingeleitet werden.
Die Hauptschleife while() beginnt mit dem Kopieren der neuesten Daten aus dem jetson_comms-Objekt in unser lokales AI_RECORD-Objekt. Anschließend übergibt er die Standortinformationen des Roboters an das Link-Objekt, damit diese an unseren Partnerroboter übermittelt werden können. Sobald die Verarbeitung der Daten abgeschlossen ist, fordert es weitere Daten vom Jetson an und schläft 66 Millisekunden lang. Die Abfragerate für diese Daten beträgt 15 Hz. Es gibt keinen Grund, schneller abzufragen, da die Daten des KI-Systems mit etwa 15 Hz aktualisiert werden.
Hinweis: Die Jetson-Kartendaten müssen nur von einer einzelnen Aufgabe angefordert werden.