Codificação com o sensor de visão AI no VEXcode V5 C++

Certifique-se de ter Assinaturas de Cor e Códigos de Cor configurados com seu Sensor de Visão de IA para que eles possam ser usados com seus blocos. Para saber mais sobre como configurá-los, você pode ler os artigos abaixo:

O sensor de visão de IA também pode detectar classificações de IA e AprilTags. Para aprender como habilitar esses modos de detecção, acesse aqui:

Para saber mais detalhes sobre esses comandos individuais e como usá-los no VEXcode, acesse o site da API.


Obtenha dados visuais com o AI Vision Sensor

Cada comando do AI Vision Sensor começará com o nome do AI Vision Sensor configurado. Para todos os exemplos neste artigo, o nome do sensor AI Vision usado será AIVision.

tirar um instantâneo

O método takeSnapshot tira uma foto do que o AI Vision Sensor está vendo no momento e extrai dados desse instantâneo que podem ser usados em um projeto. Quando um instantâneo é tirado, você precisa especificar de que tipo de objeto o AI Vision Sensor deve coletar dados:

  • Uma assinatura de cor ouCódigo de cor
    • Estas assinaturas visuais começam com o nome do AI Vision Sensor, sublinhado duplo e, em seguida, o nome da assinatura visual, por exemplo: AIVision1__Blue.
  • Classificações de IA - aivision::ALL_AIOBJS
  • abrilTags- aivision::ALL_TAGS

Tirar um instantâneo criará uma matriz de todos os objetos detectados que você especificou. Por exemplo, se você quisesse detectar uma Assinatura de Cor "Azul" e o Sensor de Visão de IA detectasse 3 objetos azuis diferentes, os dados de todos os três seriam colocados na matriz.

Neste exemplo, é tirado um instantâneo da Assinatura de Cor "Azul" do Sensor de Visão de IA chamado AIVision1. Ele exibe o número de objetos detectados na matriz e captura um novo instantâneo a cada 0,5 segundos.

while (true) {
// Obtenha um instantâneo de todos os objetos de cor azul.
AIVision.takeSnapshot(AIVision1__Blue);

// Verifique se um objeto foi detectado no instantâneo antes de extrair dados.
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

objetos

Cada objeto de um instantâneo tem propriedades diferentes que podem ser usadas para relatar informações sobre esse objeto. O método objects permite que você acesse essas propriedades.

As propriedades disponíveis são as seguintes:

  • eu ia
  • centroX e centroY
  • origemX e origemY
  • largura
  • altura
  • ângulo
  • existe
  • pontuação

Para acessar a propriedade de um objeto, use o nome do AI Vision Sensor, seguido pelo método do objeto e, em seguida, o índice do objeto.

O índice do objeto indica qual propriedade específica do objeto você deseja recuperar. Depois de tirar uma foto, o sensor de visão de IA classifica automaticamente os objetos por tamanho. O maior objeto recebe o índice 0, enquanto objetos menores recebem números de índice mais altos.

Por exemplo, chamar a largura do objeto maior seria AIVision1.objects[0].width.

eu ia

A propriedade id está disponível apenas para AprilTags e Classificações AI.

Três marcadores de identificação quadrados rotulados com IDs 0, 9 e 3, cada um com coordenadas correspondentes e medidas de tamanho exibidas em texto branco. O ID 0 está à esquerda, o ID 9 está à direita e o ID 3 está na parte inferior central. Cada marcador tem um padrão preto e branco exclusivo dentro de um quadrado.

Para uma AprilTag, a propriedade id representa o número de ID da(s) AprilTag(s)detectada( ).

A identificação de AprilTags específicas permite a navegação seletiva. Você pode programar seu robô para se mover em direção a certas tags enquanto ignora outras, usando-as efetivamente como sinalizadores para navegação automatizada.

Duas bolas e dois anéis identificados na imagem, com etiquetas que indicam a posição, o tamanho e a pontuação. A bola vermelha está à esquerda, a bola azul está à direita, o anel verde está no canto inferior esquerdo e o anel vermelho está no canto inferior direito. Cada objeto é contornado com uma caixa branca, e detalhes como coordenadas X, Y, largura, altura e uma pontuação de 99% são exibidos em texto branco.

ParaClassificações de IA, a propriedade id representa o tipo específico de Classificação de IA detectada.

Identificar Classificações de IAespecíficas permite que o robô se concentre apenas em objetos específicos, como querer navegar apenas em direção a uma Buckyball vermelha, não a uma azul.

Aceda a estes artigos para obter mais informações sobre AprilTags e AI Classifications e como ativar a sua deteção no AI Vision Utility.

centroX e centroY

Estas são as coordenadas centrais do objeto detectado em pixels.

Um Buckyball azul sendo rastreado por um sistema de visão computacional. O objeto é contornado por um quadrado branco e dentro do contorno há um quadrado vermelho menor circundando uma cruz branca centralizada. No canto superior esquerdo da imagem, uma etiqueta indica que o objeto é azul, com coordenadas X:176, Y:117 e dimensões L:80, A:78.

As coordenadas CenterX e CenterY ajudam na navegação e no posicionamento. O sensor de visão AI tem uma resolução de 320 x 240 pixels.

Dois objetos cúbicos azuis rastreados por um sistema de visão. O objeto superior é rotulado com coordenadas X:215, Y:70 e dimensões L:73, A:84, com um contorno branco e uma cruz branca centralizada. O objeto inferior é rotulado com as coordenadas X:188, Y:184 e dimensões L:144, A:113, também contornadas em branco com uma cruz branca centralizada.

Você pode ver que um objeto mais próximo do sensor de visão de IA terá uma coordenada CenterY menor do que um objeto mais distante.

Neste exemplo, como o centro da visão do sensor de visão de IA é (160, 120), o robô virará para a direita até que a coordenada centroX de um objeto detectado seja maior que 150 pixels, mas menor que 170 pixels.

while (true) {
  // Obtenha um instantâneo de todos os objetos de cor azul.
  AIVision.takeSnapshot(AIVision__Blue);

  // Verifique se um objeto foi detectado no instantâneo antes de extrair dados.
  se (AIVision.objectCount > 0) {

    se (AIVision.objects[0].centerX > 150,0 && 170,0 > AIVision.objects[0].centerX) {
      Transmissão.virar(direita);
    } senão {
      Transmissão.parar();
    }
  }
  esperar(5, ms);
}

origemX e origemY

OriginX e OriginY são as coordenadas no canto superior esquerdo do objeto detectado em pixels.

Um Buckyball azul sendo rastreado por um sistema de visão. Um contorno branco circunda o objeto, com uma cruz branca centralizada dentro do contorno. O rótulo superior esquerdo indica a cor do objeto como azul, juntamente com as coordenadas X:176, Y:117 e as dimensões L:80, A:78. Um pequeno quadrado vermelho destaca o canto superior esquerdo do objeto.

As coordenadas OriginX e OriginY ajudam na navegação e no posicionamento. Ao combinar essa coordenada com a Largura e a Altura do objeto, você pode determinar o tamanho da caixa delimitadora do objeto. Isso pode ajudar a rastrear objetos em movimento ou a navegar entre objetos.

largura e altura

Esta é a largura ou altura do objeto detectado em pixels.

A imagem mostra uma Buckyball azul com um contorno quadrado branco rastreando-a. O canto superior esquerdo tem uma etiqueta indicando que é um objeto azul, com coordenadas X:176, Y:117 e dimensões L:80, A:78. Setas vermelhas destacam a largura e a altura do objeto.

As medidas de largura e altura ajudam a identificar diferentes objetos. Por exemplo, um Buckyball terá uma altura maior que um Ring.

Dois objetos cúbicos azuis sendo rastreados por um sistema de reconhecimento visual. O cubo superior tem um contorno branco com uma etiqueta indicando sua posição como X:215, Y:70 e dimensões L:73, A:84. O cubo inferior tem um contorno branco semelhante com o rótulo exibindo X:188, Y:184 e dimensões L:144, A:113. Cada cubo tem uma cruz branca centralizada, provavelmente indicando o ponto focal do rastreamento. Os rótulos destacam as medições e os dados de rastreamento de cada objeto.

Largura e altura também indicam a distância de um objeto do sensor de visão de IA. Medidas menores geralmente significam que o objeto está mais distante, enquanto medidas maiores sugerem que ele está mais próximo.

Neste exemplo, a largura do objeto é usada para navegação. O robô se aproximará do objeto até que a largura atinja um tamanho específico antes de parar.

while (true) {
  // Obtenha um instantâneo de todos os objetos Blue.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Verifique se um objeto foi detetado no instantâneo antes de extrair dados.
  if (AIVision. objectCount > 0) {

    if (AIVision. objects[0]. largura < 250,0) {
      Drivetrain. drive(forward);
    } else {
      Drivetrain. stop();
    }
  }
  wait(5, ms);
}

ângulo

Um gif giratório mostrando blocos vermelhos e verdes. Quando os blocos são posicionados perfeitamente horizontais, do vermelho ao verde, eles são mostrados como 0 grau. Se o bloco vermelho estiver em cima do bloco verde verticalmente, ele estará a 90 graus. Se os blocos estiverem na horizontal, do verde ao vermelho, significa 180 graus. Se o bloco verde estiver em cima do bloco vermelho verticalmente, são 20 graus.

A propriedade ângulo está disponível somente para os códigos de cores eAprilTags.

Isso representa se o código de cor detectadoou AprilTag está orientado de forma diferente.

Uma pilha de dois cubos, um verde em cima e um azul embaixo, sendo rastreados por um sistema de visão. Um contorno branco envolve ambos os cubos, com uma cruz branca centralizada no cubo verde. O rótulo na parte inferior da imagem exibe Verde_Azul A:87°, indicando as cores detectadas e uma medição de ângulo. Abaixo disso, as coordenadas são dispostas como X:117, Y:186, com dimensões L:137, A:172, representando a posição e o tamanho dos cubos empilhados no quadro.

Você pode ver se o robô está orientado de forma diferente em relação ao Código de Cor ouAprilTag e tomar decisões de navegação de acordo com isso.

Dois cubos, um verde e um azul, colocados lado a lado e rastreados por um sistema de visão. Um contorno branco envolve ambos os cubos com uma cruz branca no centro. O rótulo superior esquerdo indica Verde_Azul A:0°, referenciando as cores detectadas e uma medição de ângulo. Abaixo disso, as coordenadas são mostradas como X:150, Y:102, com dimensões L:179, A:109, representando a posição e o tamanho dos cubos dentro do quadro.

Por exemplo, se um código de cor não for detectado em um ângulo adequado, o objeto que ele representa pode não ser captado corretamente pelo robô.

pontuação

A propriedade pontuação é usada ao detectarClassificações de IA com o Sensor de Visão de IA.

A imagem mostra quatro objetos sendo rastreados por um sistema de visão: duas bolas e dois anéis. A bola vermelha é rotulada com as coordenadas X:122, Y:84, W:67, H:66 e uma pontuação de 99%. A bola azul tem X:228, Y:86, W:70, H:68, com uma pontuação de 99%. O anel verde tem coordenadas X:109, Y:186, W:98, H:92 e uma pontuação de 99%. O anel vermelho é rotulado como X:259, Y:187, W:89, H:91, com uma pontuação de 99%. Cada objeto é contornado em branco, indicando precisão de rastreamento.

A pontuação de confiança indica o grau de certeza do sensor de visão de IA sobre sua detecção. Nesta imagem, há 99% de confiança na identificação das classificações de IA desses quatro objetos. Você pode usar essa pontuação para garantir que seu robô se concentre apenas em detecções altamente confiáveis.

existe

A propriedade existe é usada para detectar foi detectada no último instantâneo tirado.

Isso permite que você verifique se algum objeto detectado foi detectado no instantâneo anterior. Esta propriedade retornará True quando um objeto existir e False quando o objeto não existir.


Contagem de objetos

O método objectCount retorna a quantidade de objetos detectados no último instantâneo.

A interface do AI Vision Utility com dois cubos azuis detectados no lado esquerdo, cada um marcado com suas coordenadas X e Y e dimensões. O sistema está conectado e as AprilTags estão ativadas, enquanto a Classificação de IA está desativada. À direita, as configurações de cor azul são exibidas com intervalos ajustáveis de matiz e saturação, definidos em 22 e 0,34, respectivamente. Há uma opção para adicionar ou definir cores e congelar o vídeo. O firmware está atualizado, executando a versão 1.0.0.b16, e um botão Fechar está disponível na parte inferior.

Neste exemplo, dois objetos foram detectados com a Assinatura de Cor "Azul". Ambos serão colocados no array quando o método takeSnapshot for usado.

Este trecho de código atualiza continuamente o EXP Brain com o número de objetos detectados. Com base no exemplo fornecido, ele enviará repetidamente o valor 2, indicando que dois objetos foram detectados.

while (true) {
// Obtém um instantâneo de todos os objetos Blue.
AIVision.takeSnapshot(AIVision__Blue);

Cérebro.Ecrã.clearScreen();
Brain.Screen.setCursor(1, 1);

// Verifique se foi detetado um objeto no instantâneo antes de extrair dados.
if (AIVision. objectCount > 0) {
Brain. Screen. print(AIVision1. objectCount);
}
espera(5, ms);
}

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

Last Updated: