Vize umělé inteligence#

Zavedení#

Senzor obrazu s umělou inteligencí kódovacího robota VEX AIM detekuje a sleduje objekty, barvy a identifikátory AprilTag. To umožňuje robotovi analyzovat své okolí, sledovat objekty a reagovat na základě detekovaných vizuálních dat.

Snímač AI Vision má rozlišení 320×240 pixelů. Počátek (0, 0) se nachází v levém horním rohu, střed snímače je v bodě (160, 120), jak je znázorněno na obrázku níže:

Diagram znázorňující rozlišení kamerového senzoru AIM AI, kde je souřadnice 0, 0 v levém horním rohu diagramu, 320, 0 v pravém horním rohu a 0, 240 v levém dolním rohu, přičemž souřadnice 160, 120 jsou přesně uprostřed.

Níže je uveden seznam všech metod a vlastností:

Akce – Zobrazení nebo skrytí obrazu z kamery AI Vision.

Gettery – Zjišťují, zda robot drží předmět.

Vlastnosti — Data objektu vrácená z get_data.

  • exists — Zda objekt existuje v aktuální detekci jako booleovská hodnota.

  • width — Šířka detekovaného objektu.

  • height — Výška detekovaného objektu.

  • centerX — Pozice středu objektu na souřadnici X.

  • centerY — Pozice středu objektu v ose Y.

  • bearing — Horizontální úhel vzhledem k přední části robota.

  • rotation — Orientace objektu.

  • originX — Pozice X levého horního rohu objektu.

  • originY — Pozice Y levého horního rohu objektu.

  • id — Klasifikace nebo ID tagu objektu.

  • score — Skóre spolehlivosti pro klasifikace umělé inteligence.

  • type — Vrátí typ objektu (AI, Tag, Color nebo Code).

Konstruktory – Definují barevné signatury a kódy.

Akce#

show_aivision#

show_aivision zobrazuje živá data z AI Vision Sensor na obrazovce robota. Živá data překryjí všechny ostatní obrázky nebo text na obrazovce.

Poznámka: Na obrazovce se nezobrazí žádné další obrázky ani text, pokud se pro skrytí kanálu nepoužije parametr hide_aivision.

Usage:
robot.screen.show_aivision()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

hide_aivision#

hide_aivision odstraní živý přenos dat z AI Vision Sensor z obrazovky robota.

Usage:
robot.screen.hide_aivision()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 povoluje nebo zakazuje detekci ID AprilTag, kde stav je booleovská hodnota.

Senzor dokáže detekovat ID AprilTag 0 až 36 z rodiny Circle21h7.

Usage:
robot.vision.tag_detection(state)

Parametry

Popis

state

Hodnoty jsou: True, což povoluje detekci ID AprilTag, nebo False, což detekci ID AprilTag zakazuje.

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)

Gettery#

get_data#

Funkce get_data filtruje data z rámce senzoru AI Vision do jediného podpisu – uloženého popisu něčeho, co senzor dokáže rozpoznat, například předtrénovaného objektu, ID AprilTag nebo nakonfigurovaného barevného podpisu či barevného kódu – a vrací tuple.

Barevné podpisy a Barevné kódy musí být nejprve nakonfigurovány v nástroji AI Vision Utility, než je bude možné použít s touto metodou.

Objekt tuple ukládá objekty seřazené od největšího po nejmenší podle šířky, počínaje indexem 0. K vlastnostem properties každého objektu lze přistupovat pomocí jeho indexu. Pokud nejsou detekovány žádné odpovídající objekty, vrátí se prázdná n-tica.

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

Parametry

Popis

signature

Filtruje datovou sadu tak, aby obsahovala pouze data daného podpisu. Dostupné signatury jsou:

  • ALL_VISION - Sportovní míče, sudy, kódovací roboti VEX AIM, ID, barvy a barevné kódy AprilTag
  • ALL_CARGO - Sportovní míče a sudy
  • ALL_TAGS - Všechna ID AprilTag
  • ALL_COLORS - Všechny nakonfigurované barevné signatury a barevné kódy
  • SPORTS_BALL - Pouze sportovní míče
  • BLUE_BARREL - Pouze modré sudy
  • ORANGE_BARREL - Pouze oranžové sudy
  • AIM_ROBOT - Všichni kódovací roboti VEX AIM
  • TAG0 až TAG37 - Jedno ID AprilTag od 0 do 37
  • NAME – Barevný podpis nebo barevný kód, kde NAME je název nakonfigurovaný v nástroji AI Vision Utility.

count

Volitelné. Nastavuje maximální počet objektů, které lze vrátit, od 1 do 24 (výchozí: 8).

