Ir al contenido

NUC

Intel NUC, la computadora a bordo del robot

La NUC es la computadora del robot. Recibe las órdenes del operador, lee los sensores y reparte el trabajo entre las placas embebidas que mueven los motores.

Una Intel NUC i7 que viaja a bordo del robot: pese al nombre de la sección, no hay ningún servidor externo. Sobre ella corre un único proceso en Python 3.12 con ZeroMQ, sin ROS. Dejar fuera ROS fue una decisión deliberada, registrada en ADR-0001.

Ese proceso hace dos trabajos, cada uno documentado en su página:

  • Middleware ZMQ: los cuatro canales con el visor y los dos puentes serie hacia las placas.
  • Percepción: el grid y las paredes del LiDAR, y el video y la visión de la RealSense.

La NUC procesa solo lo que el modo activo requiere —visión YOLO, grid de LiDAR o pipeline de paredes—, de modo que un modo inactivo no consume ni CPU ni red.

Tampoco reenvía los comandos tal cual: los traduce. Un drive_cmd con velocidades v/w del modelo uniciclo se convierte en consignas por motor antes de salir por COM4, y un manip_cmd en grados se convierte en la trama ASCII POSE que entiende el Controlador CL57T. El control en tiempo real —pasos, rampas, PWM— se queda en las placas.

Todo lo que entra y sale de la NUC. A la izquierda, lo que le llega: las órdenes del operador y lo que miden los sensores. A la derecha, las placas a las que manda. Las puntas de cada línea señalan hacia dónde viaja la información, y lo que viaja se lee debajo con la misma flecha.

  1. NUCIntel i7 · Python 3.12
  2. Meta Quest 3interfaz de usuario
  3. ZMQ por WiFiMeta Quest 3 → NUC: 5002 comandosNUC → Meta Quest 3: 5555 video · 5001 estado · 5007 paredes
  4. RealSense D435icámara RGB-D
  5. USB 3RealSense D435i → NUC: RGB 640 × 480 · profundidad
  6. RPLiDAR C1LiDAR 2D
  7. COM3 · 460 800 baudRPLiDAR C1 → NUC: barridos 2D
  8. Conjunto I²CPuente H ×2 y CL57T
  9. USB-CDC · COM4NUC → Conjunto I²C: tracción · POSEConjunto I²C → NUC: estado
  10. Controlador del gripperESP32-C3
  11. USB-CDC · COM5NUC → Controlador del gripper: m <mm>Controlador del gripper → NUC: GRIPPER_STATE

Por COM4 la NUC habla solo con el Puente H maestro, que reenvía por I²C al Puente H esclavo y al controlador CL57T: es el Conjunto I²C. El gripper queda fuera de ese bus, con su propio USB.

El coordinador es un único proceso de Python que abre los cuatro puertos ZeroMQ, conecta los sensores y mantiene los dos puentes serie. No hay orquestador ni servicio: se lanza a mano.

Dependencias del coordinador
PaquetePara quéNota
pyzmqLos cuatro canales ZeroMQNúcleo del middleware
opencv-pythonCompresión JPEG y morfología del pipeline de paredesSe importa como cv2
numpyGrids, máscaras y nubes de puntos—
pyrealsense2RealSense D435iRequiere el SDK de Intel instalado
ultralyticsYOLO en los modos pose y segmentaciónDescarga los pesos la primera vez
pyserialPuentes COM4 y COM5Import opcional: sin él, el arranque no falla
rplidarc1RPLiDAR C1Con respaldo a un módulo scanner local

El código tolera que falten pyserial y el módulo del LiDAR: los envuelve en try/except y arranca igual, sin ese periférico. Eso permite desarrollar la parte de percepción o de red sin el robot conectado. Sin la RealSense y el RPLiDAR, el proceso arranca, pero se queda sin percepción.

Los puertos serie están fijados en el código (COM4, COM5, COM3), no son configurables por argumento ni por variable de entorno. En otra máquina hay que editarlos, igual que los puertos ZeroMQ: 5555, 5001, 5002 y 5007.