Wizja AI#

Wstęp#

Czujnik wizyjny AI robota VEX AIM Coding Robot wykrywa i śledzi obiekty, kolory oraz identyfikatory AprilTag. Dzięki temu robot może analizować otoczenie, śledzić obiekty i reagować na podstawie wykrytych danych wizualnych.

Czujnik wizyjny AI ma rozdzielczość 320×240 pikseli. Początek układu współrzędnych (0, 0) znajduje się w lewym górnym rogu, co oznacza, że ​​środek czujnika znajduje się w punkcie (160, 120), jak pokazano na poniższym schemacie:

Diagram przedstawiający rozdzielczość czujnika AIM AI Vision, przy czym współrzędne 0, 0 znajdują się w lewym górnym rogu diagramu, 320, 0 w prawym górnym rogu i 0, 240 w lewym dolnym rogu, a 160, 120 dokładnie na środku.

Poniżej znajduje się lista wszystkich metod i właściwości:

Akcje — pokaż lub ukryj obraz z kamery AI Vision.

  • show_aivision — Wyświetla obraz AI Vision na ekranie robota.

  • hide_aivision — Ukrywa kanał AI Vision na ekranie.

  • tag_detection — Włącza lub wyłącza wykrywanie identyfikatorów AprilTag.

Getter — wykrywa, czy robot trzyma obiekt.

  • get_data — Zwraca krotkę wykrytych obiektów dla określonego podpisu.

  • has_sports_ball — Zwraca informację, czy robot ma piłkę sportową.

  • has_any_barrel — Zwraca informację, czy robot ma jakikolwiek typ beczki.

  • has_blue_barrel — Zwraca informację, czy robot ma niebieską beczkę.

  • has_orange_barrel — Zwraca informację, czy robot ma pomarańczową beczkę.

Właściwości — dane obiektu zwrócone z get_data.

  • exists — Czy obiekt istnieje w bieżącym wykryciu jako wartość logiczna.

  • width — Szerokość wykrytego obiektu.

  • height — Wysokość wykrytego obiektu.

  • centerX — Pozycja X środka obiektu.

  • centerY — Pozycja Y środka obiektu.

  • bearing — Kąt poziomy względem przodu robota.

  • rotation — Orientacja obiektu.

  • originX — Pozycja X lewego górnego rogu obiektu.

  • originY — Pozycja Y lewego górnego rogu obiektu.

  • id — Klasyfikacja lub identyfikator tagu obiektu.

  • score — Wynik pewności dla klasyfikacji AI.

  • type — Zwraca typ obiektu (AI, Tag, Color lub Code).

Konstruktory — definiują sygnatury i kody kolorów.

Akcje#

show_aivision#

show_aivision wyświetla na ekranie robota obraz z czujnika AI Vision na żywo. Obraz na żywo zasłania wszystkie inne obrazy i tekst na ekranie.

Uwaga: Na ekranie nie będą wyświetlane żadne inne obrazy ani tekst, chyba że użyto funkcji hide_aivision w celu ukrycia kanału.

Usage:
robot.screen.show_aivision()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()

hide_aivision#

hide_aivision usuwa transmisję danych na żywo z czujnika AI Vision z ekranu robota.

Usage:
robot.screen.hide_aivision()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()

tag_detection#

tag_detection włącza lub wyłącza wykrywanie identyfikatora AprilTag, gdzie stan jest wartością logiczną.

Czujnik może wykrywać identyfikatory AprilTag od 0 do 36 z rodziny Circle21h7.

Usage:
robot.vision.tag_detection(state)

Parametry

Opis

state

Wartości: True, co oznacza włączenie wykrywania identyfikatorów AprilTag lub False, co oznacza wyłączenie wykrywania identyfikatorów AprilTag.

robot.screen.set_font(PROP30)

# Cut off AprilTag ID detection after 5 seconds
while True:
    if timer.time(SECONDS) > 5:
        robot.vision.tag_detection(False)

    robot.screen.clear_screen()
    robot.screen.set_cursor(3, 1)
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        robot.screen.print("AprilTag ID detected!")
    else:
        robot.screen.print("Nothing detected!")

    wait(0.1, SECONDS)

Getters#

get_data#

get_data filtruje dane z ramki czujnika AI Vision do pojedynczego podpisu — zapisanego opisu czegoś, co czujnik może rozpoznać, na przykład wstępnie wyszkolonego obiektu, identyfikatora AprilTag lub skonfigurowanego podpisu koloru lub kodu koloru — i zwraca krotkę.

Aby można było używać tej metody, najpierw należy skonfigurować Sygnatury kolorów i Kody kolorów w narzędziu AI Vision Utility.

Krotka Tuple przechowuje obiekty uporządkowane od największego do najmniejszego według szerokości, zaczynając od indeksu 0. Dostęp do właściwości każdego obiektu można uzyskać za pomocą jego indeksu. Jeśli nie wykryto żadnych pasujących obiektów, zwracana jest pusta krotka.

Usage:
robot.vision.get_data(signature, count)

Parametry

Opis

signature

Filtruje zbiór danych tak, aby zawierał tylko dane o określonym podpisie. Dostępne są następujące podpisy:

  • ALL_VISION — Piłki sportowe, beczki, roboty kodujące VEX AIM, identyfikatory AprilTag, kolory i kody kolorów
  • ALL_CARGO — Piłki sportowe i beczki
  • ALL_TAGS — Wszystkie identyfikatory AprilTag
  • ALL_COLORS — Wszystkie skonfigurowane podpisy kolorów i kody kolorów
  • SPORTS_BALL — Tylko piłki sportowe
  • BLUE_BARREL — Tylko niebieskie beczki
  • ORANGE_BARREL — Tylko pomarańczowe beczki
  • AIM_ROBOT — Wszystkie roboty kodujące VEX AIM
  • TAG0 do TAG37 — Pojedynczy AprilTag ID od 0 do 37
  • NAME — podpis koloru lub kod koloru, gdzie NAME to nazwa skonfigurowana w narzędziu AI Vision Utility.

count

Opcjonalnie. Ustawia maksymalną liczbę obiektów, które można zwrócić, od 1 do 24 (domyślnie: 8).

Uwaga: Identyfikatory AprilTag od 5 do 37 można uzyskać, korzystając z wydrukowanych identyfikatorów AprilTag z AIM Printables.

# Move forward if a sports ball is detected
while True:
    ball = robot.vision.get_data(SPORTS_BALL)
    if ball[0].exists:
        robot.move_for(10, 0)
    wait(50, MSEC)

Uwaga: Zwróconą krotkę można posortować według dowolnej właściwości, nie tylko szerokości, za pomocą funkcji Pythona sorted Na przykład sortowanie według identyfikatora AprilTag:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

Lub sortowanie według wzrostu:

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Wyświetlanie danych#

Wydrukowanie krotki zwróconej przez get_data wyświetla listę wszystkich właściwości wszystkich wykrytych obiektów:

# Display properties of all detected AprilTag IDs
while True:
    vision_data = robot.vision.get_data(ALL_TAGS)

    if vision_data[0].exists:
        break

    wait(0.25, SECONDS)

print(vision_data)

Zrzut ekranu okna konsoli wyświetlającego dane debugowania dla wykrytych identyfikatorów AprilTag. Tekst zawiera listę „Obiekt nr 0” z polami takimi jak: „iss: True”, typ: Identyfikator AprilTag, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, szerokość: 27, wysokość: 23, łożysko: 14,1 i obrót: 0,0, a następnie linię rozdzielającą i początek „Obiektu nr 1” z „iss: True”, typ: Identyfikator AprilTag, id: 4 i centerX: 122.

Klasyfikacje AI#

Czujnik wizyjny AIM AI potrafi wykrywać następujące klasyfikacje sztucznej inteligencji:

Numer identyfikacyjny

Klasyfikacja AI

Podpis

0

Piłka

SPORTS_BALL

1

Niebieska beczka

BLUE_BARREL

2

Pomarańczowa beczka

ORANGE_BARREL

3

Robot AIM

AIM_ROBOT

Sygnatury kolorów#

Sygnatura koloru to unikalny kolor, który czujnik wizyjny AI potrafi rozpoznać. Sygnatury te umożliwiają czujnikowi wykrywanie i śledzenie obiektów na podstawie ich koloru. Po skonfigurowaniu Sygnatury koloru czujnik może identyfikować obiekty o tym konkretnym kolorze w swoim polu widzenia. Sygnatury kolorów są używane z funkcją get_data do przetwarzania i wykrywania kolorowych obiektów w czasie rzeczywistym.

Narzędzie AI Vision Utility przedstawiające połączony czujnik wizyjny wykrywający dwa kolorowe obiekty. Po lewej stronie wyświetlany jest obraz z kamery na żywo z niebieskim polem po lewej i czerwonym polem po prawej, każde z nich otoczone białymi ramkami. Czarne etykiety wyświetlają ich nazwy, współrzędne i wymiary. Po prawej stronie znajdują się ustawienia sygnatury kolorów, z suwakami do regulacji odcienia i nasycenia dla pola czerwonego i niebieskiego. Na dole znajdują się przyciski do dodawania kolorów, zatrzymywania wideo, kopiowania i zapisywania obrazu, a także przycisk zamykania w prawym dolnym rogu.

# Display if any objects match the Red_Box signature
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Signature
    ai_objects = robot.vision.get_data(Red_Box)
    if ai_objects[0].exists:
        robot.screen.print("Color signature detected!")

Kody kolorów#

Kod koloru to uporządkowany wzór składający się z 2 do 4 sygnatur kolorów ułożonych w określonej kolejności. Kody te pozwalają czujnikowi wizyjnemu AI rozpoznawać predefiniowane wzorce kolorów. Kody kolorów są przydatne do identyfikacji złożonych obiektów lub tworzenia unikalnych znaczników do autonomicznej nawigacji.

Interfejs AI Vision Utility pokazuje podłączony czujnik wizyjny wykrywający dwa sąsiadujące obiekty – niebieskie pole po lewej stronie i czerwone pole po prawej – zgrupowane w jednym białym polu granicznym oznaczonym BlueRed. Informacje o wykryciu obejmują kąt (A: 11°), współrzędne (X: 143, Y: 103), szerokość (W: 233) i wysokość (H: 108). Na prawym panelu znajdują się trzy sygnatury kolorów: Red_Box, Blue_Box i BlueRed z regulowanymi zakresami odcienia i nasycenia. Sygnatura BlueRed łączy sygnatury Blue_Box i Red_Box. Pod kanałem wideo znajdują się przyciski oznaczone etykietami: Zamroź wideo, Kopiuj obraz, Zapisz obraz i Zamknij.

# Display if any objects match the BlueRed code
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Code
    ai_objects = robot.vision.get_data(BlueRed)
    if ai_objects[0].exists:
        robot.screen.print("Color code detected!")

has_sports_ball#

has_sports_ball zwraca wartość logiczną wskazującą, czy robot aktualnie posiada piłkę sportową.

  • True — Robot ma piłkę sportową.

  • False — Robot nie ma piłki sportowej.

Usage:
robot.has_sports_ball()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Kick when the robot has a sports ball
while True:
    if robot.has_sports_ball():
        robot.kicker.kick(MEDIUM)

    wait(50, MSEC)

has_any_barrel#

has_any_barrel zwraca wartość logiczną wskazującą, czy robot aktualnie posiada jakikolwiek typ beczki.

  • True — Robot ma beczkę.

  • False — Robot nie ma lufy.

Usage:
robot.has_any_barrel()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Push a barrel away when detected
while True:
    if robot.has_any_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_blue_barrel#

has_blue_barrel zwraca wartość logiczną wskazującą, czy robot aktualnie posiada niebieską beczkę.

  • True — Robot ma niebieską beczkę.

  • False — Robot nie ma niebieskiej beczki.

Usage:
robot.has_blue_barrel()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Push a blue barrel away when detected
while True:
    if robot.has_blue_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_orange_barrel#

has_orange_barrel zwraca wartość logiczną wskazującą, czy robot aktualnie posiada pomarańczową beczkę.

  • True — Robot ma pomarańczową beczkę.

  • False — Robot nie ma pomarańczowej beczki.

Usage:
robot.has_orange_barrel()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Push an orange barrel away when detected
while True:
    if robot.has_orange_barrel():
        robot.kicker.place()

    wait(50, MSEC)

Właściwości#

Każdy obiekt przechowywany w krotce zawiera dwanaście właściwości po użyciu metody robot.vision.get_data.

Wszystkie wartości właściwości, z wyjątkiem .id, .score, i .type opisują położenie, rozmiar, orientację lub azymut wykrytego obiektu w momencie użycia robot.vision.get_data . Wartości te są mierzone w pikselach lub stopniach, w oparciu o rozdzielczość czujnika wynoszącą 320 na 240 pikseli.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum kadru, otoczona czarnym polem ograniczającym. Osie x i y są oznaczone odpowiednio od 0 do 320 od lewej do prawej u góry i od 0 do 240 od ​​góry do dołu po lewej stronie.

.exists#

.exists zwraca wartość logiczną wskazującą, czy indeks istnieje w krotce, czy nie.

  • True — Indeks istnieje.

  • False — Indeks nie istnieje.

# Check if at least two objects are detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    ai_objects = robot.vision.get_data(ALL_CARGO)

    if ai_objects[0].exists:
        if ai_objects[1].exists:
            robot.screen.print("At least 2")
        else:
            robot.screen.print("Less than 2")
    wait(0.1, SECONDS)

.width#

.width zwraca szerokość wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 1 do 320.

Uwaga: Wartości pikseli są względne względem układu współrzędnych czujnika. Patrz schemat we Wprowadzeniu w celach informacyjnych.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum ramki, otoczona czarną ramką. Dwie pionowe, czerwone linie przerywane biegną od góry ramki do lewej i prawej krawędzi ramki. Dwustronna czarna strzałka między tymi liniami wskazuje szerokość.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].width < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.height#

.height zwraca wysokość wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 1 do 240.

Uwaga: Wartości pikseli są względne względem układu współrzędnych czujnika. Patrz schemat we Wprowadzeniu w celach informacyjnych.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum ramki, otoczona czarną ramką. Dwie poziome, czerwone linie przerywane biegną od lewej strony ramki do górnej i dolnej krawędzi ramki. Dwustronna czarna strzałka między tymi liniami wskazuje pomiar wysokości.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].height < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.centerX#

.centerX zwraca współrzędną x środka wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 0 do 320.

Uwaga: Wartości pikseli są względne względem układu współrzędnych czujnika. Patrz schemat we Wprowadzeniu w celach informacyjnych.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum ramki, otoczona czarnym prostokątem. Pionowa czerwona linia przerywana biegnie od góry ramki do środka prostokąta, wskazując współrzędną X środka.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)

while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if 140 < barrel[0].centerX < 180:
            robot.stop_all_movement()

    wait(10,MSEC)

.centerY#

.centerY zwraca współrzędną y środka wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 0 do 240.

Uwaga: Wartości pikseli są względne względem układu współrzędnych czujnika. Patrz schemat we Wprowadzeniu w celach informacyjnych.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum ramki, otoczona czarnym prostokątem. Pozioma, czerwona linia przerywana biegnie od lewej strony ramki do środka prostokąta, wskazując współrzędną Y środka.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].centerY < 140:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.bearing#

.bearing zwraca wartość dziesiętną (float) reprezentującą odległość obiektu na lewo lub prawo od środka pola widzenia czujnika AI Vision w stopniach. Wartość 0 oznacza, że ​​obiekt jest wyśrodkowany, wartości dodatnie oznaczają, że obiekt znajduje się po prawej stronie, a wartości ujemne oznaczają, że obiekt znajduje się po lewej stronie.

Diagram z góry przedstawiający robota kodującego AIM VEX umieszczonego na środku okrągłej podstawy z pionową linią odniesienia i czerwoną linią nachyloną w stronę piłki sportowej po lewej stronie, oznaczoną jako minus 30 stopni. Diagram z góry przedstawiający robota kodującego AIM VEX umieszczonego na środku okrągłej podstawy z pionową linią odniesienia i czerwoną linią nachyloną w stronę piłki sportowej po prawej stronie, oznaczonej jako 30 stopni.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
    vision_data = robot.vision.get_data(BLUE_BARREL)

    if vision_data[0].exists:

        if vision_data[0].bearing > 5:
            robot.turn(RIGHT)
        elif vision_data[0].bearing < -5:
            robot.turn(LEFT)
        else:
            robot.stop_all_movement()

    else:
        robot.stop_all_movement()

    wait(0.1, SECONDS)

.rotation#

.rotation zwraca orientację obiektu na płaszczyźnie widzenia czujnika AI Vision, mierzoną w stopniach od 0 do 359. Kod koloru ma wartość 0°, gdy jego kolory są ułożone w linii poziomej (np. czerwony–niebieski). Obrócenie kolorów powoduje zmianę kąta (np. ułożenie niebieski–czerwony zwraca 180°).

W poniższym przykładzie kod kolorów został skonfigurowany tak, że kolor czerwony znajduje się po lewej stronie, a niebieski po prawej.

Na tym obrazku nałożenie koloru niebieskiego na czerwony jest równoznaczne z obróceniem oryginalnego kodu kolorów o 270 stopni w prawo.

Interfejs kamery wyświetla pionowo ułożony obiekt z niebieską górną połową i czerwoną dolną połową, wyśrodkowany w kadrze. Etykieta pod obiektem brzmi: Red_Blue A:270° CX:185 CY:81 W:93 H:150, wskazując nazwę obiektu, kąt obrotu, współrzędne X i Y środka, szerokość i wysokość. Linie siatki i osie numeryczne oznaczają wymiary obrazu, przy czym X wynosi od 0 do 320, a Y od 0 do 240.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
    # Original Color Code is Red to the left, Blue to the right
    code = robot.vision.get_data(BlueRed)

    if code[0].exists:
        # Check if Color Code is now Red on top of Blue
        if 50 < code[0].rotation < 100 :
            robot.move_at(90)

        # Check if Color Code is now Blue on top of Red
        elif 270 < code[0].rotation < 330 :
            robot.move_at(270)

        else:
            robot.stop_all_movement()
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.originX#

.originX zwraca współrzędną x lewego górnego rogu ograniczającego pole wykrytego obiektu w pikselach. Jest to liczba całkowita z przedziału od 0 do 320.

Uwaga: Wartości pikseli są względne względem układu współrzędnych czujnika. Patrz schemat we Wprowadzeniu w celach informacyjnych.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum ramki, otoczona czarnym prostokątem. Pionowa czerwona linia przerywana biegnie od góry ramki do lewej krawędzi prostokąta, wskazując współrzędną X początku prostokąta.

# Display if an Orange Barrel is to the
# left or the right
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1,1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originX < 160:
            robot.screen.print("To the left!")
        else:
            robot.screen.print("To the right!")

    wait(50, MSEC)

.originY#

.originY zwraca współrzędną y lewego górnego rogu ograniczającego pola wykrytego obiektu w pikselach. Jest to liczba całkowita z przedziału od 0 do 240.

Uwaga: Wartości pikseli są względne względem układu współrzędnych czujnika. Patrz schemat we Wprowadzeniu w celach informacyjnych.

Niebieska beczka z pomarańczowym paskiem znajduje się w centrum ramki, otoczona czarnym prostokątem. Pozioma, czerwona linia przerywana biegnie od lewej strony ramki do górnej krawędzi prostokąta, wskazując współrzędną Y początku prostokąta.

# Display if an Orange Barrel is close or far
# from the robot
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originY < 80:
            robot.screen.print("Far")
        else:
            robot.screen.print("Close")

    wait(50, MSEC)

.id#

.id zwraca identyfikator wykrytej klasyfikacji AI lub identyfikator AprilTag jako liczbę całkowitą.

W przypadku identyfikatora AprilTag właściwość .id reprezentuje wykryty numer identyfikatora AprilTag w zakresie od 0 do 37. W przypadku klasyfikacji AI właściwość .id odpowiada wstępnie zdefiniowanemu identyfikatorowi w sekcji Klasyfikacje AI.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.score#

.score zwraca wynik pewności wykrytej klasyfikacji sztucznej inteligencji jako liczbę całkowitą od 1 do 100.

Niższy wynik oznacza, że ​​czujnik ma mniejszą pewność co do wykrytego obiektu, natomiast wyższy wynik oznacza, że ​​czujnik ma większą pewność.

# Look confident if an Orange Barrel is detected
while True:
    barrel = robot.vision.get_data(ORANGE_BARREL)

    if barrel[0].exists:
        if barrel[0].score > 95:
            robot.screen.show_emoji(CONFIDENT)
        else:
            robot.screen.hide_emoji()

    wait(50, MSEC)

