Visão#
Introdução#
O drone VEX AIR possui dois sensores de visão que detetam e rastreiam os IDs AprilTag. Isto permite que o drone analise o ambiente à sua volta, siga objetos e reaja com base nos dados visuais detetados.
Segue-se a lista de todos os blocos disponíveis:
Ações — Controlar a transmissão de vídeo e a captura de dados de objetos.
obter dados do objeto — Captura dados para os IDs AprilTag.
Configurações — Ajuste quais os objetos detetados que serão acedidos.
set Vision object item — Seleciona um objeto específico da lista de objetos detetados.
Valores — Recupera a presença, classificação e propriedades do objeto.
Objeto de visão existe — Reporta se um objeto foi detetado.
O objeto de visão é ID AprilTag — Verifica se um ID AprilTag detetado corresponde a um ID específico.
Contagem de objetos de visão — Reporta o número de objetos detetados.
Propriedade do objeto de vista — Recupera detalhes como:
centerX & centerY — Coordenadas da posição central na vista do sensor.
rumo — Ângulo do objeto em relação ao sensor de visão frontal ou os graus necessários para o drone estar de frente para o objeto.
rotação — Orientação do objeto.
originX & originY — Coordenadas da posição do canto superior esquerdo na vista do sensor.
id — Número de identificação de um ID AprilTag.
Ações#
obter dados do objeto#
O bloco de pilha obter dados do objeto filtra os dados do quadro do sensor de visão. Os sensores de visão podem detetar IDs do AprilTag.
O conjunto de dados armazena os objetos ordenados do maior para o mais pequeno por largura, começando no índice 0. As propriedades de cada objeto podem ser acedidas utilizando o bloco Propriedade do objeto Vision. Um conjunto de dados vazio é reportado se não for detetado nenhum objeto correspondente.
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
Parâmetro |
Descrição |
|---|---|
assinatura |
Filtra o conjunto de dados para incluir apenas os dados da assinatura especificada. A subscrição disponível é todas as AprilTags. |
câmera |
O sensor de visão recolhe dados, seja para a frente ou para baixo. |
Exemplo
quando iniciar
[Climb upward when an AprilTag ID is detected.]
decolar para [300] [mm v] ▶
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
se <objeto Vision existe?> então
subir/descer [subir v] por [200] [mm v] ▶
Configurações#
definir item de objeto de visão#
O bloco de pilha set Vision object item define qual o item do conjunto de dados que deve ser utilizado.
definir item de objeto Vision para [1]
Parâmetros |
Descrição |
|---|---|
artigo |
O número do item no conjunto de dados a utilizar. |
Exemplo
quando iniciar
[Display the smallest-appearing AprilTag ID.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
se <objeto Vision existe?> então
definir item de objeto Vision para (contagem de objetos Vision)
imprimir (Vision objeto [id v]) no console ▶
Valores#
O objeto de visão existe.#
O bloco booleano Objeto de visão existe informa se o sensor de visão especificado deteta algum objeto no momento.
Verdadeiro — O sensor de visão especificado detetou um objeto.
Falso — O sensor de visão especificado não detetou qualquer objeto.
<objeto Vision existe?>
Parâmetro |
Descrição |
|---|---|
Este bloco não possui parâmetros. |
Exemplo
quando iniciar
[Climb upward when an AprilTag ID is detected.]
decolar para [300] [mm v] ▶
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
se <objeto Vision existe?> então
subir/descer [subir v] por [200] [mm v] ▶
O objeto de visão é o ID AprilTag#
O bloco booleano Object Vision é ID AprilTag informa se o ID AprilTag é um número de identificação específico.
Verdadeiro — O ID do AprilTag é o número.
Falso — O ID do AprilTag não é o número.
<Vision object is AprilTag ID [1]>
Parâmetros |
Descrição |
|---|---|
Número de identificação AprilTag |
O número a comparar com o número de identificação AprilTag detectado, que varia de 0 a 37. |
Exemplo
quando iniciar
[Display when the target AprilTag ID is detected.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
se <objeto Vision existe?> então
se <Vision object is AprilTag ID [21]> então
imprimir [Target found!] no console ▶
fim
contagem de objetos visuais#
O bloco de relatório Contagem de objetos de visão reporta a quantidade de objetos detetados no conjunto de dados como um número inteiro.
(contagem de objetos Vision)
Parâmetros |
Descrição |
|---|---|
Este bloco não possui parâmetros. |
Exemplo
quando iniciar
[Display how many AprilTag IDs are detected.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
imprimir (contagem de objetos Vision) no console ▶
aguardar [0.2] segundos
Propriedade do objeto de visão#
Existem várias propriedades incluídas em cada objeto (apresentadas abaixo) armazenadas após a utilização do bloco obter dados do objeto.
(Vision objeto [largura v])
Todos os valores das propriedades, exceto id, descrevem a posição, o tamanho, a orientação ou a direção do objeto detetado no momento em que o bloco obter dados do objeto foi utilizado. Estes valores são medidos em pixéis ou graus. Cada sensor de visão tem uma resolução diferente:
Vista frontal: 640 x 480 pixéis
Vista de baixo: 640 x 400 pixéis
Parâmetro |
Descrição |
|---|---|
propriedade |
Qual a propriedade do objeto detetado a utilizar: |
largura#
A propriedade largura indica a largura do objeto detetado em pixéis, como por exemplo um número inteiro de 1 a 640.
(Vision objeto [largura v])
Exemplo
quando iniciar
[Show if the AprilTag ID appears large or small.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
se <objeto Vision existe?> então
se <(Vision objeto [largura v]) [math_greater_than v] [100]> então
imprimir [Large] no console ▶
senão
imprimir [Small] no console ▶
fim
fim
aguardar [0.2] segundos
altura#
A propriedade altura indica a altura do objeto detetado em pixéis, como por exemplo um número inteiro de 1 a 480.
(Vision objeto [altura v])
Exemplo
quando iniciar
[Show if the AprilTag ID appears large or small.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
se <objeto Vision existe?> então
se <(Vision objeto [altura v]) [math_greater_than v] [100]> então
imprimir [Large] no console ▶
senão
imprimir [Small] no console ▶
fim
fim
aguardar [0.2] segundos
centroX#
A propriedade centerX indica a coordenada x do centro do objeto detetado em pixéis, como um número inteiro de 1 a 640.
(Vision objeto [centroX v])
Exemplo
quando iniciar
[Show if an AprilTag ID is to the left or the right of the camera.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
se <objeto Vision existe?> então
se <(Vision objeto [centroX v]) [math_less_than v] [320]> então
imprimir [To the left] no console ▶
senão
imprimir [To the right] no console ▶
fim
fim
aguardar [0.2] segundos
centroY#
A propriedade centerY reporta a coordenada y do centro do objeto detetado em pixéis, como um número inteiro de 1 a 480.
(Vision objeto [centroY v])
Exemplo
quando iniciar
[Take off and attempt to align the drone with an AprilTag ID on the wall.]
[Adjust the takeoff height to observe different results.]
decolar para [800] [mm v] ▶
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
se <objeto Vision existe?> então
se <(Vision objeto [centroY v]) [math_less_than v] [240]> então
imprimir [Below the target!] no console ▶
senão
imprimir [Above the target!] no console ▶
fim
senão
imprimir [No target found!] no console ▶
rolamento#
A propriedade rumo indica o ângulo que representa a posição de um objeto em relação ao drone. O comportamento depende do sensor de visão utilizado.
Um valor de 0° indica que o centro do objeto e o sensor estão alinhados. Valores positivos significam que o objeto está à direita, enquanto valores negativos significam que o objeto está à esquerda.
Sensor |
Devoluções |
|---|---|
Para baixo |
O ângulo de rotação da parte frontal do drone para se alinhar com o centro do objeto varia entre -180º a 180º. |
Encaminhar |
O deslocamento do objeto para a esquerda ou para a direita do centro do sensor de visão varia entre -180º a 180º. |
(Vision objeto [orientação v])
Exemplos
quando iniciar
[Align the front of the drone to an AprilTag ID.]
definir velocidade de giro para (15)%
decolar para [500] [mm v] ▶
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [para baixo v]
se <objeto Vision existe?> então
se <[-20] [math_less_than v] (Vision objeto [orientação v]) [math_less_than v] [20]> então
[Hover once sensor is centered on the AprilTag ID.]
pairar
reproduzir som [sucesso v] ▶
senão se <(Vision objeto [orientação v]) [math_less_than v] [-21]> então
virar [esquerda v]
senão
virar [direita v]
rotação#
A propriedade rotação indica a orientação do ID AprilTag detetado como um número inteiro em graus, de 1 a 359.
(Vision objeto [rotação v])
Exemplo
quando iniciar
[Turn left or right based on the rotation of an AprilTag ID.]
decolar para [1000] [mm v] ▶
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
se <objeto Vision existe?> então
se <[240] [math_less_than v] (Vision objeto [rotação v]) [math_less_than v] [300]> então
virar [esquerda v] por [90] graus ▶
senão se <[60] [math_less_than v] (Vision objeto [rotação v]) [math_less_than v] [120]> então
virar [direita v] por [90] graus ▶
senão
pairar
origemX#
A propriedade originX reporta a coordenada x do canto superior esquerdo da caixa delimitadora do objeto detetado, em pixéis, como um número inteiro de 1 a 640.
(Vision objeto [origemX v])
Exemplo
quando iniciar
[Draw lines to the AprilTag ID origin from all corners.]
para sempre
limpar tela
get [all AprilTags v] data from vision [forward v] camera
se <objeto Vision existe?> então
desenhar linha [0] [0] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
desenhar linha [0] [480] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
desenhar linha [640] [0] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
desenhar linha [640] [480] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
fim
aguardar [0.2] segundos
origemY#
A propriedade originY reporta a coordenada y do canto superior esquerdo da caixa delimitadora do objeto detetado, em pixéis, como um número inteiro de 1 a 480.
(Vision objeto [origemY v])
Exemplo
quando iniciar
[Draw lines to the AprilTag ID origin from all corners.]
para sempre
limpar tela
get [all AprilTags v] data from vision [forward v] camera
se <objeto Vision existe?> então
desenhar linha [0] [0] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
desenhar linha [0] [480] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
desenhar linha [640] [0] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
desenhar linha [640] [480] (Vision objeto [origemX v]) (Vision objeto [origemY v]) na tela
fim
aguardar [0.2] segundos
eu ia#
A propriedade id reporta o número de identificação do ID AprilTag detetado como um número inteiro.
(Vision objeto [id v])
Exemplo
quando iniciar
[Display the detected AprilTag ID.]
para sempre
obter dados de [todos os AprilTags v] da câmera Vision [frente v]
limpar console
se <objeto Vision existe?> então
imprimir (Vision objeto [id v]) no console ▶
fim
aguardar [0.2] segundos