DRC controls — input + autoridad
El control manual de drones en ARGUS se alimenta de una capa compartida de
mapeo de input (controls-prefs.service.ts) que enruta los inputs del
operador a través de una abstracción de transporte al drone — handhelds,
aeronaves MAVLink, o aeronaves de DJI dock. El mismo mapeo funciona entre
los tres; la capa de transporte maneja las diferencias de protocolo.
El mapa de control
Los bindings viven en un objeto ControlsMapping en
Settings → Input controls. Todos los
bindings están sin asignar por defecto — el sistema se entrega con un
mapeo vacío para que los operadores enlacen explícitamente lo que quieren.
Esto es intencional para evitar inputs sorpresa.
El conjunto completo de controles enlazables:
Comandos de vuelo
droneTakeoff— iniciar auto-despegue.droneLand— iniciar auto-aterrizaje.droneGoHome— enviar RTH.droneCancelTakeoff/droneCancelLand/droneCancelGoHome— cancelar cada uno de los anteriores mientras están en progreso.emergencyStop— ESTOP, corte total de potencia. Usar con extrema precaución — la aeronave cae.
Grab de autoridad (DJI DRC)
authorityGrabFlight— tomar autoridad de vuelo DRC Clase-A de DJI.authorityGrabPayload— tomar autoridad de payload DRC Clase-B (cámara/gimbal) de DJI.
La autoridad es de un solo operador a la vez. Hacer grab mientras otro operador la mantiene dispara una confirmación de force-grab en la UI.
Comandos de dock (sólo DJI dock)
dockCoverOpen/dockCoverClose— cubierta física.poiModeToggle— iniciar / detener modo orbit POI de DJI.
Cámara + gimbal
camLensChange— ciclar lente (WIDE / ZOOM / IR).camTakePicture— disparador.camStartRecording/camStopRecording— toggle de grabación de vídeo.droneFlyToPoint/takeoffToPoint— vuelo autónomo a un objetivo.
UI / seguridad
masterCaution— reconocer alertas críticas actuales.
Ejes analógicos (inputs de valor continuo)
droneAxisPitch,droneAxisRoll,droneAxisYaw,droneAxisThrottle— ejes del stick de vuelo.gimbalAxisPitch,gimbalAxisYaw,gimbalAxisZoom— ejes del gimbal.
Cada eje se vincula a un eje físico en un gamepad o a un “eje digital” de teclado (dos teclas que mueven un stick virtual a tope a la izquierda / tope a la derecha).
Soporte de gamepad
La capa de input detecta gamepads vía la Gamepad API del navegador + fallback WebHID para controladores HOTAS que no se exponen como gamepads estándar.
- Auto-detección — conecta un dispositivo, aparece en la página input-controls.
- Modo-2 por defecto — si aceptas el mapeo sugerido, vincula el stick izquierdo a pitch/roll, el stick derecho a yaw/throttle. Los modos 1, 3 y 4 están disponibles mediante re-mapeo manual.
- Curva de stick (expo) — valor de expo por eje 0-1 vía el slider de curva de stick. 0 = lineal, 1 = expo máximo. La mayoría de operadores se asientan alrededor de 0.3.
- Fuente preferida —
preferredDroneInputSourcepuede serwebhid,gamepad,native-bridgeoserial. Si múltiples fuentes están conectadas todas producen eventos; la preferida gana.
Teclado
Cualquier control puede enlazarse a una tecla de teclado vía el panel Settings → Input controls. Bindings comunes que los operadores se ponen a sí mismos (ninguno viene de fábrica):
- T — takeoff.
- L — land.
- H — return-to-home.
- Esc — release authority.
- Space — PTT (consulta PTT — ya reservada por el sistema PTT; no la reasignes).
Envelope de seguridad
La capa de input recorta los inputs antes de enviarlos al transporte:
- Saturación de stick — cada eje analógico se recorta a
[-1.0, 1.0]. - Gate del modo virtual-stick — si
isVirtualStickModeEnabledesfalseen el drone, los inputs del stick de vuelo se descartan antes de la transmisión; la aeronave los rechaza igualmente pero la UI hace short-circuit. - Modo avanzado —
isVirtualStickAdvancedModeEnableddesbloquea comandos de envelope de vuelo extendidos (override del cap de altitud, mayores velocidades horizontales). Configurable por admin. - Geofence / no-fly — el pipeline de seguridad geofence recorta inputs que empujarían el drone más allá de un límite de polígono.
Actualmente NO hay una opción de soft-clipping (p. ej. “50 % máximo de throttle”) — el recorte es duro en ±1.0.
Flujo de autoridad DRC (sólo DJI dock)
Para volar manualmente una aeronave de DJI dock vía DRC:
- Selecciona el drone en el tile de flota. El tile se enlaza a él.
- Toma autoridad — haz clic en Take control en la barra del
drone-stream, o dispara el input enlazado
authorityGrabFlight. ARGUS publicadrc_grab_authority. Si alguien más está volando, un diálogo de confirmación ofrece force-grab o esperar. - Arranca el heartbeat — el DjiCloudControlTransport empieza a enviar un comando de heartbeat a 1 Hz para mantener viva la sesión DRC. Pausa cuando la pestaña del navegador está oculta (sin ancho de banda desperdiciado) pero la sesión expira tras ~60 s de silencio.
- Vuela — tus ejes de input + comandos de botón fluyen al drone. El heartbeat sigue ejecutándose.
- Release — pulsa la tecla enlazada
Release, cierra el tile de drone-stream o navega fuera. ARGUS publicadrc_release_authoritypara devolver la autoridad.
Si el heartbeat se detiene (pestaña colgada, red caída), la sesión DRC a nivel de flight-controller del dock expira autónomamente y la aeronave se queda en hover en su sitio — no se estrella.
Controles de cámara vía DRC
- Apuntado del gimbal — los dos ejes del gimbal (pitch / yaw) más zoom; la pose del gimbal sigue los valores de eje en casi tiempo real.
- Cambio de lente —
camLensChangecicla entre las lentes disponibles. - Foto —
camTakePicturedispara un único disparo. - Grabar — toggle
camStartRecording/camStopRecording. - Look-at a un punto en el mapa — click derecho en un punto del mapa → Look at this point. Despacha un comando de pose de gimbal absoluto para que el gimbal apunte a la coordenada.
- Fly-to a un punto — click derecho en el mapa → Fly to here.
Despacha
droneFlyToPoint.
La identidad del peer para DJI DRC
Cuando el tile de drone-stream está en modo djiCloud, los comandos fluyen
vía el DjiCloudControlTransport. Ese transporte
usa peer id dji-dock-{sn} (el mismo peer id que usa el
LivekitParticipantManager en el lado argus-dji) para que los streams de
telemetría + control del dock compartan una identidad.
Limitaciones conocidas
- Sin perfil de curva por control — un único slider de curva de stick se aplica a todos los ejes de vuelo. Las curvas por eje están planificadas.
- Sin “soft cap” en throttle / yaw / roll — sólo el recorte duro ±1.0.
- Sin editor de deadband de joystick — depende del deadband natural de cada dispositivo.
Relacionado
- Input controls — la UI de bindings.
- Stream tile — donde vive el chip de autoridad DRC.
- Seguridad geofence — cómo la envelope de seguridad interactúa con polígonos.
- DJI DRC — detalles DRC específicos de DJI.