Volver a Guides

Sistemas de visión de robots: cámaras, sensores de profundidad y procesamiento

Guía para la visión de robots: cámaras RGB, sensores de profundidad (RealSense, ZED), tuberías de procesamiento e integración con sistemas de manipulación.

En general

La visión es el canal sensorial más rico en información para la manipulación de robots. Un sistema de visión correctamente configurado proporciona la comprensión geométrica y semántica que las políticas necesitan para capturar, colocar, verter y ensamblar objetos. Pero elegir la cámara equivocada, la posición de montaje o el procesamiento de tuberías puede paralizar un sistema capaz de otra manera.

Esta guía cubre todas las capas de la pila de visión de robots: selección de sensores, consideraciones ópticas para la robótica, procedimientos de calibración, estrategias de montaje, tuberías de procesamiento e integración ROS2. Nuestras recomendaciones se basan en docenas de implementaciones de sistemas de visión en RCSV en investigaciones de manipulación, teleoperatoria y aplicaciones de inspección de producción.

Comparación de tipos de sensores

Sensor Type Example Products Resolution Price Best For
2D RGB (global shutter) Basler ace2, FLIR Blackfly S, Allied Vision Alvium Up to 5472x3648 $400-$2,000 High-quality data collection, policy training, inspection
2D RGB (rolling shutter / USB) Logitech BRIO, ELP USB cameras, Arducam Up to 4K $30-$200 Budget prototyping, slow-motion tasks
Stereo Depth (active IR) Intel RealSense D435i, D455 1280x720 depth, 1920x1080 RGB $200-$350 Supplemental depth, point cloud generation
Stereo Depth (neural) Stereolabs ZED 2i, ZED Mini 2208x1242 (2K), depth to 20m $450-$550 Mobile robots, outdoor depth, spatial mapping
Structured Light Photoneo PhoXi, Ensenso N-series 2064x1544 (3.2 MP depth) $5,000-$15,000 Bin picking, high-precision 3D scanning
Time-of-Flight (ToF) Azure Kinect DK, Lucid Helios2 1024x1024 (Kinect), 640x480 $400-$3,000 Body tracking, scene understanding
Event Camera Prophesee EVK4, iniVation DVXplorer 1280x720 (event stream) $3,000-$8,000 High-speed tracking, dynamic scenes, low latency
Thermal (LWIR) FLIR Lepton 3.5, Seek Thermal 160x120 to 640x512 $200-$5,000 Thermal inspection, human detection, food handling

Considerancias ópticas para la robótica

El cerrojo global vs. el cerrojo rodante

Esta es la especificación de cámara más importante para la robótica. Un obturador rodante expone la imagen fila por fila (lectura típica: 10-30 ms de arriba a abajo). Cuando la cámara o escena se mueve durante la exposición, la imagen muestra sesgo, tambalea o distorsión parcial de marco. Para un brazo robótico que se mueve a 200 mm/s con un tiempo de lectura de 10 ms, la parte superior y inferior del marco se pueden compensar en 2 mm, lo suficiente como para causar fallos de agarre.

Un obturador global expone todos los píxeles simultáneamente. Las cámaras de visión automática industriales (Basler ace2, FLIR Blackfly S) utilizan sensores de obturador globales (familia Sony Pregius / Pregius S). Estos son esenciales para las cámaras montadas en la muñeca, la manipulación de alta velocidad y cualquier configuración en la que el brazo se mueve durante la captura de imágenes.

Recomendación: Utilice siempre cámaras de obturador global para posiciones montadas en la muñeca. Para cámaras de obturador fijas que capturan tareas lentas (< 50 mm/s), el obturador de rodadura es aceptable si su presupuesto es limitado.

Presupuesto de la latencia

Para la teleoperación, la latencia total de la tubería de visión (captura + transferencia + procesamiento + visualización) debe ser inferior a ** 100 ms** para una operación estable y a ** 50 ms** para una sensación de respuesta. Para el servo visual de bucle cerrado, el objetivo ** < 16 ms** (un fotograma a 60 fps).

  • Exposición de los sensores: 1-33 ms (dependiendo de la iluminación y la frecuencia de los cuadros)
  • Transferencia: < 1 ms (GigE con disparador de hardware) a 50 ms (USB con amortiguador)
  • Procesamiento (detección/segmentación): 5 a 50 ms (dependiente de la CPU)
  • Red (si se transmite a un operador remoto): 5-200 ms (dependiendo de la infraestructura)

Los controladores de cámara ROS2

Cada cámara que considere debe tener un controlador ROS2 mantenido.

  • T2 -- Driver oficial de Intel para las series D400 y L500. Publica temas de profundidad, IR, RGB, IMU.
  • T3 -- cámaras ZED de estereolab. Incluye mapas espaciales y nodos de detección de objetos.
  • T4 -- cámaras Basler a través de Pylon SDK. Soporta el hardware de activación.
  • T5 -- cámaras FLIR/Point Grey. disparador de hardware y soporte GPIO.
  • T6 -- Generic V4L2 controlador para cámaras USB. No soporte de disparador de hardware.

Calibración de la cámara con OpenCV

La calibración adecuada no es negociable. Las cámaras no calibradas introducen distorsión radial que degrada la reconstrucción 3D y la generalización de políticas.

import cv2
import numpy as np
import glob

# Checkerboard dimensions (inner corners)
BOARD_SIZE = (9, 6)
SQUARE_SIZE = 25.0  # mm

# Prepare 3D object points
objp = np.zeros((BOARD_SIZE[0] * BOARD_SIZE[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:BOARD_SIZE[0], 0:BOARD_SIZE[1]].T.reshape(-1, 2) * SQUARE_SIZE

obj_points, img_points = [], []

for fname in sorted(glob.glob("calib_images/*.png")):
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, BOARD_SIZE, None)
    if ret:
        corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1),
            (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))
        obj_points.append(objp)
        img_points.append(corners)

ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(
    obj_points, img_points, gray.shape[::-1], None, None)

print(f"Reprojection error: {ret:.4f} px")  # Target: < 0.5 px
print(f"Camera matrix K:\n{K}")
print(f"Distortion coeffs: {dist}")

# Save for ROS2 camera_info
np.savez("calibration.npz", K=K, dist=dist, rvecs=rvecs, tvecs=tvecs)

** Mejores prácticas:** Recoger 30-50 imágenes con el tablero de ajedrez en ángulos variados (inclinados hasta 45 grados), distancias (rellenando 20-80% del marco) y posiciones a través de la imagen completa. El error de reproyección debe ser inferior a 0,5 píxeles para el trabajo de grado de investigación. Recalibrar después de cualquier cambio de lente, ajuste de enfoque o impacto físico.

Compartidas entre las cámaras de muñeca y las de cámara externa

Factor Wrist-Mounted External (Fixed)
Field of View Narrow, focused on grasp point Wide, full workspace coverage
Occlusion Minimal -- always sees what end-effector sees Arm and gripper can occlude objects
Motion blur High -- requires global shutter + short exposure Low -- camera is stationary
Calibración Eye-in-hand calibration required Eye-to-hand calibration (simpler)
Cable management Challenging -- cable must route along arm Simple -- fixed cable run
Weight at end-effector Adds 50-300g (reduces payload budget) Zero impact on payload
Policy training impact Strong signal for fine manipulation Good for spatial reasoning and navigation

** Recomendación RCSV:** Utilice ambos. Una cámara de superficie fija + cámara lateral fija para el contexto del espacio de trabajo, más una cámara de muñeca para la precisión de captura de primer plano. Esta es la configuración estándar de 3 cámaras que implementamos para servicios de recopilación de datos. Consulte nuestra guía Configuración de cámara para teleoperatorio para la configuración completa.

Recomendaciones específicas de productos

Configuración de la investigación presupuestaria (total de 400 a 800 dólares)

2x Logitech BRIO 4K ($ 200 cada) para vistas generales y laterales, 1x Intel RealSense D435i ($ 200) para profundidad adicional. Limitaciones: obturador de rodamiento en BRIO, USB latency jitter.

Configuración de la investigación estándar (total de 1.500 a 3.000 dólares)

2x Basler ace2 a2A1920-160ucBAS ($ 650 cada) con obturador global para vistas generales y laterales, 1x RealSense D435i ($ 200) para profundidad. Agregue un interruptor GigE con PoE ($ 100) y un Arduino Uno ($ 25) para desencadenar hardware. Esta es la configuración que RCSV utiliza para la mayoría de [compromisiones de recopilación de datos]

Sistema de visión de producción (de 5.000 a 20.000 dólares)

Photoneo PhoXi 3D Scanner ($8,000-$15,000) para recoger contenedores con precisión de profundidad sub-milimétrica. O Ensenso N-series ($5,000-$8,000) para escanear 3D a luz estructurada. Estos se emparejan típicamente con cámaras 2D de grado industrial (Basler ace2 o FLIR Blackfly S) para superposición de color.

Para las cámaras de muñeca

El Intel RealSense D405 (200 dólares, factor de forma compacto diseñado para corto alcance) o un dardo Basler con USB3 (300 a 500 dólares, obturador global, muy compacto).

Pipeline de procesamiento de visión

Un tubo de visión robótica típico para tareas de manipulación:

  1. Aquisición de imágenes: El controlador de cámara publica T7 sobre el tema ROS2 a 30-60 Hz
  2. Undistorsión: Aplicar los parámetros de calibración a través del nodo T8 o del controlador
  3. ** Detección/segmentación de objetos:** ejecuta inferencias (YOLOv8, Segment Anything o modelo personalizado) en la GPU. Publica las poses de objetos detectados como T9
  4. Generación de nube de punto: Si se utiliza una cámara de profundidad, genera la nube de punto a través de T10. Filtra por cuadro de límite del espacio de trabajo
  5. ** Planificación de Grap:** Feed objetos detectados y nube de punto para captar planificador (GraspIt!, Contact-GraspNet, o política aprendida)
  6. Registración: Registra las imágenes, poses y acciones sincronizadas en HDF5 para datos de entrenamiento

Para la inferencia de GPU, una NVIDIA RTX 3060 (12GB VRAM) maneja YOLOv8-Medium a 30+ fps en imágenes de 1280x960.

En general

La visión es el canal sensorial más rico en información para la manipulación de robots. Un sistema de visión correctamente configurado proporciona la comprensión geométrica y semántica que las políticas necesitan para capturar, colocar, verter y ensamblar objetos. Pero elegir la cámara equivocada, la posición de montaje o el procesamiento de tuberías puede paralizar un sistema capaz de otra manera.

Esta guía cubre todas las capas de la pila de visión de robots: selección de sensores, consideraciones ópticas para la robótica, procedimientos de calibración, estrategias de montaje, tuberías de procesamiento e integración ROS2. Nuestras recomendaciones se basan en docenas de implementaciones de sistemas de visión en RCSV en investigaciones de manipulación, teleoperatoria y aplicaciones de inspección de producción.

Comparación de tipos de sensores

Sensor Type Example Products Resolution Price Best For
2D RGB (global shutter) Basler ace2, FLIR Blackfly S, Allied Vision Alvium Up to 5472x3648 $400-$2,000 High-quality data collection, policy training, inspection
2D RGB (rolling shutter / USB) Logitech BRIO, ELP USB cameras, Arducam Up to 4K $30-$200 Budget prototyping, slow-motion tasks
Stereo Depth (active IR) Intel RealSense D435i, D455 1280x720 depth, 1920x1080 RGB $200-$350 Supplemental depth, point cloud generation
Stereo Depth (neural) Stereolabs ZED 2i, ZED Mini 2208x1242 (2K), depth to 20m $450-$550 Mobile robots, outdoor depth, spatial mapping
Structured Light Photoneo PhoXi, Ensenso N-series 2064x1544 (3.2 MP depth) $5,000-$15,000 Bin picking, high-precision 3D scanning
Time-of-Flight (ToF) Azure Kinect DK, Lucid Helios2 1024x1024 (Kinect), 640x480 $400-$3,000 Body tracking, scene understanding
Event Camera Prophesee EVK4, iniVation DVXplorer 1280x720 (event stream) $3,000-$8,000 High-speed tracking, dynamic scenes, low latency
Thermal (LWIR) FLIR Lepton 3.5, Seek Thermal 160x120 to 640x512 $200-$5,000 Thermal inspection, human detection, food handling

Considerancias ópticas para la robótica

El cerrojo global vs. el cerrojo rodante

Esta es la especificación de cámara más importante para la robótica. Un obturador rodante expone la imagen fila por fila (lectura típica: 10-30 ms de arriba a abajo). Cuando la cámara o escena se mueve durante la exposición, la imagen muestra sesgo, tambalea o distorsión parcial de marco. Para un brazo robótico que se mueve a 200 mm/s con un tiempo de lectura de 10 ms, la parte superior y inferior del marco se pueden compensar en 2 mm, lo suficiente como para causar fallos de agarre.

Un obturador global expone todos los píxeles simultáneamente. Las cámaras de visión automática industriales (Basler ace2, FLIR Blackfly S) utilizan sensores de obturador globales (familia Sony Pregius / Pregius S). Estos son esenciales para las cámaras montadas en la muñeca, la manipulación de alta velocidad y cualquier configuración en la que el brazo se mueve durante la captura de imágenes.

Recomendación: Utilice siempre cámaras de obturador global para posiciones montadas en la muñeca. Para cámaras de obturador fijas que capturan tareas lentas (< 50 mm/s), el obturador de rodadura es aceptable si su presupuesto es limitado.

Presupuesto de la latencia

Para la teleoperación, la latencia total de la tubería de visión (captura + transferencia + procesamiento + visualización) debe ser inferior a ** 100 ms** para una operación estable y a ** 50 ms** para una sensación de respuesta. Para el servo visual de bucle cerrado, el objetivo ** < 16 ms** (un fotograma a 60 fps).

  • Exposición de los sensores: 1-33 ms (dependiendo de la iluminación y la frecuencia de los cuadros)
  • Transferencia: < 1 ms (GigE con disparador de hardware) a 50 ms (USB con amortiguador)
  • Procesamiento (detección/segmentación): 5 a 50 ms (dependiente de la CPU)
  • Red (si se transmite a un operador remoto): 5-200 ms (dependiendo de la infraestructura)

Los controladores de cámara ROS2

Cada cámara que considere debe tener un controlador ROS2 mantenido.

  • T11 -- Driver oficial de Intel para las series D400 y L500. Publica temas de profundidad, IR, RGB, IMU.
  • T12 -- cámaras ZED de estereolab. Incluye mapas espaciales y nodos de detección de objetos.
  • T13 -- cámaras Basler a través de Pylon SDK. Soporta el hardware de activación.
  • T14 -- cámaras FLIR/Point Grey. disparador de hardware y soporte GPIO.
  • T15 -- Generic V4L2 controlador para cámaras USB. No soporte de disparador de hardware.

Calibración de la cámara con OpenCV

La calibración adecuada no es negociable. Las cámaras no calibradas introducen distorsión radial que degrada la reconstrucción 3D y la generalización de políticas.

import cv2
import numpy as np
import glob

# Checkerboard dimensions (inner corners)
BOARD_SIZE = (9, 6)
SQUARE_SIZE = 25.0  # mm

# Prepare 3D object points
objp = np.zeros((BOARD_SIZE[0] * BOARD_SIZE[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:BOARD_SIZE[0], 0:BOARD_SIZE[1]].T.reshape(-1, 2) * SQUARE_SIZE

obj_points, img_points = [], []

for fname in sorted(glob.glob("calib_images/*.png")):
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, BOARD_SIZE, None)
    if ret:
        corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1),
            (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))
        obj_points.append(objp)
        img_points.append(corners)

ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(
    obj_points, img_points, gray.shape[::-1], None, None)

print(f"Reprojection error: {ret:.4f} px")  # Target: < 0.5 px
print(f"Camera matrix K:\n{K}")
print(f"Distortion coeffs: {dist}")

# Save for ROS2 camera_info
np.savez("calibration.npz", K=K, dist=dist, rvecs=rvecs, tvecs=tvecs)

** Mejores prácticas:** Recoger 30-50 imágenes con el tablero de ajedrez en ángulos variados (inclinados hasta 45 grados), distancias (rellenando 20-80% del marco) y posiciones a través de la imagen completa. El error de reproyección debe ser inferior a 0,5 píxeles para el trabajo de grado de investigación. Recalibrar después de cualquier cambio de lente, ajuste de enfoque o impacto físico.

Compartidas entre las cámaras de muñeca y las de cámara externa

Factor Wrist-Mounted External (Fixed)
Field of View Narrow, focused on grasp point Wide, full workspace coverage
Occlusion Minimal -- always sees what end-effector sees Arm and gripper can occlude objects
Motion blur High -- requires global shutter + short exposure Low -- camera is stationary
Calibración Eye-in-hand calibration required Eye-to-hand calibration (simpler)
Cable management Challenging -- cable must route along arm Simple -- fixed cable run
Weight at end-effector Adds 50-300g (reduces payload budget) Zero impact on payload
Policy training impact Strong signal for fine manipulation Good for spatial reasoning and navigation

** Recomendación RCSV:** Utilice ambos. Una cámara horizontal fija + cámara lateral fija para el contexto del espacio de trabajo, más una cámara de muñeca para la precisión de captura de cerca. Esta es la configuración estándar de 3 cámaras que implementamos para servicios de recopilación de datos. Consulte nuestra guía Configuración de cámara para teleoperatorio para la configuración completa.

Recomendaciones específicas de productos

Configuración de la investigación presupuestaria (total de 400 a 800 dólares)

2x Logitech BRIO 4K ($ 200 cada) para vistas generales y laterales, 1x Intel RealSense D435i ($ 200) para profundidad adicional. Limitaciones: obturador de rodamiento en BRIO, USB latency jitter.

Configuración de la investigación estándar (total de 1.500 a 3.000 dólares)

2x Basler ace2 a2A1920-160ucBAS ($ 650 cada) con obturador global para vistas generales y laterales, 1x RealSense D435i ($ 200) para profundidad. Agregue un interruptor GigE con PoE ($ 100) y un Arduino Uno ($ 25) para desencadenar hardware. Esta es la configuración que RCSV utiliza para la mayoría de compromisiones de recopilación de datos.

Sistema de visión de producción (de 5.000 a 20.000 dólares)

Photoneo PhoXi 3D Scanner ($8,000-$15,000) para recoger contenedores con precisión de profundidad sub-milimétrica. O Ensenso N-series ($5,000-$8,000) para escanear 3D a luz estructurada. Estos se emparejan típicamente con cámaras 2D de grado industrial (Basler ace2 o FLIR Blackfly S) para superposición de color.

Para las cámaras de muñeca

El Intel RealSense D405 (200 dólares, factor de forma compacto diseñado para corto alcance) o un dardo Basler con USB3 (300 a 500 dólares, obturador global, muy compacto).

Pipeline de procesamiento de visión

Un tubo de visión robótica típico para tareas de manipulación:

  1. Aquisición de imágenes: El conductor de la cámara publica T16 en el tema ROS2 a 30-60 Hz
  2. Undistorsión: Aplicar los parámetros de calibración a través del nodo T17 o del controlador
  3. ** Detección/segmentación de objetos:** ejecutar inferencias (YOLOv8, Segment Anything o modelo personalizado) en la GPU. Publicar poses de objetos detectados como T18
  4. Generación de nube de punto: Si se utiliza una cámara de profundidad, genera nube de punto a través de T19. Filtra por cuadro de límite del espacio de trabajo
  5. ** Planificación de Grap:** Feed objetos detectados y nube de punto para captar planificador (GraspIt!, Contact-GraspNet, o política aprendida)
  6. Registración: Registra las imágenes, poses y acciones sincronizadas en HDF5 para datos de entrenamiento

Para la inferencia de GPU, una NVIDIA RTX 3060 (12GB VRAM) maneja YOLOv8-Medium a 30+ fps en imágenes de 1280x960.