Programação com o sensor de visão IA no VEXcode V5 C++

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

O sensor de visão com IA também pode detetar classificações de IA e AprilTags. Para saber como ativar estes modos de deteção, aceda a este link:

Para mais detalhes sobre estes comandos individuais e como utilizá-los no VEXcode, aceda ao site da API.


Obtenha dados visuais com o sensor de visão de IA.

Cada comando do sensor de visão com IA começará com o nome do sensor de visão com IA configurado. Para todos os exemplos deste artigo, o nome do sensor de visão de IA utilizado será AIVision.

tirar uma foto

O método takeSnapshot tira uma fotografia do que o sensor de visão com IA está a ver no momento e extrai dados dessa imagem que podem ser utilizados num projeto. Ao capturar uma imagem, é necessário especificar o tipo de objeto a partir do qual o Sensor de Visão com IA deve recolher dados:

  • Assinatura de corcódigo de cor ou, código de cor
    • Estas assinaturas visuais começam com o nome do sensor de visão de IA, dois sublinhados e, em seguida, o nome da assinatura visual, por exemplo: AIVision1__Blue.
  • Classificações de IA - aivision::ALL_AIOBJS
  • AbrilTags- aivision::TODAS_AS_TAGS

Ao tirar uma fotografia, será criada uma matriz com todos os objetos detetados que especificou. Por exemplo, se quisesse detetar uma assinatura de cor "Azul" e o sensor de visão de IA detetasse 3 objetos azuis diferentes, os dados dos três seriam colocados na matriz.

Neste exemplo, é tirada uma captura instantânea da assinatura de cor "Azul" do sensor de visão de IA denominado AIVision1. Apresenta o número de objetos detetados na matriz e captura uma nova imagem a cada 0,5 segundos.

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

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

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

objetos

Cada objeto num instantâneo tem propriedades diferentes que podem ser utilizadas para gerar informações sobre esse objeto. O método `objects` permite aceder a estas propriedades.

As propriedades disponíveis são as seguintes:

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

Para aceder à propriedade de um objeto, utilize o nome do Sensor de Visão de IA, seguido do método do objeto e, em seguida, o índice do objeto.

O índice do objeto indica qual a propriedade específica do objeto que pretende recuperar. Após a captura de uma imagem, o sensor de visão com IA classifica automaticamente os objetos por tamanho. O objeto de maior tamanho recebe o índice 0, enquanto os objetos mais pequenos recebem índices mais elevados.

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

eu ia

A propriedade id está apenas disponível para as Classificações de IA e de .

Três marcadores quadrados de identificação, etiquetados com os IDs 0, 9 e 3, cada um com as coordenadas e medidas correspondentes apresentadas em texto branco. O ID 0 está à esquerda, o ID 9 está à direita e o ID 3 está na parte inferior central. Cada marcador possui um padrão único a preto e branco dentro de um quadrado.

Para um AprilTagAprilTag 1), a propriedade id representa o número de ID do(AprilTag(s) detectado(s).

Identificar etiquetas específicas abril permite uma navegação seletiva. Pode programar o seu robô para se mover em direção a determinadas etiquetas enquanto ignora outras, utilizando-as efetivamente como pontos de referência para a navegação automatizada.

Na imagem, identificam-se duas bolas e dois anéis, com etiquetas a indicar a sua posição, tamanho e 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 é delimitado por uma caixa branca, e detalhes como coordenadas X e Y, largura, altura e uma pontuação de 99% são apresentados em texto branco.

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

Identificar classificações específicas de IA permite que o robô se concentre apenas em objetos específicos, como, por exemplo, navegar apenas em direção a uma Buckyball vermelha, e não a uma azul.

a estes artigos para obter mais informações sobre das Tags de Abril e como ativar a sua deteção no Utilitário de Visão de IA.

centroX e centroY

Estas são as coordenadas do centro do objeto detetado em pixéis.

Uma buckyball azul a ser rastreada por um sistema de visão computacional. O objeto está contornado por um quadrado branco, e dentro do contorno existe um quadrado vermelho mais pequeno que rodeia uma cruz branca centrada. 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 auxiliam na navegação e no posicionamento. O sensor de visão com IA tem uma resolução de 320 x 240 pixéis.

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

É possível observar que um objeto mais próximo do sensor de visão com IA terá uma coordenada CenterY mais pequena do que um objeto mais afastado.

Neste exemplo, como o centro da visão do sensor de visão de IA é (160, 120), o robô irá virar à direita até que a coordenada centerX de um objeto detetado seja superior a 150 pixéis, mas inferior a 170 pixéis.

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

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

    if (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(right);
    } else {
      Drivetrain. stop();
    }
  }
  wait(5, mseg);
}

origemX e origemY

OriginX e OriginY são as coordenadas no canto superior esquerdo do objeto detetado, em pixéis.

Uma buckyball azul a ser rastreada por um sistema de visão. Um contorno branco envolve o objeto, com uma cruz branca centrada no interior do contorno. A etiqueta no canto 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 auxiliam na navegação e no posicionamento. Ao combinar esta coordenada com a largura e a altura do objeto, pode determinar o tamanho da caixa delimitadora do objeto. Isto pode ajudar no seguimento de objetos em movimento ou na navegação entre objetos.

