Ir al contenido

La aplicación corre en modo passthrough MR sobre el Meta Quest 3. Un canvas world-space flotante agrupa tres paneles, y el operador interactúa con ellos por ray interaction desde los controladores del headset.

Vista de la interfaz de teleoperación en realidad mixta sobre Meta Quest
La interfaz tal como la ve el operador: paneles de estado y sensores superpuestos sobre el entorno real.
PanelPosiciónFunción
IzquierdoIzq.Estado de conexión, controles de cámara, parada de emergencia
CentralCentroStream de video principal y grid LiDAR 2D
DerechoDer.Sliders de manipulador y gripper, rotación de cámara

La interfaz pide a la NUC solo los datos que está mostrando. Los streams que nadie tiene abierto no se transmiten.

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í

  • Disposición de los tres paneles y función de cada control
  • Parámetros del teleoperado, los rangos articulares y el código de color del grid
  • Modos de control, su exclusividad y qué arma cada uno
  • Valores de feedback háptico y de audio

Lo que falta para llegar a «Construible»

  • Las escenas y prefabs de Unity que materializan estos paneles
  • Capturas o grabación de la interfaz en funcionamiento dentro del headset

El RobotStatusPanel se refresca a ~5 Hz desde el tópico stat. Muestra el estado de conexión, la IP de la NUC y la del headset, el modo activo, los FPS y la resolución del video, y el estado de cada sensor.

Parada de emergencia. Un botón envía stop_all y master_disarm a la vez. Detiene toda la locomoción y deja los motores en DISARMED de inmediato.

IP de la NUC. Un teclado numérico virtual permite cambiar la IP sin quitarse el headset. Hace falta porque la red del laboratorio no asigna IP fija a la NUC, según se explica en Puesta en marcha. La aplicación guarda el valor en PlayerPrefs, así que sobrevive entre sesiones.

Stream de video
ParámetroValorUnidadNotas
Resolución640×480px
Tasa de cuadros~30fps
Latencia objetivo< 150msextremo a extremo, sin medir formalmente todavía

La resolución de 640×480 es un techo empírico, no una elección arbitraria. Por encima de ese valor aparecen frames en blanco y caídas de FPS.

El grid LiDAR 2D usa un código de color fijo:

ColorSignificado
BlancoEspacio libre
NegroObstáculo
VerdePosición del robot
AzulFrente del robot

Los modos detail, medium y panorama usan el mismo radio y el mismo tamaño de grid descritos en Percepción.

El panel tiene cuatro sliders independientes:

ControlArticulaciónRango
BaseRotación de la base−80° a +80°
CodoArticulación del codo0° a 136,5°
MuñecaOrientación de la muñeca−220° a 0°
GripperApertura de la pinza0 mm a 80 mm

Mientras el operador ajusta los sliders, un modelo 3D —el ghost robot— muestra la pose que resultaría, antes de enviar nada al robot real.

Dos botones cierran la interacción. Home envía manip_home, que dispara la rutina de homing en el CL57T. Implement envía la pose completa en un solo mensaje.

joystick.y (±1) → v (avance/retroceso)
joystick.x (±1) → w (giro)
left = clamp(v - w, -255, 255)
right = clamp(v + w, -255, 255)
Parámetros del teleoperado de base
ParámetroValorUnidadNotas
Frecuencia de envío15Hz
Zona muerta en Unity18%Sobre el joystick crudo, antes de enviar
Ganancia de giro1,0
Velocidad máxima±255raw≈ ±70 % de duty en hardware
Watchdog en la NUC350mssin comando en ese plazo, se fuerza un stop

Es la clase de detalle que cuesta horas si se descubre depurando. El joystick pasa por dos filtros de reposo, en dos máquinas distintas:

DóndeValorSobre qué actúa
Unity, antes de enviar0,18El eje crudo del joystick del Quest
NUC, al recibir drive_cmd0,08La velocidad normalizada ya mezclada

Manda la de Unity, que es la más alta: un valor filtrado ahí nunca llega a la NUC. La de la NUC es una segunda red de seguridad, y protege también frente a un cliente distinto de esta aplicación. Cambiar solo una de las dos produce un comportamiento que no cuadra con ninguna de ellas.

Los tres modos son exclusivos: solo uno puede estar activo a la vez.

ModoQué habilitaQué arma
MobileDrive teleop con el joystickTracción
ManipSliders de manipulador y gripperCL57T
BaseRotación del brazo

Al desactivar todos los modos, la interfaz envía stop_all y master_disarm.

EventoAudioHáptico
Hover sobre un controlSuave (vol. 0,6)0,08 amp / 0,08 Hz / 30 ms
ClickMarcado (vol. 0,8)0,18 amp / 0,18 Hz / 50 ms