Poznámka: ID AprilTag 5 až 37 lze získat pomocí vytištěných ID 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)

Poznámka: Vrácenou n-tici lze seřadit podle libovolné vlastnosti property, nejen podle šířky, pomocí funkce Pythonu sorted Například řazení podle ID 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)

Nebo seřazení podle výšky:

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

Zobrazení dat#

Výpis n-tice vrácené funkcí get_data zobrazí seznam všech vlastností všech detekovaných objektů:

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

Snímek obrazovky okna konzole zobrazující ladicí výstup pro detekované ID AprilTag. Text uvádí 'Objekt č. 0' s poli jako exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 a rotation: 0.0, následovaný oddělovací čárou a začátkem 'Objektu č. 1' s exists: True, type: AprilTag ID, id: 4 a centerX: 122.

Klasifikace umělé inteligence#

Snímač obrazu AIM AI dokáže detekovat tyto klasifikace umělé inteligence:

Číslo průkazu totožnosti

Klasifikace umělé inteligence

Podpis

0

Míč

SPORTS_BALL

1

Modrý sud

BLUE_BARREL

2

Pomerančový sud

ORANGE_BARREL

3

Robot AIM

AIM_ROBOT

Barevné podpisy#

Barevný podpis je jedinečná barva, kterou dokáže senzor AI Vision Sensor rozpoznat. Díky těmto podpisům může senzor detekovat a sledovat objekty na základě jejich barvy. Jakmile je barevný podpis nakonfigurován, může senzor identifikovat objekty s danou barvou ve svém zorném poli. Barevné podpisy se používají s funkcí get_data ke zpracování a detekci barevných objektů v reálném čase.

Utilita AI Vision Utility zobrazuje připojený kamerový senzor detekující dva barevné objekty. Levá strana zobrazuje živý obraz z kamery s modrým rámečkem vlevo a červeným rámečkem vpravo, každý ohraničený bílými ohraničovacími rámečky. Černé štítky zobrazují jejich příslušné názvy, souřadnice a rozměry. Pravá strana obsahuje nastavení barevného podpisu s posuvníky pro rozsah odstínu a sytosti pro červený i modrý rámeček. Tlačítka pro přidávání barev, zmrazení videa, kopírování a ukládání obrázku jsou dole a tlačítko pro zavření je v pravém dolním rohu.

# 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!")

Barevné kódy#

Barevný kód je strukturovaný vzor složený ze 2 až 4 barevných podpisů uspořádaných v určitém pořadí. Tyto kódy umožňují senzoru AI Vision Sensor rozpoznávat předdefinované barevné vzory. Barevné kódy jsou užitečné pro identifikaci složitých objektů nebo vytváření jedinečných značek pro autonomní navigaci.

Rozhraní nástroje AI Vision Utility zobrazuje připojený kamerový senzor detekující dva sousední objekty, modrý rámeček vlevo a červený rámeček vpravo, seskupené v jednom bílém ohraničujícím rámečku označeném BlueRed. Informace o detekci zahrnují úhel A:11° , souřadnice X:143, Y:103 , šířku W:233 a výšku H:108 . Na pravém panelu jsou uvedeny tři barevné signatury: Red_Box, Blue_Box a BlueRed s nastavitelnými rozsahy odstínu a sytosti. Signatura BlueRed kombinuje Blue_Box a Red_Box. Pod video kanálem jsou tlačítka označená jako Freeze Video Zmrazit video , Copy Image Kopírovat obrázek , Save Image Uložit obrázek a Close Zavřít .

# 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 vrací booleovskou hodnotu, která indikuje, zda robot aktuálně má sportovní míč.

  • True — Robot má sportovní míč.

  • False — Robot nemá sportovní míč.

Usage:
robot.has_sports_ball()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 vrací booleovskou hodnotu, která indikuje, zda robot aktuálně má nějaký typ sudu.

  • True — Robot má sud.

  • False — Robot nemá sud.

Usage:
robot.has_any_barrel()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 vrací booleovskou hodnotu, která indikuje, zda má robot aktuálně modrý sud.

  • True — Robot má modrý sud.

  • False — Robot nemá modrý sud.

Usage:
robot.has_blue_barrel()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 vrací booleovskou hodnotu, která indikuje, zda má robot aktuálně oranžový sud.

  • True — Robot má oranžový sud.

  • False — Robot nemá oranžový sud.

Usage:
robot.has_orange_barrel()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

    wait(50, MSEC)

Nemovitosti#

Každý objekt uložený v n-tici po použití metody robot.vision.get_data obsahuje dvanáct vlastností.

All property values except .id, .score, and .type describe the detected object’s position, size, orientation, or bearing at the moment robot.vision.get_data was used. These values are measured in pixels or degrees, based on the sensor’s 320 by 240 pixel resolution.

Modrý hlaveň s oranžovým pruhem je uprostřed rámečku, obklopený černým ohraničovacím rámečkem. Osy x a y jsou označeny od 0 do 320 zleva doprava nahoře a od 0 do 240 shora dolů na levé straně.

.exists#

.exists vrací booleovskou hodnotu, která indikuje, zda index v n-tici existuje či nikoli.

  • True — Index existuje.

  • False — Index neexistuje.

# 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 vrací šířku detekovaného objektu v pixelech, což je celé číslo mezi 1 a 320.

Poznámka: Hodnoty pixelů jsou relativní vzhledem k souřadnicovému systému senzoru. Viz diagram v úvodu pro referenci.

Modrý válec s oranžovým pruhem je uprostřed rámečku, obklopený černým ohraničovacím rámečkem. Dvě svislé červené přerušované čáry se táhnou od horní části rámečku dolů k levému a pravému okraji ohraničovacího rámečku. Oboustranná černá šipka mezi těmito čarami označuje šířku.

# 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 vrací výšku detekovaného objektu v pixelech, což je celé číslo mezi 1 a 240.

Poznámka: Hodnoty pixelů jsou relativní vzhledem k souřadnicovému systému senzoru. Viz diagram v úvodu pro referenci.

V rámečku je uprostřed modrý válec s oranžovým pruhem, obklopený černým ohraničovacím rámečkem. Z levé strany rámečku k hornímu a dolnímu okraji ohraničovacího rámečku se táhnou dvě vodorovné červené přerušované čáry. Mezi těmito čarami je znázorněna dvojitá černá šipka.

# 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 vrací souřadnici x středu detekovaného objektu v pixelech, což je celé číslo mezi 0 a 320.

Poznámka: Hodnoty pixelů jsou relativní vzhledem k souřadnicovému systému senzoru. Viz diagram v úvodu pro referenci.

Modrý hlaveň s oranžovým pruhem je uprostřed rámečku, obklopený černým ohraničovacím rámečkem. Svislá červená přerušovaná čára se táhne od horní části rámečku dolů do středu ohraničovacího rámečku a označuje souřadnici X středu.

# 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 vrací souřadnici y středu detekovaného objektu v pixelech, což je celé číslo mezi 0 a 240.

Poznámka: Hodnoty pixelů jsou relativní vzhledem k souřadnicovému systému senzoru. Viz diagram v úvodu pro referenci.

Modrý hlaveň s oranžovým pruhem je uprostřed rámečku, obklopený černým ohraničovacím rámečkem. Z levé strany rámečku do středu ohraničovacího rámečku vede vodorovná červená přerušovaná čára, která označuje souřadnici Y středu.

# 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 vrací desetinné číslo (float) vyjadřující, jak daleko se objekt nachází vlevo nebo vpravo od středu pohledu senzoru AI Vision ve stupních. Hodnota 0 znamená, že je objekt vycentrován, kladné hodnoty znamenají, že je objekt vpravo, a záporné hodnoty znamenají, že je objekt vlevo.

Schéma shora dolů znázorňující kódovacího robota VEX AIM uprostřed kruhové základny se svislou referenční čarou a červenou čarou směřující ke sportovnímu míči vlevo, označenou jako -30 stupňů. Schéma shora dolů znázorňující kódovacího robota VEX AIM uprostřed kruhové základny se svislou referenční čarou a červenou čarou směřující vpravo ke sportovnímu míči, označenou úhlem 30 stupňů.
# 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 vrací orientaci objektu v rovině pohledu senzoru AI Vision, měřenou ve stupních od 0 do 359. Barevný kód je 0°, pokud jsou jeho barvy uspořádány vodorovně (např. červená–modrá). Pokud jsou barvy otočeny, úhel se změní (např. uspořádání modrá–červená vrátí 180°).

V níže uvedeném příkladu byl barevný kód nakonfigurován s červenou barvou vlevo a modrou vpravo.

Na tomto obrázku je umístění modré na červenou ekvivalentní otočení původního barevného kódu o 270 stupňů doprava.

Rozhraní kamery zobrazuje vertikálně naskládaný objekt s modrou horní polovinou a červenou spodní polovinou, vycentrovaný v záběru. Popisek pod objektem zní Red_Blue A:270° CX:185 CY:81 W:93 H:150, který uvádí název objektu, úhel natočení, souřadnice středu X a Y, šířku a výšku. Rozměry obrazu označují mřížky a číselné osy, přičemž X má rozsah 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 vrací souřadnici x levého horního rohu ohraničovacího rámečku detekovaného objektu v pixelech, což je celé číslo mezi 0 a 320.

Poznámka: Hodnoty pixelů jsou relativní vzhledem k souřadnicovému systému senzoru. Viz diagram v úvodu pro referenci.

Modrý válec s oranžovým pruhem je uprostřed rámečku, obklopený černým ohraničovacím rámečkem. Svislá červená přerušovaná čára se táhne od horního okraje rámečku k levému okraji ohraničovacího rámečku a označuje souřadnici X počátku ohraničovacího rámečku.

# 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 vrací souřadnici y levého horního rohu ohraničovacího rámečku detekovaného objektu v pixelech, což je celé číslo mezi 0 a 240.

Poznámka: Hodnoty pixelů jsou relativní vzhledem k souřadnicovému systému senzoru. Viz diagram v úvodu pro referenci.

Modrý válec s oranžovým pruhem je uprostřed rámečku, obklopený černým ohraničovacím rámečkem. Z levé strany rámečku k hornímu okraji ohraničovacího rámečku vede vodorovná červená přerušovaná čára, která označuje souřadnici Y počátku ohraničovacího rámečku.

# 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 vrací ID detekované klasifikace AI nebo ID AprilTag jako celé číslo.

For an AprilTag ID, the .id property represents the detected AprilTag ID number in the range of 0 to 37. For an AI Classification, the .id property corresponds to the predefined ID in the AI Classifications section.

# 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 vrací skóre spolehlivosti detekované klasifikace AI jako celé číslo mezi 1 a 100.

Nižší skóre znamená, že si je senzor méně jistý detekovaným objektem, zatímco vyšší skóre znamená, že si je senzor jistější.

# 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 vrací celé číslo, které označuje typ detekovaného objektu. Tuto hodnotu můžete porovnat buď pomocí čísla typu, nebo odpovídající pojmenované konstanty:

Typ objektu

Zahrnuté objekty

AiVision.AI_OBJECT

— Sportovní míče
— Modré sudy
— Oranžové sudy

AiVision.TAG_OBJECT

— ID značek April

AiVision.COLOR_OBJECT

— Barevné podpisy

AiVision.CODE_OBJECT

— Barevné kódy

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

Konstruktéři#

Creating a Color Signature#

Nový barevný podpis se vytvoří pomocí konstruktoru Colordesc a poté se zaregistruje u AI Vision Sensor pomocí metody color_description Objekt Colordesc definuje 1 z až 7 detekovatelných barevných podpisů pro senzor, ale aby se projevil, musí být explicitně nastaven pomocí color_description.

Použití popisu barev:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametr

Popis

index

Celé číslo od 1 do 7 představující index barevné signatury. Pokud dvě barevné signatury používají stejný index, druhá z nich přepíše první.

red

Celé číslo od 0 do 255 pro červenou složku barvy.

green

Celé číslo od 0 do 255 pro zelenou složku barvy.

blue

Celé číslo od 0 do 255 pro modrou složku barvy.

hangle

Číslo s plovoucí desetinnou čárkou od 1 do 40 představující rozsah odstínu ve stupních.

hdsat

Číslo s plovoucí desetinnou čárkou od 0,10 do 1,00 představující rozsah nasycení.

Použití popisu barvy:
robot.vision.color_description(object)

Parametr

Popis

object

Objekt Colordesc , který se má nastavit jako detekovatelný barevný podpis.

# 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#

Nový barevný kód se vytvoří pomocí konstruktoru Codedesc a poté se aktivuje pomocí metody code_description Barevný kód seskupuje 2 až 4 existující objekty Colordesc do jednoho identifikátoru, který dokáže AI Vision Sensor detekovat jako sekvenci, ale aby se projevil, musí být explicitně nastaven pomocí code_description.

Použití kódu:
Codedesc(index, c1, c2, c3, c4, c5)

Parametr

Popis

index

Index barevného kódu od 1 do 8. Poznámka: Pokud vytvoříte dva objekty Codedesc se stejným indexem, druhý z nich přepíše první.

c1

První objekt Colordesc v kódu.

c2

Druhý objekt Colordesc v kódu.

c3

Volitelné. Třetí objekt typu Colordesc.

c4

Volitelné. Čtvrtý objekt typu Colordesc.

Použití code_description:
robot.vision.code_description(object)

Parametr

Popis

object

Objekt typu Codedesc , který se má zaregistrovat jako detekovatelný barevný kód.

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