# Rastreando AprilTrags

____

As AprilTags são rastreadas usando os valores "tx", "ty" e "ta" no NetworkTables, da mesma forma que os alvos retro-refletivos padrão! Nenhuma alteração de código é necessária para atualizar um robô de rastreamento retro-refletivo para AprilTags. "botpose" e "campose" também podem ser usados para rastreamento 3D no espaço de campo e no espaço do alvo.

Para um uso mais avançado com várias tags, pode-se usar o despejo de resultados em formato JSON.

Não se sinta pressionado a usar os recursos mais avançados nas páginas "Avançado" a menos que saiba que precisa deles. Muitas das melhores equipes na FRC usam as técnicas mais simples disponíveis para maximizar confiabilidade e velocidade. Se você frequenta o Discord, CD e regionais com equipes de elite, pode ter a impressão de que precisa do software mais avançado possível para vencer eventos, mas isso simplesmente não é verdade.

Nossa mensagem para muitas das equipes que ajudamos é "Está tudo bem fazer algo simples."

### **Início rápido de AprilTags para FRC**

- Guia de Entrada - Altere o *Pipeline Type* para "Fiducial Markers".

- Guia Padrão - Certifique-se de que a *family* esteja configurada como *AprilTag Classic 16h5*.
- Guia de Entrada - Defina o *Black Level* como zero.

- Guia de Entrada - Defina o *Gain* como 15.

- Guia de Entrada - Reduza a exposição para diminuir o desfoque de movimento. Pare de reduzir quando a confiabilidade do rastreamento diminuir.

- Guia Padrão - Se desejar aumentar a taxa de quadros, aumente a *Detector Downscale*.
  
- Guia de Entrada - Para aumentar o alcance e/ou a precisão, aumente a resolução de captura.

- Se estiver vendo detecções de tag espúrias, adicione os IDs que deseja rastrear ao controle *filter* ou aumente o valor do *Quality Threshold*.

- Clique no ícone de engrenagem e certifique-se de que o número da sua equipe e um IP estático estejam configurados.

- Clique em *Change Team Number* e *Change IP Settings* se você alterou essas configurações correspondentes. Reinicie seu robô.

- Você terminou! Use "tx" e "ty" na NetworkTables. Copie o exemplo de código na página "Iniciando".

### **Dicas**

Para um rastreamento ideal, considere o seguinte:

- Suas tags devem estar o mais planas possível.
- Seu Limelight deve ser montado acima ou abaixo da altura da tag e inclinado para cima/baixo de forma que o alvo esteja centralizado. Seu alvo deve parecer o mais trapezoidal possível da perspectiva da sua câmera. Não é desejável que sua câmera esteja completamente "de frente" para uma tag se você quiser evitar inversões de tag.


Existe uma interação entre as seguintes variáveis para o rastreamento de AprilTag:

- Aumentar a resolução de captura sempre aumentará a precisão 3D e a estabilidade 3D. Isso também reduzirá a taxa de inversões de ambiguidade na maioria das perspectivas. Geralmente, aumentará o alcance. No entanto, isso reduzirá a taxa de quadros da linha de processamento.

- Aumentar a redução do detector sempre aumentará a taxa de quadros da linha de processamento. Isso diminuirá o alcance efetivo, mas, em alguns casos, isso pode ser negligenciável. Não afetará a precisão 3D, a estabilidade 3D ou a precisão na decodificação.

- Reduzir a exposição sempre melhorará a resistência ao desfoque de movimento. Isso é fácil de observar. Isso pode reduzir o alcance.

- Reduzir o brilho e contraste da imagem geralmente melhorará a taxa de quadros da linha de processamento e reduzirá o alcance.

- Aumentar o ganho do sensor permite aumentar o brilho sem aumentar a exposição. Isso pode reduzir a estabilidade 3D e a estabilidade do rastreamento.

### **Guia de Entrada**

A guia de entrada hospeda controles para alterar a imagem bruta da câmera antes que ela passe pelo pipeline de processamento. Consulte a página "Construindo um pipeline retrorefletor/cor" para obter mais detalhes.

Para rastrear AprilTags:

- Altere o "Tipo de Pipeline" para "Marcadores Fiduciais".
- Defina o "Nível de Preto" como zero.


Neste ponto, é uma questão de equilibrar o ganho do sensor e o tempo de exposição. Você deseja ser capaz de ver as tags com a menor exposição possível para minimizar o desfoque de movimento. Isso geralmente requer uma configuração de ganho de sensor alta. Para um rastreamento simples em 2D, geralmente é aconselhável maximizar o ganho do sensor e, em seguida, aumentar a exposição a partir de zero até que os alvos sejam rastreados corretamente. Certifique-se de que a família correta esteja selecionada na guia *Standard* se o rastreamento não estiver funcionando.

### **Guia Padrão**

#### ***Family***

Selecione o tipo de família *fiducial*/AprilTags. Para FRC você deve escolher o tipo 36h11.

#### ***Marker Size***

Defina o tamanho esperado das *tags*, em mm, que seu robô vai encontrar. Para FRC isso deve ser definido  como 165.1 (152.4 para *tags* de 2023)

#### ***Detector Downscale***

Aumentar esse número resulta em um grande ganho de performance. Algumas vezes isso vai acarretar em um baixo alcance, mas é mínimo.

#### ***ID Filters***

Filtros de ID permitem que você especifique exatamente quais tags são relevantes. Para a maioria das equipes da FRC, cada pipeline deve ser configurado para rastrear exatamente um ID de tag. Isso é feito por meio de uma lista separada por vírgulas de números (por exemplo, "0,1"). Essa funcionalidade é importante para eliminar a grande maioria dos falsos positivos.

<div align="center">

<iframe title="vimeo-player" src="https://player.vimeo.com/video/872728604?h=ac074f2f00" width="640" height="360" frameborder="0"    allowfullscreen></iframe>

</div>

#### ***Cropping***

O recorte remove conteúdo da imagem para melhorias significativas de desempenho. Utilize a chave "crop" do NetworkTables para recortar dinamicamente durante as partidas.

<div align="center">

<iframe title="vimeo-player" src="https://player.vimeo.com/video/872728905?h=87c4609a8b" width="640" height="360" frameborder="0"    allowfullscreen></iframe>

</div>

#### ***Multi-Target Sorting and Grouping***

Isso permite a funcionalidade exata de agrupamento vista em pipelines retro-refletivos padrão. Na maioria dos jogos, a única característica a ser modificada é o filtro "Área", que permitirá que você exclua tags pequenas.

<div align="center">

<iframe title="vimeo-player" src="https://player.vimeo.com/video/872752999?h=c9b5c5dd9f" width="640" height="360" frameborder="0"    allowfullscreen></iframe>

</div>