Kodowanie robota VEX AI

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:

Dwa diagramy polowe pokazujące położenie robota, orientację i osie współrzędnych służące do śledzenia lokalizacji.

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):

Widok kamery z wykrytymi obiektami gry oznaczonymi kolorem, współrzędnymi pozycji i odległością.

Detekcja obrazu (typ pierwszy):

  • 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.

 

Diagram pola przedstawiający osie współrzędnych X i Y oraz położenie odniesienia X0 Y0 w środku pola.

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):

Fragment kodu C++ definiujący struktury danych dla wykrytych obiektów, obejmujący klasyfikację, pozycję oraz współrzędne obrazów i map.

  • 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

Fragment kodu C++ pokazujący standardowe elementy projektu VEX i ustawienia inicjalizacji.

Standard obejmuje dla projektów VEX:

// utwórz instancję klasy jetson w celu otrzymywania lokalizacji i innych danych
// z Jetson nano
//
ai::jetson jetson_comms;

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

Fragment kodu C++ pokazujący konfigurację ról menedżera i robota roboczego przy użyciu polecenia define o treści #define 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

    Kod C++ przedstawiający logikę warunkową, która przełącza między autonomicznymi procedurami izolacji i interakcji.

    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()

    Fragment kodu C++ przedstawiający główną pętlę obsługującą pobieranie danych z Jetsona, przetwarzanie i komunikację z robotem partnerskim.

    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.

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

Last Updated: