Visão de IA#

Introdução#

O sensor de visão com IA do robô de programação VEX AIM deteta e rastreia objetos, cores e IDs AprilTag. Isto permite que o robô analise o ambiente à sua volta, siga objetos e reaja com base nos dados visuais detetados.

O sensor de visão com IA tem uma resolução de 320×240 pixéis. A origem (0, 0) está localizada no canto superior esquerdo, posicionando o centro do sensor em (160, 120), como mostra o esquema abaixo:

Um diagrama que mostra a resolução do sensor de visão AIM AI, com a coordenada 0, 0 no canto superior esquerdo do diagrama, 320, 0 no canto superior direito e 0, 240 no canto inferior esquerdo, com 160, 120 exactamente no centro.

Segue-se uma lista de todos os métodos e propriedades:

Ações — Mostrar ou ocultar a transmissão da câmara AI Vision.

  • show_aivision — Apresenta o feed de Visão de IA no ecrã do robô.

  • hide_aivision — Oculta o feed do AI Vision do ecrã.

  • tag_detection — Activa ou desactiva a detecção de ID do AprilTag.

Getters — Detetam se o robô está a segurar um objeto.

Propriedades — Dados do objeto devolvidos de get_data.

  • exists — Indica se o objeto existe na deteção atual como um valor booleano.

  • width — Largura do objecto detectado.

  • height — Altura do objecto detectado.

  • centerX — Posição X do centro do objecto.

  • centerY — Posição Y do centro do objecto.

  • bearing — Ângulo horizontal em relação à frente do robô.

  • rotation — Orientação do objecto.

  • originX — Posição X do canto superior esquerdo do objeto.

  • originY — Posição Y do canto superior esquerdo do objeto.

  • id — Classificação ou ID da etiqueta do objeto.

  • score — Pontuação de confiança para as classificações de IA.

  • type — Retorna o tipo do objecto (AI, Tag, Color ou Code).

Construtores — Definem assinaturas e códigos de cores.

Ações#

show_aivision#

O comando show_aivision apresenta o fluxo de dados em tempo real do sensor de visão com IA no ecrã do robô. O fluxo de dados em tempo real irá sobrepor quaisquer outras imagens ou textos no ecrã.

Nota: O ecrã não irá apresentar outras imagens ou texto a menos que seja utilizado hide_aivision para ocultar o feed.

Usage:
robot.screen.show_aivision()

Parâmetros

Descrição

Este método não tem parâmetros.

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

hide_aivision#

hide_aivision remove o fluxo de dados em tempo real do sensor de visão com IA do ecrã do robô.

Usage:
robot.screen.hide_aivision()

Parâmetros

Descrição

Este método não tem parâmetros.

# 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 ativa ou desativa a deteção do ID do AprilTag, em que o estado é um valor booleano.

O sensor consegue detetar os IDs AprilTag de 0 a 36 da família Circle21h7.

Usage:
robot.vision.tag_detection(state)

Parâmetros

Descrição

state

Os valores são: True, que ativa a deteção do ID do AprilTag, ou False, que desativa a deteção do ID do 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 filtra os dados do quadro do sensor de visão de IA para uma única assinatura — uma descrição guardada de algo que o sensor pode reconhecer, como um objeto pré-treinado, um ID AprilTag ou uma assinatura de cor ou código de cor configurado — e devolve uma tupla.

As Assinaturas de cor e os Códigos de cor devem ser configurados primeiro no utilitário AI Vision antes de poderem ser utilizados com este método.

A tupla armazena os objetos ordenados do maior para o menor por largura, começando no índice 0. As propriedades de cada objeto podem ser acedidas utilizando o seu índice. Uma tupla vazia é devolvida se nenhum objeto correspondente for detetado.

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

Parâmetros

Descrição

signature

Filtra o conjunto de dados para incluir apenas os dados com a assinatura especificada. As subscrições disponíveis são:

  • ALL_VISION - Bolas desportivas, barris, robôs de programação VEX AIM, IDs AprilTag, cores e códigos de cores
  • ALL_CARGO - Bolas desportivas e barris
  • ALL_TAGS - Todos os IDs AprilTag
  • ALL_COLORS - Todas as assinaturas de cores e códigos de cor configurados
  • SPORTS_BALL - Apenas bolas desportivas
  • BLUE_BARREL - Apenas barris azuis
  • ORANGE_BARREL - Apenas barris laranja
  • AIM_ROBOT - Todos os robôs de programação VEX AIM
  • TAG0 a TAG37 - Um único ID AprilTag de 0 a 37
  • NAME - Assinatura de cor ou código de cor, em que NAME é o nome configurado no Utilitário de Visão de IA.

count

Opcional. Define o número máximo de objetos que podem ser devolvidos, de 1 a 24 (padrão: 8).

Nota: Os IDs AprilTag de 5 a 37 podem ser obtidos utilizando os IDs AprilTag impressos a partir de 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)

Nota: A tupla devolvida pode ser ordenada por qualquer propriedade, e não apenas pela largura, utilizando a função sorted do Python. Por exemplo, ordenando pelo ID da etiqueta de abril:

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

Ou, em vez disso, ordenar por altura:

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

Dados de visualização#

A impressão da tupla devolvida por get_data ( get_data apresenta uma lista de todas as propriedades de todos os objetos detectados:

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

Captura de ecrã da janela da consola que apresenta a saída de depuração para os IDs AprilTag detetados. O texto lista 'Objecto nº 0' com campos como exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 e rotation: 0.0, seguido de uma linha separadora e do início de 'Object nº 1' com exists: True, type: AprilTag ID, id: 4 e centerX: 122.

Classificações de IA#

O sensor de visão AIM AI pode detetar estas classificações de IA:

Número de identificação

Classificação por IA

Assinatura

0

Bola

SPORTS_BALL

1

Barril Azul

BLUE_BARREL

2

Barril Laranja

ORANGE_BARREL

3

Robô AIM

AIM_ROBOT

Assinaturas de cores#

Uma assinatura de cor é uma cor única que o sensor de visão de IA pode reconhecer. Estas assinaturas permitem que o sensor detete e rastreie objetos com base na sua cor. Uma vez configurada uma assinatura de cor, o sensor pode identificar objetos com essa cor específica no seu campo de visão. As assinaturas de cor são utilizadas com get_data para processar e detetar objetos coloridos em tempo real.

O utilitário de visão com IA mostra um sensor de visão ligado detetando dois objetos coloridos. O lado esquerdo exibe uma transmissão em direto da câmara com uma caixa azul à esquerda e uma caixa vermelha à direita, cada uma contornada por caixas delimitadoras brancas. Os rótulos pretos exibem os seus respetivos nomes, coordenadas e dimensões. O lado direito contém definições de assinatura de cor, com controlos deslizantes para a tonalidade e gama de saturação para as caixas vermelha e azul. Os botões para adicionar cores, congelar o vídeo, copiar e guardar a imagem estão na parte inferior, juntamente com um botão de fecho no canto inferior direito.

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

Códigos de cores#

Um código de cores é um padrão estruturado composto por 2 a 4 assinaturas de cores organizadas numa ordem específica. Estes códigos permitem que o sensor de visão com inteligência artificial reconheça padrões de cor predefinidos. Os códigos de cores são úteis para identificar objetos complexos ou criar marcadores únicos para navegação autónoma.

A interface do Utilitário de Visão de IA mostra um sensor de visão ligado que deteta dois objetos adjacentes, uma caixa azul à esquerda e uma caixa vermelha à direita, agrupados numa única caixa delimitadora branca rotulada como AzulVermelho. A informação de deteção inclui o ângulo (A:11°), as coordenadas (X:143, Y:103), a largura (L:233) e a altura (A:108). No painel direito, são listadas três assinaturas de cor: Caixa_Vermelha, Caixa_Azul e AzulVermelho, com gamas de tonalidade e saturação ajustáveis. A assinatura AzulVermelho combina as assinaturas Caixa_Azul e Caixa_Vermelha. Abaixo da imagem de vídeo, encontram-se os botões Congelar Vídeo, Copiar Imagem, Guardar Imagem e Fechar.

# 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 devolve um valor booleano indicando se o robô possui atualmente uma bola desportiva.

  • True — O robô tem uma bola desportiva.

  • False — O robô não possui uma bola desportiva.

Usage:
robot.has_sports_ball()

Parâmetros

Descrição

Este método não tem parâmetros.

# 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 devolve um valor booleano indicando se o robô possui atualmente algum tipo de barril.

  • True — O robô tem um barril.

  • False — O robô não tem um barril.

Usage:
robot.has_any_barrel()

Parâmetros

Descrição

Este método não tem parâmetros.

# 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 devolve um valor booleano indicando se o robô possui atualmente um barril azul.

  • True — O robô tem um barril azul.

  • False — O robô não tem um barril azul.

Usage:
robot.has_blue_barrel()

Parâmetros

Descrição

Este método não tem parâmetros.

# 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 devolve um valor booleano indicando se o robô possui atualmente um barril laranja.

  • True — O robô tem um barril laranja.

  • False — O robô não tem um barril laranja.

Usage:
robot.has_orange_barrel()

Parâmetros

Descrição

Este método não tem parâmetros.

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

    wait(50, MSEC)

Propriedades#

Existem doze propriedades que são incluídas em cada objeto armazenado numa tupla após a utilização do método robot.vision.get_data.

Todos os valores de propriedade, exceto .id, .scoree .type , descrevem a posição, o tamanho, a orientação ou a direção do objeto detetado no momento em que robot.vision.get_data foi utilizado. Estes valores são medidos em pixéis ou graus, com base na resolução de 320 por 240 pixéis do sensor.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Os eixos x e y estão rotulados de 0 a 320 da esquerda para a direita na parte superior e de 0 a 240 de cima para baixo na lateral esquerda, respetivamente.

.exists#

.exists devolve um valor booleano indicando se o índice existe na tupla ou não.

  • True — O índice existe.

  • False — O índice não existe.

# 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 devolve a largura do objeto detetado em pixéis, que é um número inteiro entre 1 e 320.

Nota: Os valores dos pixéis são relativos ao sistema de coordenadas do sensor. Consulte o diagrama na Introdução para referência.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Duas linhas verticais tracejadas vermelhas estendem-se desde o topo do quadro até às margens esquerda e direita da caixa delimitadora. Uma seta preta de duas pontas entre estas linhas indica a medida da largura.

# 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 devolve a altura do objeto detetado em pixéis, que é um número inteiro entre 1 e 240.

Nota: Os valores dos pixéis são relativos ao sistema de coordenadas do sensor. Consulte o diagrama na Introdução para referência.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Duas linhas horizontais tracejadas vermelhas estendem-se do lado esquerdo do quadro até às margens superior e inferior da caixa delimitadora. Uma seta preta de duas pontas entre estas linhas indica a medida da altura.

# 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 devolve a coordenada x do centro do objecto detectado em pixéis, que é um número inteiro entre 0 e 320.

Nota: Os valores dos pixéis são relativos ao sistema de coordenadas do sensor. Consulte o diagrama na Introdução para referência.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Uma linha vertical tracejada vermelha estende-se desde o topo do enquadramento até ao centro da caixa delimitadora, indicando a coordenada X do centro.

# 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 devolve a coordenada y do centro do objecto detectado em pixéis, que é um número inteiro entre 0 e 240.

Nota: Os valores dos pixéis são relativos ao sistema de coordenadas do sensor. Consulte o diagrama na Introdução para referência.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Uma linha tracejada vermelha horizontal estende-se do lado esquerdo do quadro até ao centro da caixa delimitadora, indicando a coordenada Y do centro.

# 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 devolve um decimal (float) que representa a distância de um objeto à esquerda ou à direita do centro da visão do sensor de visão de IA em graus. Um valor de 0 significa que está centrado, valores positivos significam que o objeto está à direita e valores negativos significam que o objeto está à esquerda.

Diagrama de cima para baixo que mostra um robô de programação VEX AIM centrado numa base circular com uma linha de referência vertical e uma linha vermelha inclinada em direção a uma bola desportiva à esquerda, marcada com -30 graus. Diagrama de cima para baixo que mostra um robô de programação VEX AIM centrado numa base circular com uma linha de referência vertical e uma linha vermelha inclinada em direção a uma bola desportiva à direita, marcada com 30 graus.
# 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 devolve a orientação do objeto no plano de visualização do sensor de visão com IA, medida em graus de 0 a 359. Um código de cor é 0° quando as suas cores estão dispostas numa linha horizontal (por exemplo, vermelho-azul). Se as cores forem rodadas, o ângulo muda (por exemplo, dispor azul-vermelho retorna 180°).

No exemplo abaixo, o código de cores foi configurado com vermelho à esquerda e azul à direita.

Nesta imagem, colocar azul sobre vermelho equivale a rodar o código de cor original 270 graus para a direita.

Uma interface de câmara exibe um objeto empilhado verticalmente com a metade superior azul e a metade inferior vermelha, centrado no enquadramento. Uma etiqueta por baixo do objeto indica Vermelho_Azul A:270° CX:185 CY:81 W:93 H:150, indicando o nome do objeto, o ângulo de rotação, as coordenadas X e Y do centro, a largura e a altura. As linhas de grelha e os eixos numéricos marcam as dimensões da imagem, com X a variar de 0 a 320 e Y de 0 a 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 devolve a coordenada x do canto superior esquerdo da caixa delimitadora do objeto detetado em pixéis, que é um número inteiro entre 0 e 320.

Nota: Os valores dos pixéis são relativos ao sistema de coordenadas do sensor. Consulte o diagrama na Introdução para referência.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Uma linha vertical tracejada vermelha estende-se desde o topo do quadro até à margem esquerda da caixa delimitadora, indicando a coordenada X da origem da caixa delimitadora.

# 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 devolve a coordenada y do canto superior esquerdo da caixa delimitadora do objeto detetado em pixéis, que é um número inteiro entre 0 e 240.

Nota: Os valores dos pixéis são relativos ao sistema de coordenadas do sensor. Consulte o diagrama na Introdução para referência.

Um barril azul com uma faixa laranja está centrado no quadro, rodeado por uma caixa delimitadora preta. Uma linha tracejada vermelha horizontal estende-se do lado esquerdo do quadro até ao bordo superior da caixa delimitadora, indicando a coordenada Y da origem da caixa delimitadora.

# 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 devolve o ID da classificação de IA detectada ou o ID do AprilTag como um número inteiro.

Para um ID AprilTag, a propriedade .id representa o número do ID AprilTag detetado no intervalo de 0 a 37. Para uma Classificação de IA, a propriedade .id corresponde ao ID predefinido na secção Classificações de IA.

# 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 devolve a pontuação de confiança da classificação de IA detectada como um número inteiro entre 1 e 100.

Uma pontuação mais baixa significa que o sensor tem menos confiança no objeto detetado, enquanto uma pontuação mais elevada significa que o sensor tem mais confiança.

# 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 devolve um número inteiro que indica o tipo de objeto detetado. Pode comparar este valor utilizando o número do tipo ou a constante nomeada correspondente:

Tipo de objeto

Objetos incluídos

AiVision.AI_OBJECT

— Bolas desportivas
— Barris azuis
— Barris laranja

AiVision.TAG_OBJECT

— IDs de etiqueta de abril

AiVision.COLOR_OBJECT

— Assinaturas a cores

AiVision.CODE_OBJECT

— Códigos de cores

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

Construtores#

Creating a Color Signature#

Uma nova assinatura de cor é criada utilizando o construtor Colordesc e depois registada com o sensor de visão de IA utilizando o método color_description Um objeto Colordesc define 1 de até 7 assinaturas de cor detetáveis ​​para o sensor, mas deve ser explicitamente definido utilizando color_description para ter efeito.

Utilização de Colordesc:
Colordesc(index, red, green, blue, hangle, hdsat)

Parâmetro

Descrição

index

Um número inteiro de 1 a 7 que representa o índice da Assinatura de Cor. Se duas Assinaturas de Cor utilizarem o mesmo índice, a segunda terá precedência sobre a primeira.

red

Um número inteiro de 0 a 255 para o componente vermelho da cor.

green

Um número inteiro de 0 a 255 para a componente verde da cor.

blue

Um número inteiro de 0 a 255 para a componente azul da cor.

hangle

Um valor de ponto flutuante de 1 a 40 que representa a gama de tonalidades em graus.

hdsat

Um valor decimal entre 0,10 e 1,00 que representa o intervalo de saturação.

Utilização de color_description:
robot.vision.color_description(object)

Parâmetro

Descrição

object

O objeto Colordesc deve ser definido como uma assinatura de cor detetável.

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

Um novo Código de Cor é criado utilizando o construtor Codedesc e depois ativado utilizando o método code_description Um Código de Cor agrupa 2 a 4 objetos Colordesc existentes num único identificador que o Sensor de Visão de IA pode detetar como uma sequência, mas deve ser explicitamente definido utilizando code_description para ter efeito.

Utilização de Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)

Parâmetro

Descrição

index

O índice do código de cor, de 1 a 8. Nota: se criar dois objetos Codedesc Codedesc índice, o segundo substituirá o primeiro.

c1

O primeiro objeto Colordesc no código.

c2

O segundo objeto Colordesc no código.

c3

Opcional. Um terceiro objecto Colordesc.

c4

Opcional. Um quarto objecto Colordesc.

Utilização de code_description:
robot.vision.code_description(object)

Parâmetro

Descrição

object

Um objeto Codedesc ) para ser registado como um código de cor detetável.

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