ArUco
Los marcadores ArUco son patrones fiduciales 2D, similares a códigos de barras, que utilizan una matriz binaria interna para codificar un ID único y un borde negro para una detección rápida por algoritmos de visión artificial. Estos marcadores son fáciles de detectar, precisos y robustos, y se pueden imprimir a bajo costo para aplicaciones como la robótica, la realidad aumentada y el seguimiento de objetos.
Características principales
Sección titulada «Características principales»- Detección rápida: El borde negro grueso del marcador ayuda a los algoritmos a localizarlo rápidamente en una imagen.
- Identificación única: Una matriz de bits internos codifica un identificador único para cada marcador.
- Estimación de pose: Los marcadores no solo permiten la identificación, sino también la estimación de su posición (ubicación y orientación) en el espacio tridimensional.
- Robustez: Están diseñados para ser resistentes al ruido, la rotación y la oclusión parcial, y el diseño del diccionario minimiza la posibilidad de confusión entre marcadores.
- Versatilidad: Se pueden usar en una amplia gama de aplicaciones, desde el seguimiento de objetos en aplicaciones de realidad aumentada hasta la navegación de robots en entornos complejos.
- Código abierto: La biblioteca ArUco, que incluye la implementación de estos marcadores, es de código abierto y está disponible en OpenCV, lo que facilita su uso y modificación.
Uso de marcadores en Robotica
Sección titulada «Uso de marcadores en Robotica»En el siguiente video podemos ver un ejemplo del uso de marcadores en robótica para la navegación y localización de un robot móvil.
Paso a Paso
Sección titulada «Paso a Paso»Paso 1 — Verificar el módulo ArUco
Los programas usan cv2.aruco, que viene en opencv-contrib-python (instalado en la práctica 1). Para comprobarlo:
python -c "import cv2; print(cv2.__version__, hasattr(cv2, 'aruco'))"Debe imprimir la versión y True.
Paso 2 — Imprimir los marcadores
- Descargue la cuadrícula de 48 marcadores del diccionario
DICT_4X4_50. - Imprímala en tamaño carta horizontal al 100 %. No use la opción “ajustar a la página”: cambia el tamaño de los marcadores.
- Mida con una regla el lado de un marcador, de borde negro a borde negro. Debería ser de una pulgada (2.54 cm); anote el valor que midió.
- Recorte algunos marcadores y anote su ID, que está impreso debajo de cada uno.
Paso 3 — Detectar marcadores con C06
-
Descargue C06-aruco-reading-from-cam.py (detección de ArUco), llene
IP,PUERTOeIPHONEal inicio, igual que en C01, y ajuste la rotación si es necesario. -
Ejecútelo y apunte la cámara del celular a estos marcadores en la pantalla del PC, y luego a sus marcadores impresos:



ID 8 ID 9 ID 47 -
Cada marcador detectado aparece con su contorno y su ID dibujados sobre el video.
-
Pruebe y anote hasta dónde funciona la detección: a qué distancia deja de detectar, con qué inclinación, si tapa una esquina con el dedo y con poca luz.
Paso 4 — Configurar C07 para su marcador
C07-aruco-distance-from-center.py calcula cuánto le falta al centro de la cámara para llegar a un marcador ArUco. Para pasar de píxeles a metros necesita el tamaño real del marcador, es decir, la longitud de un lado.
Descárguelo y llene el bloque del inicio:
IP = '192.168.137.49'PUERTO = 8080IPHONE = FalseARUCO_ID = 47MARKER_SIZE = 0.0254IP,PUERTOeIPHONE: los datos de la cámara, igual que en C01.ARUCO_ID: el ID del marcador que va a medir. El programa solo calcula distancias para ese marcador.MARKER_SIZE: el lado real del marcador en metros, con el valor que midió en el paso 2. Por ejemplo, 2.54 cm son0.0254.
Paso 5 — Medir y comprobar con la regla
- Ponga el robot sobre una hoja con el marcador
ARUCO_IDy ejecute C07. Sobre el video aparecenDist X,Dist Y,AngleyEuclidean Dist, en píxeles y en metros. - Mueva el marcador unos centímetros a la derecha del centro de la imagen, mida con la regla cuánto lo movió y compárelo con
Dist X. - Repita moviéndolo hacia adelante (
Dist Y). Fíjese en el signo: en la imagen, y crece hacia abajo. - Gire el marcador unos 30° y observe
Angle. - Anote en una tabla la distancia medida con la regla, la que da el programa y la diferencia.
Paso 6 — Medir distancias entre marcadores en una foto con C08
Ahora no usamos el video sino una foto del celular, que tiene mucha más resolución.
-
Recorte 4 marcadores impresos y anote sus IDs.
-
En el piso, ubíquelos en las esquinas de un cuadrado de 40 o 50 cm de lado, medido con el metro de centro a centro de los marcadores. Póngalos todos con la misma orientación.
-
Mida con el metro los 4 lados y las 2 diagonales, y anótelos.
-
Tome una foto desde arriba, a aproximadamente 1 m de altura, con el celular paralelo al piso, de modo que se vean los 4 marcadores. Pásela al computador.
-
Descargue C08-aruco-distances-from-image.py y llene el bloque del inicio:
IMAGEN = 'foto-cuadrado.jpg'MARKER_SIZE = 0.0254IMAGEN: la ruta de su foto. Si la foto está en la misma carpeta del programa, basta con el nombre del archivo.MARKER_SIZE: el lado real de los marcadores en metros, el que midió en el paso 2.
-
Ejecútelo. El programa imprime las distancias entre todas las parejas de marcadores en metros, y guarda una copia de la foto con las líneas y las distancias dibujadas (
foto-cuadrado-distancias.png). Si avisa que la foto está inclinada, tómela de nuevo más paralela al piso. -
Compare en una tabla las 6 distancias medidas con el metro y las que da el programa. Las diagonales deberían medir el lado por : 56.6 cm para un cuadrado de 40 cm y 70.7 cm para uno de 50 cm.
Opcional — Generar y leer marcadores desde archivos
- I06-aruco.py genera imágenes de marcadores y las guarda en la carpeta desde donde se ejecuta.
- I07-aruco-reading.py detecta marcadores en una imagen guardada (
marker_DICT_4X4_50_42.png), sin cámara. Ejecútelo en la misma carpeta donde esté esa imagen.