.type#

.type zwraca liczbę całkowitą wskazującą typ wykrytego obiektu. Możesz porównać tę wartość, używając numeru typu lub odpowiadającej mu stałej nazwanej:

Typ obiektu

Dołączone obiekty

AiVision.AI_OBJECT

— Piłki sportowe
— Beczki niebieskie
— Beczki pomarańczowe

AiVision.TAG_OBJECT

— Identyfikatory AprilTag

AiVision.COLOR_OBJECT

— Sygnatury kolorów

AiVision.CODE_OBJECT

— Kody kolorów

# Display if an AprilTag ID or AI Classification
# is detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)
    if vision_data[0].exists:
        if vision_data[0].type == AiVision.AI_OBJECT:
            robot.screen.print("AI Object!")
        elif vision_data[0].type == AiVision.TAG_OBJECT:
            robot.screen.print("AprilTag ID!")
    wait(0.1, SECONDS)

# Display a list of all detected objects
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)

    if vision_data[0].exists:
        for obj in vision_data:
            if obj.type == AiVision.AI_OBJECT:
                robot.screen.print("- AI Object")
            elif obj.type == AiVision.TAG_OBJECT:
                robot.screen.print("- AprilTag ID")
            robot.screen.next_row()

    wait(0.1, SECONDS)

Konstruktorzy#

Creating a Color Signature#

Nowy podpis koloru jest tworzony za pomocą konstruktora Colordesc , a następnie rejestrowany w czujniku AI Vision za pomocą metody color_description Obiekt Colordesc definiuje jedną z maksymalnie siedmiu wykrywalnych sygnatur kolorów dla czujnika, ale musi zostać jawnie ustawiony za pomocą metody color_description , aby zaczął obowiązywać.

Użycie Colordesc:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametr

Opis

index

Liczba całkowita od 1 do 7 reprezentująca indeks Sygnatury Koloru. Jeśli dwie Sygnatury Koloru używają tego samego indeksu, druga nadpisze pierwszy.

red

Liczba całkowita od 0 do 255 określająca składową czerwoną koloru.

green

Liczba całkowita od 0 do 255 określająca zielony składnik koloru.

blue

Liczba całkowita od 0 do 255 określająca niebieski składnik koloru.

hangle

Liczba zmiennoprzecinkowa od 1 do 40, reprezentująca zakres odcienia w stopniach.

hdsat

Wartość zmiennoprzecinkowa od 0,10 do 1,00 reprezentująca zakres nasycenia.

color_description Zastosowanie:
robot.vision.color_description(object)

Parametr

Opis

object

Obiekt Colordesc , który należy ustawić jako wykrywalny podpis koloru.

# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    red_boxes = robot.vision.get_data(red_box)

    if red_boxes[0].exists:
        robot.screen.print("Red detected!")
    else:
        robot.screen.print("No red detected.")

    wait(0.2, SECONDS)

Creating a Color Code#

Nowy kod koloru jest tworzony za pomocą konstruktora Codedesc , a następnie aktywowany za pomocą metody code_description Kod koloru grupuje od 2 do 4 istniejących obiektów Colordesc w pojedynczy identyfikator, który czujnik wizyjny AI może wykryć jako sekwencję, ale musi zostać jawnie ustawiony za pomocą metody code_description , aby zaczął obowiązywać.

Użycie Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)

Parametr

Opis

index

Indeks kodu koloru od 1 do 8. Uwaga: jeśli utworzysz dwa obiekty Codedesc Codedesc z tym samym indeksem, drugi zastąpi pierwszy.

c1

Colordesc w kodzie.

c2

Drugi obiekt Colordesc w kodzie.

c3

Opcjonalnie. Trzeci obiekt Colordesc.

c4

Opcjonalnie. Czwarty obiekt Colordesc.

code_description Zastosowanie:
robot.vision.code_description(object)

Parametr

Opis

object

Obiekt Codedesc o , który należy zarejestrować jako wykrywalny kod koloru.

# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)

robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)

# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    code_objects = robot.vision.get_data(red_purple)

    if code_objects[0].exists:
        robot.screen.print("Code detected!")
    else:
        robot.screen.print("No code detected.")

    wait(0.2, SECONDS)