Kodowanie robota VEX AI

W tym artykule zostanie omówiony przykładowy projekt, który wyświetla pulpit nawigacyjny informujący o stanie komunikacji między robotami za pomocą VEXlink, a także o stanie Jetson. Projekt ai_demo jest hostowany na naszym Githubie. Ten projekt demonstracyjny zbiera dane z procesora Jetson przez 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 kodu VS dla wersji 5 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:

OverUnder.png

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

Piksel (0,0).png

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.

 

AI XY (1).png

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

Struktury.PNG

  • 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 Wykrywanie obrazu i Wykrywanie mapy, które reprezentują współrzędne obiektu na obrazie, a także w świecie rzeczywistym.

Rozkład programu ai_demo:

Główny.cpp

obraz5.png

Standard obejmuje dla projektów VEX:

image7.png

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

Zdefiniuj_manager_robot_1.png

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 odbiór 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 VEXlink V5, ten dokument wyjaśnia nowe biblioteki i sposoby ich efektywnego wykorzystania Komunikacja robot-robot.

  • Opiekunowie wydarzeń konkursowych

    pierwszaAutoFlag.png

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

    Główny (1).PNG

    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ą zostać zażądane tylko w ramach jednego zadania.

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

Last Updated: