Ir al contenido

Registro de ingeniería

Por qué el sistema está hecho así y en qué estado está cada pieza: las decisiones de arquitectura registradas y el estado verificado del proyecto.

Cada decisión de arquitectura relevante se registra aquí como un ADR —Architecture Decision Record—: un documento corto y fechado que explica el contexto, las alternativas consideradas, lo que se decidió y qué costos se aceptaron a cambio.

El registro existe para responder «¿por qué está hecho así?» sin depender de la memoria de quien lo construyó. Una alternativa descartada, con su motivo, vale tanto como la opción elegida: evita que alguien la reabra sin saber que ya se evaluó.

IDDecisiónEstado
ADR-0001La NUC como coordinador únicoAceptada

El resto de las decisiones del proyecto se tomaron sin registrarse en su momento. Reconstruirlas ahora corre el riesgo de inventar un razonamiento que nadie tuvo, que es peor que no documentarlas.

Hay tres candidatas identificadas: la elección de ZeroMQ frente a otros middleware, el reparto del control entre tres controladores embebidos, y el uso de lámina doblada como método estructural. Cada una se documentará solo si el autor confirma cuál fue el razonamiento real.

Estado: aceptada · 2026 (Proyecto Terminal)

La decisión de arquitectura más determinante del proyecto: poner una NUC a bordo como único coordinador, en lugar de exponer el control de motores al operador remoto o de resolver la percepción en los microcontroladores. Este registro deja el contexto, las opciones consideradas y las consecuencias que se aceptaron.

El robot tiene que combinar tres exigencias que operan en escalas de tiempo muy distintas:

ExigenciaEscala de tiempoNaturaleza
Control de motoresMicrosegundos a milisegundosDeterminista, sin margen para jitter
Percepción (LiDAR, cámara RGB-D)Decenas de HzIntensiva en cómputo
Comunicación con el operador remotoLatencia variable sobre WiFiNo fiable: admite pérdida de paquetes

Ninguna arquitectura de un solo nivel de control resuelve bien las tres a la vez: exponer el control de motores directamente al operador remoto heredaría la incertidumbre de la red; resolver percepción y comunicación dentro de los propios microcontroladores de motor los sobrecargaría con responsabilidades ajenas a su función.

Control directo desde la Meta Quest a cada controlador embebido, sin computadora intermedia. Descartada por dos motivos. Expondría el control de motores en tiempo real a la latencia y a la pérdida de paquetes de WiFi. Además multiplicaría la lógica de protocolo que la interfaz XR tendría que conocer: un protocolo por controlador, en lugar de un solo contrato ZMQ.

ROS como middleware de coordinación. Descartado por simplicidad y portabilidad. El equipo prefirió un stack propio en Python 3.12 con ZeroMQ, sin la sobrecarga de un framework de robótica completo para un sistema de este tamaño.

Un microcontrolador único como coordinador, en lugar de una NUC. Descartada por capacidad de cómputo: la percepción con RealSense y RPLiDAR, más el streaming de video a la Meta Quest, exceden lo que un ESP32-C3 puede sostener.

La NUC actúa como coordinador único entre el operador y la electrónica embebida.

Recibe de la Meta Quest comandos simples por ZMQ —una velocidad deseada, un ángulo objetivo— y coordina los sensores del robot. Después traduce esos comandos a instrucciones para tres controladores ESP32-C3 independientes.

Cada controlador resuelve el control de bajo nivel de su propio subsistema —tracción, manipulador o gripper— sin que la NUC intervenga en tiempo real.

Favorables:

  • La interfaz XR se mantiene simple: habla un solo protocolo con un solo destino.
  • El control de motores en tiempo real queda aislado de la variabilidad de WiFi. Vive enteramente sobre USB e I²C, que son deterministas.
  • Los tres controladores embebidos se pueden reemplazar o extender por separado, sin tocar el resto del sistema.

Costos aceptados:

  • La NUC es un punto único de coordinación. Si falla, el robot pierde todo el control remoto, porque el diseño actual no tiene coordinador redundante.
  • Se renunció a un ecosistema de robótica maduro a cambio de un stack más simple y hecho a medida. Cualquier funcionalidad de ROS que haga falta en el futuro habrá que construirla.

Aceptada y en producción. Es la arquitectura descrita en Arquitectura del sistema, y está verificada sobre el robot construido.

Versión: sin versionar formalmente · 2026 (Proyecto Terminal)

El proyecto original no llevaba un esquema de versionado formal, ni para hardware ni para software. Esta sección describe por tanto el estado real verificado de cada pieza, no una release numerada: asignar un número de versión que nadie definió sería inventar información.

Adoptar un esquema de versionado hacia adelante es una decisión pendiente.

La columna «Fuente» indica el documento del repositorio original de donde procede cada estado.

PiezaEstado verificadoFuente
Plataforma móvil (mecánica)Construida y probada03-robot-agv/plataforma-movil.md
Manipulador 3 GDL (mecánica)Construido y probado03-robot-agv/manipulador.md
PCB Puente H (×2)Diseñadas, ensambladas y probadas03-robot-agv/electronica.md
PCB CL57TDiseñada, ensamblada y probada03-robot-agv/controlador-cl57t.md
Firmware Puente H (main_movil_final.py)Funcional, 1 175 líneas03-robot-agv/sistemas-embebidos.md
Firmware CL57T (main_manipulador_final.py)Funcional, 933 líneas03-robot-agv/sistemas-embebidos.md
Firmware gripper (main_gripper_final.py)Funcional, 703 líneas03-robot-agv/sistemas-embebidos.md
Stack NUC (Python 3.12 + ZMQ)Funcional — ver detalle abajo03-robot-agv/software.md
Integración XR → NUC → electrónicaEn procesovarias fuentes

Estado en la última verificación registrada:

FuncionalidadEstado
Control de motores individual por USB-CVerificado
Control por WiFi y BLEVerificado
Integración de control de base desde interfaz XRFuncional
Control completo del manipulador 3 GDLFuncional
Control del gripper desde interfaz XRFuncional

Todavía sin definir. El propio proyecto original dejó cuatro candidatos anotados en 11-pendientes.md:

  • PCB dedicada para el gripper, que reemplace el montaje actual en protoboard.
  • Modelo cinemático del robot móvil, para odometría y trayectorias programadas.
  • Cinemática inversa del manipulador.
  • Captura de los encoders de tracción, para cerrar el lazo de control de velocidad.