Ir al contenido

Unity y comunicación ZMQ

Esta página cubre la capa técnica de la aplicación: de qué paquetes depende y cómo habla con la NUC. La descripción de lo que el operador ve y toca está en Interfaz y controles.

Nivel de replicación

Descrito

Está el diseño explicado, con las dimensiones críticas y la razón de cada decisión. Sirve para rediseñar, no para copiar.

Lo que encuentras aquí

  • Los 25 scripts de C# de la aplicación, completos
  • Stack de paquetes con la versión del Meta XR SDK
  • Contrato ZMQ completo: puertos, tópicos y esquema de comandos
  • Parámetros de configuración por defecto de los componentes principales

Lo que falta para llegar a «Construible»

  • El proyecto Unity: escenas, prefabs, jerarquía del canvas world-space y las referencias que enlazan cada script con su objeto — sin eso los scripts no forman una aplicación
  • El APK compilado para Meta Quest 3
  • Versiones de Unity y del resto de paquetes, más allá del Meta XR SDK
  • El modelo 3D del ghost robot y sus límites articulares, que hoy viven en el prefab y no en el código

Este subsistema es el menos replicable de los tres, y conviene decirlo pronto: los scripts sueltos no reconstruyen la aplicación. Un script de Unity es un componente que se cuelga de un objeto de escena y recibe sus referencias desde el inspector. Sin las escenas y los prefabs, lo que hay aquí sirve para entender la lógica y el protocolo —que es mucho, y es suficiente para escribir un cliente propio— pero no para compilar esta app.

PaqueteFunción
Meta XR SDK (All-in-One) 83.0SDK principal, passthrough y controladores
AsyncZMQ (NetMQ)Cliente ZeroMQ hacia la NUC
Unity XR Interaction ToolkitRay interaction y EventSystem VR/MR
TextMesh ProToda la UI de texto
OVRInputLectura de joystick, botones y hápticos del controlador
Los mismos cuatro puertos del middleware, vistos desde el cliente Unity
PuertoTipoDirecciónTópicos / contenido
5555PUB/SUBNUC → Unityvideo_rgb — JPEG 640×480
5001PUB/SUBNUC → Unitystat, mode_ack, lidar_grid, manip_state, gripper_state
5002PUB/SUBUnity → NUCcmd — comandos JSON
5007PUB/SUBNUC → Unitywalls_snapshot, walls_delta, lidar_points_snapshot, lidar_points_frame

Los comandos que salen por el puerto 5002 se envían varias veces seguidas, con unos milisegundos de separación. Es una defensa contra el slow joiner de ZMQ: un suscriptor que acaba de conectarse pierde los primeros mensajes que se publican, porque el enlace todavía no está establecido. Repetir el comando hace que al menos una copia llegue.

Estos valores están en los propios componentes y son los que toma la aplicación si nadie los cambia desde el inspector de Unity.

Valores por defecto de los componentes principales
ParámetroValorUnidadNotas
IP de respaldo de la NUC192.168.100.20Se usa si no hay ninguna guardada en PlayerPrefs
Modo de cámara al arrancarnormalSe solicita a la NUC en el arranque
Frecuencia de envío de tracción15Hz
Zona muerta del joystick0,18La NUC aplica otra distinta al recibir
Ganancia de giro1,0
Consigna máxima255crudo
Ejes intercambiadosswapAxes activo por defecto
Tolerancia de comparación de pose0,25°Por debajo, no se reenvía el comando
Recorrido del gripper0 – 80mm

La IP de respaldo está incrustada en el componente, así que en otra red hay que cambiarla desde el inspector o introducirla con el teclado virtual la primera vez.

Los 25 scripts de C# de la aplicación están empaquetados juntos. Cubren la recepción de cada canal ZMQ, la gestión de la IP de la NUC, los modos de control y el feedback de la interfaz.

Artefacto

ZIPUnity scripts (C#)
35 KBQué contiene Unity scripts (C#)

ZmqVideoReceiver, ZmqLidarGridView, ZmqLidarPointsReceiver, ZmqWallsReceiver, ZmqGripperStateReceiver, ZmqSensorReceiver, ZmqLidar3DCommandSender, NucIpManager, NucIpPanelController, ControlModeState, QuestMobileDriveTeleop, ManipulatorUIController, RobotStatusPanel, UiInteractionFeedback y otros — 25 scripts, carpeta completa de assets/downloads/Unity scripts/ del proyecto original.