Saltar al contenido principal

Localización de Robots con MegaTag2

Introducido en 2024, Megatag2 es un localizador preciso y sin ambigüedades basado en AprilTag para robots móviles. Fue construido con los siguientes objetivos:

  • Eliminar el problema de ambigüedad de pose y aumentar la robustez contra el ruido de imagen/esquinas.
  • Proporcionar excelentes estimaciones de pose dado un solo tag, sin importar la perspectiva.
  • Aumentar la robustez contra imprecisiones en la colocación física de AprilTags
  • Reducir la cantidad de filtrado necesario para obtener buenos resultados de estimación de pose

Megatag2 proporciona excelentes resultados a cualquier distancia dado un solo tag. Esto significa que es perfectamente viable enfocarse solo en tags que sean relevantes y estén dentro de la tolerancia, y filtrar todos los demás tags. Si un tag no está en la ubicación correcta, filtrarlo con la función de filtro dinámico introducida junto con MegaTag2.

int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);

A diferencia de MT1, MT2 asume que conoces la orientación (yaw) de tu robot. Opcionalmente, Megatag2 acepta una orientación completa del robot y velocidades angulares.

Requisitos:

  • La pose en el espacio del robot de tu Limelight ha sido configurada en la interfaz web o a través de la API
  • Se ha cargado un mapa de campo (.fmap)
  • LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) se llama en cada frame en el código del lado del robot
  • SetRobotOrientation asume un origen centrado (ver el generador de mapas) o en la esquina azul. Positivo en sentido antihorario, 0 grados -> mirando hacia la pared de la alianza roja en FRC.

Claves de NetworkTables:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb

Claves JSON:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb
  • (Por objetivo fiducial) t6r_fs_orb - pose del robot en el espacio de campo usando megatag2 basado solo en este tag (sin multitag)

Observa la diferencia entre MegaTag2 (robot rojo) y Megatag (robot azul) en este caso de un solo tag altamente ambiguo


  • Cilindro Dorado / Robot Rojo: Botpose Megatag2 sin filtrar
  • Cilindros Amarillos: Botposes Megatag2 de un solo tag sin filtrar

  • Cilindro Blanco/Robot Azul: Botpose MegaTag1
  • Cilindro Verde: Pose del bot individual por tag (MT1)
  • Cilindro Azul: Promedio de poses de bot individuales por tag (MT1)

info

En 2024, la mayoría del Ecosistema WPILib hizo la transición a un sistema de coordenadas de origen único. En 2023, el origen de tu sistema de coordenadas cambiaba según el color de tu alianza.

Para 2024 y más allá, el origen de tu sistema de coordenadas siempre debe ser el origen "azul". Los equipos de FRC siempre deben usar botpose_orb_wpiblue para funcionalidades relacionadas con la pose

Usando el Estimador de Pose de 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) // si nuestra velocidad angular es mayor a 720 grados por segundo, ignorar actualizaciones de visión
{
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 la Pose en el Espacio del Robot de tu Limelight

LL Forward, LL Right y LL Up representan distancias a lo largo de los vectores adelante, derecha y arriba del Robot si te personificaras en el robot. (en metros). LL Roll, Pitch y Yaw representan la rotación de tu Limelight en grados. Puedes modificar estos valores y ver cómo cambia el modelo 3D del Limelight en el visor 3D. Limelight usa esta configuración internamente para pasar de la pose del objetivo en el espacio de la cámara -> pose del robot en el espacio de campo.