Localização de Robô com MegaTag2
Introduzido em 2024, o Megatag2 é um localizador preciso e sem ambiguidade baseado em AprilTag para robôs móveis. Foi construído com os seguintes objetivos:
- Eliminar o problema de ambiguidade de pose e aumentar a robustez contra ruído de imagem/canto.
- Fornecer excelentes estimativas de pose dada uma única tag, independentemente da perspectiva.
- Aumentar a robustez contra imprecisões na colocação física do AprilTag
- Reduzir a quantidade de filtragem necessária para bons resultados de estimativa de pose
O Megatag2 fornece excelentes resultados a qualquer distância dada uma única tag. Isso significa que é perfeitamente viável focar apenas em tags que são relevantes e dentro da tolerância, e filtrar todas as outras tags. Se uma tag não estiver na localização correta, filtre-a com o recurso de filtro dinâmico introduzido junto com o MegaTag2.
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
Diferentemente do MT1, o MT2 assume que você conhece a orientação (yaw) do seu robô. Opcionalmente, o Megatag2 aceita uma orientação completa do robô e velocidades angulares.
Requisitos:
- A pose do espaço do robô da sua Limelight foi configurada na interface web ou via API
- Um mapa de campo (.fmap) foi carregado
- LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) é chamado a cada quadro no código do lado do robô
- SetRobotOrientation assume uma origem centrada (veja o gerador de mapas) ou no canto azul. CCW-positivo, 0 graus -> voltado para a parede da aliança vermelha na FRC.
Chaves NetworkTables:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
Chaves JSON:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
- (Por alvo fiducial) t6r_fs_orb - pose do robô no espaço de campo usando megatag2 baseado apenas nesta tag (sem multitag)
Observe a diferença entre MegaTag2 (robô vermelho) e Megatag (robô azul) neste caso de tag única altamente ambíguo
- Cilindro Dourado / Robô Vermelho: Botpose Megatag2 não filtrado
- Cilindros Amarelos: Botposes Megatag2 de tag única não filtrados
- Cilindro Branco/Robô Azul: Botpose MegaTag1
- Cilindro Verde: Pose do robô individual por tag (MT1)
- Cilindro Azul: Média das poses do robô individuais por tag (MT1)
Em 2024, a maior parte do Ecossistema WPILib fez a transição para um sistema de coordenadas de origem única. Em 2023, a origem do seu sistema de coordenadas mudava com base na cor da sua aliança.
Para 2024 e além, a origem do seu sistema de coordenadas deve sempre ser a origem "azul". As equipes FRC devem sempre usar botpose_orb_wpiblue para funcionalidades relacionadas à pose
Usando o Estimador de Pose do WPILib
LimelightHelpers.SetRobotOrientation("limelight", m_poseEstimator.getEstimatedPosition().getRotation().getDegrees(), 0, 0, 0, 0, 0);
LimelightHelpers.PoseEstimate mt2 = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2("limelight");
if(Math.abs(m_gyro.getRate()) > 720) // se nossa velocidade angular for maior que 720 graus por segundo, ignore as atualizações de visão
{
doRejectUpdate = true;
}
if(mt2.tagCount == 0)
{
doRejectUpdate = true;
}
if(!doRejectUpdate)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.7,.7,9999999));
m_poseEstimator.addVisionMeasurement(
mt2.pose,
mt2.timestampSeconds);
}
Configurando a Pose do Espaço do Robô da sua Limelight
LL Forward, LL Right e LL Up representam distâncias ao longo dos vetores para frente, direita e para cima do Robô se você incorporasse o robô. (em metros). LL Roll, Pitch e Yaw representam a rotação da sua Limelight em graus. Você pode modificar esses valores e observar o modelo 3D da Limelight mudar no visualizador 3D. A Limelight usa essa configuração internamente para ir da pose do alvo no espaço da câmera -> pose do robô no espaço do campo.