‹ Herramientas

Generador de AprilTag y ArUco

Marcadores a tamaño real, hojas para recortar y tableros ChArUco para calibrar, con los mismos diccionarios que usa OpenCV. Vectorial: se imprime nítido a cualquier tamaño.

A 100 mm de lado, cada celda mide 12.5 mm. Para leerlo con margen hacen falta unos 5 píxeles por celda: con una cámara de 1280 px y 70° de campo, eso son unos 2 m de distancia máxima.

Cargando familia…

Para detectarlo

# OpenCV (Python)
import cv2
dic = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_APRILTAG_36h11)
detector = cv2.aruco.ArucoDetector(dic, cv2.aruco.DetectorParameters())
esquinas, ids, _ = detector.detectMarkers(gris)
# pose: cv2.solvePnP con las 4 esquinas y el lado = 0.100 m

# ROS 2 (apriltag_ros, tags.yaml)
family: tag36h11
size: 0.100   # metros, lado del cuadro negro

Cómo elegir, imprimir y usar un marcador

Un marcador fiducial es un cuadrado blanco y negro que una cámara reconoce con certeza: quién es (su ID) y dónde está (su posición y orientación en 3D). Por eso los robots los usan para acoplarse a su base de carga, para saber dónde están en una nave, para calibrar la cámara respecto al brazo, o para medir con exactitud dónde quedó una pieza. Es la forma más barata de darle a un robot una referencia absoluta: tinta sobre papel.

Qué familia usar

Las familias se diferencian en cuántos bits de datos llevan y en qué tan distintos son sus marcadores entre sí (la distancia de Hamming). Más bits y más distancia dan menos falsos positivos y más corrección de errores, a cambio de celdas más chicas y por tanto menos distancia de lectura.

  • AprilTag 36h11 es la respuesta por defecto en robótica: 587 IDs, distancia 11, soportada por apriltag_ros, Isaac ROS, OpenCV y casi todo lo demás.
  • ArUco MIP 36h12 es su equivalente en el mundo ArUco: lo recomiendan los autores de la librería.
  • ArUco 4×4 es el que aparece en muchos tutoriales porque se lee de lejos, pero con solo 16 bits confunde texturas con marcadores. Úsalo solo en escenas que controlas.
  • AprilTag 16h5 y 25h9 son para leer lejos con pocos IDs; 36h10 para cuando necesitas más de 587.

Dos reglas: no mezcles familias en la misma escena, y usa el diccionario más chico que te alcance (si necesitas 20 marcadores, no actives los 1000).

Qué tamaño imprimir

El detector necesita ver cada celda con varios píxeles. Una regla de banco: unos 5 píxeles por celda. Un marcador de LL mm de lado con nn bits de datos tiene celdas de L/(n+2)L/(n+2) mm (los dos extra son el borde negro). Con una cámara de ancho WW píxeles y campo de visión horizontal θ\theta, la distancia máxima aproximada es

dmax≈Ln+2⋅W5⋅12tan⁡(θ/2)d_{max} \approx \frac{L}{n+2}\cdot\frac{W}{5}\cdot\frac{1}{2\tan(\theta/2)}

Con un 36h11 de 100 mm y una cámara de 1280 px a 70°, salen unos 2.3 m. Si lo necesitas a 10 m, el marcador tiene que medir más de 40 cm o la cámara tiene que tener más resolución o menos campo. El generador te hace esta cuenta al cambiar el tamaño.

El tamaño que le das al detector (size en apriltag_ros, markerLength en OpenCV) es el lado del cuadro negro, no el del papel. Mídelo con regla después de imprimir: las impresoras escalan.

Cómo imprimir

  • Deja zona blanca alrededor (al menos una celda). Sin ella el detector no encuentra el borde.
  • Papel mate o pegado a algo rígido y plano: el brillo y las arrugas rompen las esquinas, y las esquinas son lo que da la pose.
  • Imprime el SVG o el PNG a 300 dpi "a tamaño real", sin "ajustar a la página". Luego mide.
  • Para marcadores grandes, plotter o vinilo mate; para tags en el piso, laminado mate.

De las esquinas a la pose

El detector entrega las cuatro esquinas en píxeles. Con la calibración de la cámara (intrínsecos y distorsión) y el tamaño real, resuelve el problema PnP: qué rotación y traslación ponen un cuadrado de ese tamaño justo ahí. Dos cosas que conviene saber desde el primer día:

  • La traslación es buena (milímetros a un metro); la orientación de un marcador visto de frente es ambigua, porque dos inclinaciones opuestas producen casi la misma imagen. Varios marcadores, o un marcador grande visto en ángulo, lo resuelven.
  • Sin calibrar la cámara, la pose sale mal aunque el marcador se detecte perfecto. Para eso está la pestaña del tablero ChArUco: diez fotos desde ángulos distintos y OpenCV te devuelve la matriz de la cámara.

Dónde se rompe

  • Movimiento y rolling shutter: un marcador borroso o deformado por el barrido del sensor da esquinas malas. Baja la exposición antes que subir la ganancia.
  • Contraluz y reflejos: el umbral adaptativo aguanta mucho, pero no un reflejo encima de una celda.
  • Tags doblados o en superficies curvas: la pose asume un plano.
  • Oclusión parcial: AprilTag y ArUco no se leen si falta una esquina. Si eso pasa seguido, usa varios marcadores (un bundle) y la pose del conjunto.