CONCEPTO Y DESARROLLODEPORTE NO TRIPULADO · #bezpiLOTa · KAIROS DRONE AGENTDocumentación
#bezpiLOTa→Drone Agent→API y SDK
KairOS / DRONE AGENT / 03

REST para integraciones, WebSocket MAVLink sin procesar para datos en tiempo real, temas MQTT versionados para retransmisión remota y SDK Python para controladores y extensiones. Aquí se definen los puertos, endpoints, permisos y ejemplos previstos de la interfaz propia de KairOS.

PREVISTO

La API y el SDK se describen como contrato previsto de KairOS; aún no se han publicado una versión estable ni garantías de compatibilidad.

Repositorio de KairOS ↗
08endpoints REST principales
JSONrespuestas REST
WSMAVLink sin procesar
KEYautorización por permisos
01
REST API / :8080

Ocho endpoints principales

La superficie de control escucha en el puerto 8080 y devuelve JSON. La mayoría de las solicitudes requieren la cabecera X-KairOS-Key. Cada clave tiene un nivel de permisos, lo que permite separar la lectura de telemetría de los comandos de vuelo, la carga de misiones y las operaciones administrativas.

MétodoEndpointDatos o acción
GET/api/statusSalud, tiempo activo, conexión del FC, rol y versión del agente
GET/api/telemetryActitud, GPS, batería, canales RC y modo de vuelo
GET/api/paramsCaché de parámetros del FC con filtro por prefijo
POST/api/commandsDespegar, aterrizar, ir a, RTL, armar y desarmar
GET/api/configConfiguración actual del agente en JSON
PUT/api/configModificación de claves y recarga en caliente de los servicios afectados
GET/api/servicesrunning, stopped o failed para los servicios gestionados
GET/api/logsEventos estructurados con filtros de servicio y nivel
bashTelemetría mediante REST
curl -s http://<board-ip>:8080/api/telemetry \
  -H "X-KairOS-Key: <your-key>" | jq
Interfaz prevista de KairOS: el comando solo será ejecutable cuando se publique el componente correspondiente.
jsonEjemplo de respuesta JSON
{
  "armed": true,
  "mode": "GUIDED",
  "battery": { "voltage": 22.4, "pct": 78 },
  "gps": { "fix": 3, "satellites": 14, "alt": 50.2 },
  "attitude": { "roll": 0.02, "pitch": -0.01, "yaw": 182.5 }
}
02
EJEMPLO DE CLIENTE

Leer telemetría y enviar comandos desde Python

pythonCliente previsto de KairOS: solo para simulador hasta la validación de vuelo
import httpx

BASE = "http://<board-ip>:8080"
headers = {"X-KairOS-Key": "<your-key>"}

telem = httpx.get(f"{BASE}/api/telemetry", headers=headers).json()
print(telem["battery"]["pct"], telem["gps"]["satellites"])

httpx.post(
    f"{BASE}/api/commands",
    headers=headers,
    json={"command": "takeoff", "params": {"alt": 10}},
)
Interfaz prevista de KairOS: el comando solo será ejecutable cuando se publique el componente correspondiente.
03
PUERTOS Y TEMAS

Un flujo MAVLink, varios transportes

InterfazPuerto o temaFinalidad
REST:8080Estado, telemetría, configuración, servicios y comandos
MAVLink WebSocket:8765MAVLink v2 binario bidireccional
WebRTC WHEP:8889Vídeo local
Estadokairos/v1/agents/{agent_id}/statusSalud retenida y disponibilidad del agente
Telemetríakairos/v1/agents/{agent_id}/telemetryFlujo de estado del vehículo
Eventoskairos/v1/agents/{agent_id}/eventsEventos y advertencias observables
Comandoskairos/v1/agents/{agent_id}/commandsComandos al agente con QoS 1
ACKkairos/v1/agents/{agent_id}/acks/{command_id}Resultado de un comando concreto
Señalización WebRTCkairos/v1/agents/{agent_id}/video/webrtc/offerOferta SDP para vídeo P2P

El enrutador recibe un único flujo del FC y lo distribuye simultáneamente a varios consumidores: GCS en el navegador por WebSocket 8765, SITL o cliente de ingeniería por TCP 5760 y herramientas heredadas por UDP 14550. WebSocket no incluye envoltorio JSON: transmite tramas binarias MAVLink v2 compatibles con el protocolo de cable.

javascriptWebSocket previsto de KairOS para navegador
const ws = new WebSocket("ws://<board-ip>:8765");
ws.binaryType = "arraybuffer";

ws.onmessage = (event) => {
  decodeMavlink(new Uint8Array(event.data));
};

ws.send(encodeCommandLong(sysid, compid, cmd, params));
Interfaz prevista de KairOS: el comando solo será ejecutable cuando se publique el componente correspondiente.
04
SDK PYTHON

Contratos para controladores y lógica a bordo

ClaseFinalidad
CameraDriverCámaras CSI, USB UVC, IP y con SDK del fabricante
GimbalDriverGiro horizontal, inclinación, alabeo y telemetría del gimbal
LidarDriverDispositivos LiDAR y telémetros
GpsDriverReceptores GPS/GNSS
EscDriverControladores ESC y telemetría de retorno
VisionClientFotogramas y detecciones del bus de visión a bordo
05
SEGURIDAD

Los permisos de la clave API limitan su alcance

NivelQué se permite
readTelemetría, estado, configuración, registros y parámetros sin cambiar el estado
commandComandos de vuelo; incluye read
missionCarga y ejecución de archivos de misión; incluye command
configCambios en la configuración del agente y del FC; incluye read
adminActualizaciones, reinicio de servicios, gestión de claves y acceso completo

La clave debe guardarse como secreto y no incluirse en registros públicos, capturas de pantalla ni paquetes del cliente. Para integrar navegadores se recomienda una credencial de alcance limitado y corta duración, no una clave administrativa permanente.

Interfaz del asistente de IA MCP: análisis de misión en diálogo, mapa, telemetría, llamadas a herramientas, registro de eventos y permisos de acceso.
INTERFAZ / EJEMPLO VISUALContexto de comandos, acceso y auditoría

El panel de permisos y el registro de llamadas a herramientas aparecen junto a la misión. La ilustración vincula permisos con contexto operativo; los contratos de API de KairOS se describen en el texto de la página.

06
INTEGRIDAD DE MENSAJES

Firma MAVLink v2 sin almacenar la clave en el agente

La estación terrestre crea una clave de 32 bytes y la almacena en el navegador como clave Web Crypto no extraíble. El endpoint de capacidades comprueba el firmware y la existencia de parámetros de firma. Tras una incorporación inicial única, el controlador de vuelo verifica la etiqueta HMAC-SHA256 de cada trama saliente. El agente sigue siendo un canal transparente y no guarda la clave de firma.

httpComprobación de capacidades
GET /api/mavlink/signing/capability
X-KairOS-Key: <your-key>

{
  "supported": true,
  "reason": "ok",
  "firmware_name": "ArduPilot",
  "firmware_version": "4.5.0",
  "signing_params_present": true
}
Interfaz prevista de KairOS: el comando solo será ejecutable cuando se publique el componente correspondiente.