Pular para o conteúdo principal

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)

info

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.