Kodowanie z wykorzystaniem czujnika wizyjnego AI w VEXcode EXP 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

Narzędzie AI Vision Utility śledzi trzy AprilTagi. Każdy tag jest identyfikowany, zlokalizowany i oznaczony, co wskazuje, że jest śledzony przez system. Identyfikatory AprilTag w tym przykładzie to 0, 3 i 9.

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 skutecznie wykorzystać je jako drogowskazy do automatycznej nawigacji.

Narzędzie AI Vision śledzi cztery obiekty: dwa BuckyBalls i dwa Rings. Każdy obiekt zostaje zidentyfikowany, zlokalizowany i opisany, co wskazuje na to, że system go śledzi. Narzędzie zapisuje identyfikator obiektu – w tym przykładzie jest to Czerwona Kula, Niebieska Kula, Zielony Pierścień i Czerwony Pierścień.

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.

Na zdjęciu czujnik AI Vision śledzący Blue Buckyball. Wokół Buckyballa znajduje się prostokąt śledzący, a etykieta powyżej pokazuje, że jego pozycja X wynosi 176, a pozycja Y 117. Środek prostokąta śledzenia jest zaznaczony, aby pokazać, że położenie jest mierzone od środka.

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

Na zdjęciu czujnik AI Vision śledzący dwa niebieskie kostki. Kostki mają wokół siebie prostokąty śledzące, a jeden z nich znajduje się znacznie bliżej kamery. Bliższy ma pozycję Y równą 184, a dalszy ma pozycję Y równą 70.

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.

Na zdjęciu czujnik AI Vision śledzący Blue Buckyball. Wokół Buckyballa znajduje się prostokąt śledzący, a etykieta powyżej pokazuje, że jego pozycja X wynosi 176, a pozycja Y 117. Lewy górny róg prostokąta śledzenia jest zaznaczony, aby pokazać, że położenie początkowe jest mierzone od jego lewego górnego rogu.

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 czujnik AI Vision śledzący Blue Buckyball. Wokół Buckyballa znajduje się prostokąt śledzący, a etykieta powyżej pokazuje, że ma on szerokość 80 pikseli i wysokość 78 pikseli. Czerwone strzałki podświetlają prostokąt śledzący, aby pokazać jego szerokość i wysokość.

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

Na zdjęciu czujnik AI Vision śledzący dwa niebieskie kostki. Kostki mają wokół siebie prostokąty śledzące, a jeden z nich znajduje się znacznie bliżej kamery. Bliższy ma szerokość 144 i wysokość 113, a dalszy ma szerokość 73 i wysokość 84.

Szerokość i wysokość wskazują również odległość obiektu od czujnika AI Vision. 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

Animacja przedstawiająca czerwony i zielony kwadrat obracane jednocześnie w celu zademonstrowania 360 stopni wartości kąta.

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.

Czujnik AI Vision śledzi kod koloru zielonego, a następnie niebieskiego. Na nagraniu widać zieloną kostkę ułożoną na niebieskiej kostce. Wartość kąta kodu koloru jest podświetlona i wynosi 87 stopni, co oznacza, że kod koloru jest zorientowany pionowo.

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

Czujnik AI Vision śledzi kod koloru zielonego, a następnie niebieskiego. Na nagraniu widać Zieloną Kostkę leżącą obok Niebieskiej Kostki, ale są one ustawione pod nietypowym kątem w porównaniu do czujnika. Wartość kąta kodu koloru jest podświetlona i wynosi 0 stopni, co oznacza, że kąta kodu koloru nie można odczytać.

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.

Narzędzie AI Vision śledzi cztery obiekty: dwa BuckyBalls i dwa Rings. Każdy obiekt zostaje zidentyfikowany, zlokalizowany i opisany, co wskazuje na to, że system go śledzi. Narzędzie wyświetla także wynik klasyfikacji AI każdego obiektu; w tym przykładzie każdy wynik wynosi 99%.

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

Na zdjęciu czujnik AI Vision śledzący dwa niebieskie kostki. Kostki mają wokół siebie prostokąty śledzące, a jeden z nich znajduje się znacznie bliżej kamery.

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: