W tym artykule omówiono przykładowy projekt wyświetlający pulpit raportujący stan komunikacji między robotami za pomocą VEXlink, a także status Jetson. Projekt ai_demo jest hostowany na naszym Github. Ten projekt demonstracyjny zbiera dane z procesora Jetson poprzez połączenie szeregowe USB. Po odebraniu danych są one wyświetlane na ekranie V5 Brain, a także przesyłane do współpracującego robota V5, który jest podłączony za pośrednictwem VEXlink.
Uwaga: Ten projekt wymaga najnowszej wersji rozszerzenia VS Code dla wersji 5. Pobierz rozszerzenie VS Code dla wersji V5 tutaj.
NVIDIA Jetson Nano do komunikacji mózgowej VEX V5
W procesorze Jetson znajduje się aplikacja zbierająca z oprogramowania VEX AI następujące dane:
Dane lokalizacji robota:
- Lokalizacja X, Y robota w metrach od środka pola.
- Azymut robota (kurs), wysokość (nachylenie), obrót (przechylenie) wszystko w radianach.
Dane dotyczące wykrywania obiektów (trzy typy):
- Dane te reprezentują obiekt wykryty przez kamerę Intel VEX AI.
- Dane te opisują obiekt w odniesieniu do obrazu z kamery.
- Wartości X, Y, szerokość i wysokość podano w jednostkach pikseli. Wartości pikseli odnoszą się do lewego górnego rogu pola wykrywania obrazu i obiektu. Rozdzielczość obrazu to 640x480.
Wykrywanie mapy (typ drugi):
- Dane te przedstawiają lokalizację obiektu na polu w tym samym układzie współrzędnych co czujnik GPS, wyrażoną w metrach.
- Każdy obiekt zawiera także położenie obiektu względem środka pola. Wartości X i Y podano w metrach od środka pola na ich osi. Wartość Z to metry od pól pola (wysokość).
Wykrywany obiekt (typ trzeci):
- Zawiera wszystkie informacje o wykrytych obiektach.
- Każdy obiekt zawiera wartość reprezentującą klasyfikację wykrytego obiektu. (Identyfikator klasy: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Każdy obiekt zawiera również prawdopodobieństwo, które reprezentuje pewność wykrycia przez sztuczną inteligencję VEX. Dzieje się tak po filtrze w pliku model.py, który usuwa wykrycia o niskim prawdopodobieństwie.
- Ponadto głębokość obiektu jest raportowana w metrach przez kamerę VEX AI Intel Camera.
- Do każdego obiektu dołączone są funkcje wykrywania obrazu i wykrywania mapy, które reprezentują współrzędne obiektu na obrazie, a także w świecie rzeczywistym.
Rozkład programu ai_demo:
Główny.cpp
Standard obejmuje dla projektów VEX:
Zadeklaruj instancję klasy Jetson. Ta klasa służy do wysyłania żądań danych do Jetsona, a także odbierania danych poprzez połączenie szeregowe USB.
#zdefiniuj MANAGER_ROBOT 1
Zadeklaruj instancję klasy robot_link. Obiekt ten będzie używany do łączenia i przesyłania danych pomiędzy tym robotem a robotem partnerskim. Ten sam projekt można pobrać na dwa osobne roboty. Jeden robot będzie potrzebował linii:
//#zdefiniuj MANAGER_ROBOT 1
Zanim załadujesz kod do drugiego robota, będziesz musiał skomentować tę linię:
Klasa robot_link konfiguruje VEXlink robota i obsługuje transmisję i odbieranie danych pomiędzy dwoma robotami. W tym artykule nie będziemy szczegółowo omawiać działania tej klasy. Dobrze byłoby najpierw zrozumieć, jak działa VEXlink. Aby uzyskać bardziej szczegółowe informacje na temat korzystania z interfejsu API V5 VEXlink, w tym dokumencie wyjaśniono nowe biblioteki i sposób ich efektywnego wykorzystania do komunikacji między robotami.
-
Opiekunowie wydarzeń konkursowych
Jedną z największych różnic między VAIC i VRC jest brak okresu kontroli sterownika. Zamiast tego istnieją dwa autonomiczne okresy, okres izolacji i okres interakcji. W tym przykładzie istnieją oddzielne procedury dla każdego okresu autonomicznego. Ponieważ API VEX nie obsługuje dwóch różnych wywołań zwrotnych, w programie musi znajdować się flaga określająca, która procedura ma zostać wykonana. W tym przykładowym programie „firstAutoFlag” służy do wywołania funkcji Isolation przy pierwszym włączeniu funkcji autonomicznej oraz funkcji interakcji, gdy funkcja autonomiczna jest włączona po raz drugi. Należy zauważyć, że jeśli z jakiegoś powodu dopasowanie wymaga zresetowania, program demonstracyjny musi zostać uruchomiony ponownie, aby można było zresetować pierwszą flagę AutoFlag.
-
Główny()
To jest główne zadanie tego projektu. Zaczyna się od wywołania vexcodeInit() w celu prawidłowego skonfigurowania środowiska VEXcode. Następnie deklarowany jest lokalny obiekt AI_RECORD do przechowywania danych, które otrzymujemy od Jetsona. Odrębne zadanie ustawione jest także do obsługi aktualizacji ekranu o najbardziej aktualne dane. Kod tego zadania znajduje się w pliku dashboard.cpp. Autonomiczne wywołanie zwrotne jest również rejestrowane do obsługi w przypadku inicjowania okresów autonomicznych.
Główna pętla while() rozpoczyna się od skopiowania najnowszych danych z obiektu jetson_comms do naszego lokalnego obiektu AI_RECORD. Następnie przekazuje informacje o lokalizacji robota do obiektu łącza, aby można je było przesłać do robota naszego partnera. Po zakończeniu przetwarzania danych żąda od Jetsona większej ilości danych i pozostaje w stanie uśpienia na 66 milisekund. Częstotliwość odpytywania tych danych wynosi 15 Hz. Nie ma powodu, aby odpytywać szybciej, ponieważ dane systemu AI aktualizują się z częstotliwością około 15 Hz.
Uwaga: dane mapy Jetson muszą być wymagane tylko w ramach jednego zadania.