largura e altura

Esta é a largura ou altura do objeto detetado em pixéis.

A imagem mostra uma Buckyball azul com um contorno quadrado branco a segui-la. No canto superior esquerdo encontra-se uma etiqueta indicando que se trata de um objeto azul, com as coordenadas X:176, Y:117 e as dimensões L:80, A:78. As setas vermelhas destacam a largura e a altura do objeto.

As medidas de largura e altura ajudam a identificar diferentes objetos. Por exemplo, uma buckyball terá uma altura superior a um anel.

Dois objetos cúbicos azuis a serem rastreados por um sistema de reconhecimento visual. O cubo superior apresenta um contorno branco com uma etiqueta indicando a sua posição como X:215, Y:70 e dimensões L:73, A:84. O cubo inferior apresenta um contorno branco semelhante, com a etiqueta a exibir as dimensões X:188, Y:184 e L:144, A:113. Cada cubo possui uma cruz branca centrada, indicando provavelmente o ponto focal para o seguimento. As etiquetas destacam as medições e os dados de seguimento de cada objeto.

A largura e a altura indicam também a distância de um objeto em relação ao sensor de visão com IA. Medidas mais pequenas significam geralmente que o objeto está mais afastado, enquanto medidas maiores sugerem que está mais próximo.

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

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

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

    if (AIVision. objects[0]. width < 250.0) {
      Drivetrain. drive(forward);
    } else {
      Drivetrain. stop();
    }
  }
  wait(5, mseg);
}

ângulo

Um GIF rotativo que mostra blocos vermelhos e verdes. Quando os blocos estão posicionados perfeitamente na horizontal, do vermelho ao verde, são mostrados como estando a 0 graus. Se o bloco vermelho estiver verticalmente sobre o bloco verde, forma um ângulo de 90 graus. Se os blocos estiverem dispostos horizontalmente de verde para vermelho, o ângulo é de 180 graus. Se o bloco verde estiver na vertical sobre o bloco vermelho, o ângulo será de 20 graus.

A propriedade
ângulo está apenas disponível para os códigos de cor eAprilTags
Isto representa se o código de cor ou detectado está orientado de forma diferente.

Uma pilha de dois cubos, um verde em cima e um azul em baixo, a ser rastreada por um sistema de visão. Um contorno branco envolve ambos os cubos, com uma cruz branca centrada no cubo verde. A etiqueta na parte inferior da imagem apresenta Verde_Azul A:87°, indicando as cores detetadas e a medição do ângulo. Abaixo deste, as coordenadas estão dispostas como X:117, Y:186, com as dimensões L:137, A:172, representando a posição e o tamanho dos cubos empilhados na moldura.

Pode verificar se o robô está orientado de forma diferente em relação ao código de cor ouou à etiqueta de abril e tomar decisões de navegação de acordo com isso.

Dois cubos, um verde e outro 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. A etiqueta no canto superior esquerdo indica Verde_Azul A:0°, fazendo referência às cores detectadas e a uma medição de ângulo. Abaixo deste, as coordenadas são mostradas como X:150, Y:102, com as dimensões L:179, A:109, representando a posição e o tamanho dos cubos dentro da moldura.

Por exemplo, se um código de cor(Código de Cor não for detetado no ângulo correto, o objeto que representa pode não ser apanhado corretamente pelo robô.

pontuação

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

A imagem mostra quatro objetos a serem rastreados por um sistema de visão: duas bolas e dois anéis. A bola vermelha está identificada com as coordenadas X:122, Y:84, L:67, A: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 as coordenadas X:109, Y:186, W:98, H:92 e uma pontuação de 99%. O anel vermelho está etiquetado com X:259, Y:187, W:89, H:91, com uma pontuação de 99%. Cada objeto é contornado a branco, indicando a precisão do rastreio.

O índice de confiança indica o grau de certeza do sensor de visão por computador em relação à sua deteção. Nesta imagem, o sistema tem 99% de confiança na identificação das classificações de IA destes quatro objetos. Pode utilizar esta pontuação para garantir que o seu robô se concentra apenas em deteções de alta confiança.

existe

A propriedade existe é utilizada para detetar se uma assinatura visual especificada foi detetada no último instantâneo tirado.

Isto permite verificar se algum objeto detetado também foi detetado na captura de ecrã anterior. Esta propriedade irá retornar True quando o objeto existir e False quando o objeto não existir.


contagem de objetos

O método objectCount devolve a quantidade de objetos detetados na última captura de ecrã.

A interface do utilitário de visão com IA mostra dois cubos azuis detetados no lado esquerdo, cada um marcado com as suas coordenadas X e Y e dimensões. O sistema está ligado e o AprilTags está ativado, enquanto a Classificação por IA está desativada. À direita, são apresentadas as definições de cor Azul com intervalos ajustáveis de matiz e saturação, definidos em 22 e 0,34, respetivamente. Existe a opção de adicionar ou definir cor e congelar o vídeo. O firmware está atualizado, a correr a versão 1.0.0.b16, e está disponível um botão de fecho na parte inferior.

Neste exemplo, foram detetados dois objetos com a assinatura de cor"". Ambos serão inseridos na matriz quando o método takeSnapshot for utilizado.

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

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

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

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

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

Last Updated: