Kodowanie z wykorzystaniem czujnika wizyjnego AI w VEXcode V5 C++

Upewnij się, że w swoim czujniku AI Vision masz skonfigurowane Sygnatur kolorów i Kody kolorów , aby można było ich używać z klockami. Aby dowiedzieć się więcej na temat ich konfiguracji, przeczytaj poniższe artykuły:

Czujnik wizyjny AI potrafi również wykrywać klasyfikacje AI i AprilTagi. Aby dowiedzieć się, jak włączyć te tryby wykrywania, przejdź tutaj:

Aby dowiedzieć się więcej na temat poszczególnych poleceń i sposobu ich używania w VEXcode, przejdź do witryny API.


Uzyskaj dane wizualne za pomocą czujnika wizyjnego AI

Każde polecenie czujnika AI Vision będzie zaczynać się od nazwy skonfigurowanego czujnika AI Vision. We wszystkich przykładach podanych w tym artykule nazwa użytego czujnika AI Vision będzie wynosić AIVision.

zrób migawkę

Metoda takeSnapshot wykonuje zdjęcie tego, co aktualnie widzi czujnik AI Vision i pobiera z tej migawki dane, które można następnie wykorzystać w projekcie. Podczas wykonywania migawki należy określić typ obiektu, o którym czujnik AI Vision ma zbierać dane:

  • Podpis koloruKod koloru lub
    • Tego typu sygnatury wizualne zaczynają się od nazwy czujnika AI Vision, podwójnego podkreślenia, a następnie nazwy sygnatury wizualnej, na przykład: AIVision1__Blue.
  • Klasyfikacje AI - aivision::ALL_AIOBJS
  • kwietniaTagi- aivision::ALL_TAGS

Wykonanie migawki spowoduje utworzenie tablicy wszystkich wykrytych obiektów, które określiłeś. Na przykład, jeśli chcesz wykryć sygnaturę koloru „niebieski” , a czujnik wizyjny AI wykryje 3 różne niebieskie obiekty, dane ze wszystkich trzech zostaną umieszczone w tablicy.

W tym przykładzie wykonano migawkę koloru „niebieskiego” o symboluz czujnika AI Vision o nazwie AIVision1. Wyświetla liczbę obiektów wykrytych w tablicy i przechwytuje nową migawkę co 0,5 sekundy.

while (true) {
// Pobierz migawkę wszystkich obiektów w kolorze niebieskim.
AIVision.takeSnapshot(AIVision1__Blue);

// Sprawdź, czy obiekt został wykryty w migawce przed pobraniem danych.
jeśli (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
czekaj(5, ms);
}

obiekty

Każdy obiekt ze migawki ma inne właściwości, które można wykorzystać do raportowania informacji o tym obiekcie. Metoda objects umożliwia dostęp do tych właściwości.

Dostępne właściwości są następujące:

  • id
  • środekX i środekY
  • originX i originY
  • szerokość
  • wysokość
  • kąt
  • istnieje
  • wynik

Aby uzyskać dostęp do właściwości obiektu, należy użyć nazwy czujnika AI Vision, po której następuje metoda obiektu, a na końcu indeks obiektu.

Indeks obiektu wskazuje konkretną właściwość obiektu, którą chcesz pobrać. Po zrobieniu zdjęcia czujnik AI Vision automatycznie sortuje obiekty według rozmiaru. Największemu obiektowi przypisuje się indeks 0, a mniejszym obiektom wyższe numery indeksów.

Na przykład wywołanie szerokości największego obiektu wynosiłoby AIVision1.objects[0].width.

id

Właściwość id jest dostępna tylko dla kwietnia, klasyfikacji AI i

Trzy kwadratowe znaczniki identyfikacyjne oznaczone identyfikatorami 0, 9 i 3, dla każdego z nich podano współrzędne i wymiary wyświetlone białym tekstem. ID 0 znajduje się po lewej stronie, ID 9 po prawej, a ID 3 na dole pośrodku. Każdy znacznik ma niepowtarzalny czarno-biały wzór wewnątrz kwadratu.

W przypadku AprilTago wartościwłaściwość id reprezentuje wykryty numer identyfikacyjnyAprilTag(s) .

Identyfikacja konkretnych AprilTags umożliwia selektywną nawigację. Możesz zaprogramować robota tak, aby poruszał się w kierunku określonych znaczników, ignorując inne. W ten sposób możesz wykorzystać je jako drogowskazy do automatycznej nawigacji.

Na obrazku oznaczono dwie piłki i dwa pierścienie, wraz z etykietami wskazującymi ich położenie, rozmiar i wynik. Czerwona kula jest po lewej stronie, niebieska kula po prawej stronie, zielony pierścień jest na dole po lewej stronie, a czerwony pierścień jest na dole po prawej stronie. Każdy obiekt jest zaznaczony białym polem, a szczegóły, takie jak współrzędne X, Y, szerokość, wysokość i wynik 99%, wyświetlane są białym tekstem.

W przypadkuklasyfikacji AIwłaściwość id oznacza konkretny typ wykrytej klasyfikacji AI.

Identyfikacja konkretnych Klasyfikacji AIpozwala robotowi skupić się tylko na określonych obiektach, np. chcieć nawigować tylko w kierunku czerwonej piłki Buckyball, a nie niebieskiej.

Aby uzyskać więcej informacji na temat kwietniaTags i AI Classifications oraz sposobu włączania ich wykrywania w narzędziu AI Vision Utility, zapoznaj się z tymi artykułami.

środekX i środekY

Są to współrzędne środka wykrytego obiektu w pikselach.

Niebieski Buckyball śledzony przez system komputerowy. Obiekt jest otoczony białym kwadratem, a wewnątrz niego znajduje się mniejszy czerwony kwadrat otaczający w środku biały krzyż. W lewym górnym rogu zdjęcia znajduje się etykieta informująca, że obiekt jest niebieski, ma współrzędne X:176, Y:117 i wymiary W:80, H:78.

Współrzędne CenterX i CenterY ułatwiają nawigację i pozycjonowanie. Czujnik AI Vision ma rozdzielczość 320 x 240 pikseli.

Dwa niebieskie obiekty w kształcie sześcianu śledzone przez system wizyjny. Górny obiekt oznaczony jest współrzędnymi X:215, Y:70 i wymiarami W:73, H:84, białym konturem i białym krzyżem w środku. Dolny obiekt oznaczony jest współrzędnymi X:188, Y:184 i wymiarami W:144, H:113. Obiekt ten jest również obramowany na biało i ma w środku biały krzyż.

Można zauważyć, że obiekt znajdujący się bliżej czujnika AI Vision będzie miał niższą współrzędną CenterY niż obiekt znajdujący się dalej.

W tym przykładzie, ponieważ środek pola widzenia czujnika AI Vision wynosi (160, 120), robot skręci w prawo, dopóki współrzędna środka X wykrytego obiektu nie będzie większa niż 150 pikseli, ale mniejsza niż 170 pikseli.

while (true) {
  // Pobierz migawkę wszystkich obiektów w kolorze niebieskim.
  AIVision.takeSnapshot(AIVision__Blue);

  // Sprawdź, czy obiekt został wykryty w migawce przed pobraniem danych.
  jeśli (AIVision.objectCount > 0) {

    jeśli (AIVision.objects[0].centerX > 150,0 && 170,0 > AIVision.objects[0].centerX) {
      Układ napędowy.skręć(w prawo);
    } w przeciwnym razie {
      Układ napędowy.zatrzymaj();
    }
  }
  czekaj(5, ms);
}

originX i originY

OriginX i OriginY to współrzędne w lewym górnym rogu wykrytego obiektu w pikselach.

Niebieski Buckyball śledzony przez system wizyjny. Obiekt jest otoczony białym konturem, a w jego środku znajduje się biały krzyż. Etykieta w lewym górnym rogu wskazuje, że obiekt ma kolor niebieski, a także współrzędne X:176, Y:117 i wymiary W:80, H:78. Mały czerwony kwadrat podświetla lewy górny róg obiektu.

Współrzędne OriginX i OriginY ułatwiają nawigację i pozycjonowanie. Łącząc tę współrzędną z szerokością i wysokością obiektu, można określić rozmiar pola ograniczającego obiekt. Może to pomóc w śledzeniu ruchomych obiektów lub nawigowaniu pomiędzy obiektami.

szerokość i wysokość

Jest to szerokość lub wysokość wykrytego obiektu w pikselach.

Na zdjęciu widoczna jest niebieska piłka Buckyball otoczona białym kwadratowym konturem. W lewym górnym rogu znajduje się etykieta wskazująca, że jest to obiekt niebieski o współrzędnych X:176, Y:117 i wymiarach W:80, H:78. Czerwone strzałki podkreślają szerokość i wysokość obiektu.

Pomiary szerokości i wysokości pomagają identyfikować różne obiekty. Na przykład Buckyball będzie miał większą wysokość niż Ring.

Dwa niebieskie obiekty w kształcie sześcianu śledzone przez system rozpoznawania obrazu. Górny sześcian ma biały obrys z etykietą wskazującą jego pozycję jako X:215, Y:70 i wymiary W:73, H:84. Dolny sześcian ma podobny biały kontur, na etykiecie widnieje X:188, Y:184 i wymiary W:144, H:113. Na każdym sześcianie znajduje się biały krzyż, który prawdopodobnie wskazuje punkt centralny śledzenia. Etykiety zawierają informacje o pomiarach i śledzeniu danych dla każdego obiektu.

Szerokość i wysokość wskazują również odległość obiektu od czujnika wizyjnego AI. Mniejsze pomiary zwykle oznaczają, że obiekt jest dalej, podczas gdy większe pomiary sugerują, że jest bliżej.

W tym przykładzie szerokość obiektu jest wykorzystywana do nawigacji. Robot będzie zbliżał się do obiektu, aż osiągnie on określoną szerokość, po czym się zatrzyma.

while (true) {
  // Pobierz migawkę wszystkich niebieskich obiektów.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Sprawdź, czy obiekt został wykryty w migawce przed pobraniem danych.
  jeśli (AIVision.objectCount > 0) {

    jeśli (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

kąt

Obracający się plik GIF przedstawiający czerwone i zielone bloki. Gdy bloki zostaną ustawione idealnie poziomo od koloru czerwonego do zielonego, kąt ich położenia wynosi 0 stopni. Jeśli czerwony blok znajduje się pionowo nad zielonym blokiem, to jego kąt wynosi 90 stopni. Jeżeli bloki są poziomo ułożone w odcieniach zieleni i czerwieni, to kąt wynosi 180 stopni. Jeśli zielony blok znajduje się pionowo nad czerwonym blokiem, to kąt wynosi 20 stopni.

Właściwość kąta jest dostępna tylko dlakodów kolorów iAprilTags.

Oznacza to, czy wykryty kod koloru lub AprilTag jest zorientowany inaczej.

Stos dwóch sześcianów, jeden zielony na górze, a drugi niebieski na dole, śledzony przez system wizyjny. Oba sześciany są otoczone białym konturem, a na środku zielonego sześcianu znajduje się biały krzyż. Etykieta na dole obrazu wyświetla Green_Blue A:87°, wskazując wykryte kolory i pomiar kąta. Poniżej znajdują się współrzędne X:117, Y:186 o wymiarach W:137, H:172, reprezentujące położenie i rozmiar ułożonych w stos sześcianów w ramce.

Można sprawdzić, czy robot jest zorientowany inaczej w stosunku do kodu koloru lubAprilTag i na tej podstawie podjąć decyzje nawigacyjne.

Dwa sześciany, jeden zielony i jeden niebieski, umieszczone obok siebie i śledzone przez system wizyjny. Oba sześciany są otoczone białym konturem, a w środku znajduje się biały krzyż. Etykieta w lewym górnym rogu wskazuje Green_Blue A:0°, odnosząc się do wykrytych kolorów i pomiaru kąta. Poniżej podano współrzędne X:150, Y:102, o wymiarach W:179, H:109, które określają położenie i rozmiar kostek w ramce.

Na przykład, jeśli kod koloru nie zostanie wykryty pod odpowiednim kątem, robot może nie być w stanie prawidłowo podnieść obiektu, który on przedstawia.

wynik

Właściwość wyniku jest używana w przypadku wykryciaklasyfikacji AI za pomocą czujnika wizyjnego AI.

Na zdjęciu widać cztery obiekty śledzone przez system wizyjny: dwie kule i dwa pierścienie. Czerwona piłka ma współrzędne X:122, Y:84, W:67, H:66 i wynik 99%. Niebieska kula ma X:228, Y:86, W:70, H:68 i wynik 99%. Zielony pierścień ma współrzędne X:109, Y:186, W:98, H:92 i wynik 99%. Czerwony pierścień jest oznaczony jako X:259, Y:187, W:89, H:91 i ma wynik 99%. Każdy obiekt jest obramowany na biało, co wskazuje na dokładność śledzenia.

Wynik pewności wskazuje, jak pewny jest czujnik AI Vision, że wykryje błąd. Na tym obrazku identyfikacja klasyfikacji AI tych czterech obiektów jest na poziomie 99% pewna. Za pomocą tego wyniku możesz mieć pewność, że Twój robot skupi się tylko na wykryciach o wysokiej pewności.

istnieje

Właściwość exists służy do wykrywania wykryty w ostatniej wykonanej migawce.

Umożliwia to sprawdzenie, czy w poprzedniej migawce zostały wykryte jakiekolwiek obiekty. Ta właściwość zwróci wartość True, jeśli obiekt istnieje, lub False, jeśli obiekt nie istnieje.


liczba obiektów

Metoda objectCount zwraca liczbę wykrytych obiektów w ostatniej migawce.

Interfejs narzędzia AI Vision Utility z dwoma niebieskimi sześcianami wykrytymi po lewej stronie, na każdym z nich oznaczono współrzędne X i Y oraz wymiary. System jest podłączony, AprilTags jest włączony, a klasyfikacja AI jest wyłączona. Po prawej stronie wyświetlane są ustawienia koloru niebieskiego z regulowanymi zakresami odcienia i nasycenia, ustawionymi odpowiednio na 22 i 0,34. Dostępna jest opcja dodawania lub ustawiania kolorów i zamrożenia wideo. Oprogramowanie układowe jest aktualne i ma wersję 1.0.0.b16. Na dole znajduje się przycisk zamknięcia.

W tym przykładzie wykryto dwa obiekty z sygnaturą kolorui kolorem „Niebieski”. Oba zostaną umieszczone w tablicy, gdy użyta zostanie metoda takeSnapshot.

Ten fragment kodu na bieżąco aktualizuje moduł EXP Brain, informując o liczbie wykrytych obiektów. Na podstawie podanego przykładu będzie wielokrotnie wysyłana wartość 2, co oznacza, że wykryto dwa obiekty.

while (true) {
// Pobierz migawkę wszystkich niebieskich obiektów.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Sprawdź, czy obiekt został wykryty na migawce przed pobraniem danych.
jeśli (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
czekaj(5, ms);
}

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

Last Updated: