Ir al contenido

Percepción

La cámara Intel RealSense D435i y el RPLiDAR C1

La percepción es lo que la NUC hace con sus dos sensores: un mapa 2D del entorno con el LiDAR, y video y visión por computadora con la cámara RGB-D. El resultado viaja al visor por ZeroMQ.

Dos pipelines independientes dentro del coordinador de la NUC, uno por sensor.

Sensores
ParámetroValorUnidadNotas
RPLiDAR C1COM3460 800 baudGrid de ocupación 2D, paredes, puntos
Intel RealSense D435iUSB3—Video RGB al XR, profundidad calibrada, visión

Las características de cada sensor y cómo probarlo desde una PC están en su página: RPLiDAR C1 y RealSense D435i.

Cada pipeline trabaja solo cuando el operador tiene abierto el modo que lo usa. El grid del LiDAR alimenta los paneles 2D del visor; las paredes y los puntos alimentan la escena 3D; el video y la visión, el panel central.

La profundidad nunca sale en crudo: antes se corrige con una curva de calibración, y la de cada detección se promedia en un disco de píxeles en lugar de leerse de uno solo.

  1. NUCpipelines de percepción
  2. RPLiDAR C1LiDAR 2D
  3. COM3 · 460 800 baudRPLiDAR C1 → NUC: barridos 2D
  4. RealSense D435icámara RGB-D
  5. USB 3RealSense D435i → NUC: RGB 640 × 480 · profundidad
  6. Meta Quest 3paneles y escena 3D
  7. ZMQ por WiFiNUC → Meta Quest 3: 5555 video · 5001 grid y visión · 5007 paredes y puntos

El grid tiene tres modos, con celda fija de 1 cm en todos ellos. Lo que cambia entre modos es el radio cubierto:

ModoRadioGridFrecuencia
detail1 m200×200~12 Hz
medium2 m400×400~12 Hz
panorama3 m600×600~12 Hz

El grid se publica como JSON en el tópico lidar_grid. Los puntos con más de 0,35 s de antigüedad se descartan antes de construirlo.

Inmersivo y opcional (walls_enabled): alimenta la escena 3D del headset, no los paneles 2D. El sistema acumula hasta 150 000 puntos en una ventana de 4 s y procesa el lote a ~1 Hz, en cinco etapas:

  1. Proyectar los puntos a un grid 2D de 10 cm, con 0,5 m de margen.
  2. Morfología para cerrar huecos y quitar ruido: dilatación (kernel 3, 1 pasada), cierre (kernel 5, 2 pasadas) y apertura (kernel 2, 1 pasada).
  3. Componentes conectados, descartando los de menos de 80 px de área.
  4. Simplificar las polilíneas con épsilon de 4 px, descartando las de menos de 8 px de longitud.
  5. Fusionar segmentos: se unen los que difieren menos de 15°, con ajuste a 3 px y extensión máxima de 4 px, y se alinean a la ortogonal con la misma tolerancia de 15°.

El orden importa. Cerrar antes de abrir une los tramos de una misma pared que el LiDAR ve con huecos, y solo después se elimina el ruido suelto; al revés, la apertura borraría puntos que el cierre necesitaba.

La salida son segmentos de pared compactos. Viajan en binario por el puerto 5007, con los identificadores WSNP para el snapshot completo y WDEL para los deltas.

También inmersivo (points_enabled). Publica hasta 12 000 puntos crudos por paquete a ~8 Hz, por el puerto 5007, con los identificadores LPSN y LPFR.

La cámara entrega un stream RGB de 640×480 a un máximo de 30 fps, comprimido en JPEG con calidad 85. Se publica en el tópico video_rgb, por el puerto 5555.

La profundidad se corrige con una curva de calibración interpolada entre 160 mm y 1000 mm.

Corre en CPU, no en GPU, y cada modo carga un modelo distinto. Los dos no son de la misma familia, cosa fácil de pasar por alto al montar el entorno:

ModoModeloSalida
poseyolov8n-pose.ptKeypoints de pose corporal
segmentyolo26n-seg.ptMáscaras de segmentación
Parámetros de inferencia
ParámetroValorUnidadNotas
DispositivoCPU—La NUC no lleva GPU dedicada
Tamaño de entrada640px
Umbral de confianza0,70—Detección descartada por debajo
Umbral por keypoint (pose)0,20—
Máscara mínima (segmentación)200pxDescarta manchas sueltas
Radio de muestreo de profundidad10pxPromedia un disco, no un píxel suelto
Profundidad máxima válida2500mm
Frecuencia de publicación10Hz

La profundidad de una detección no se lee del píxel central sino de un disco de 10 px alrededor: un solo píxel de la RealSense puede venir sin dato o con ruido, y una lectura errónea ahí desplaza el objeto entero en la escena.