CONCEITO E DESENVOLVIMENTODESPORTO NÃO TRIPULADO · #bezpiLOTa · KAIROS DRONE AGENTDocumentação
#bezpiLOTa→Drone Agent→API e SDK
KairOS / DRONE AGENT / 03

REST para integração, WebSocket MAVLink em bruto para dados em tempo real, tópicos MQTT versionados para retransmissão remota e SDK Python para controladores e extensões. Aqui estão definidos portas, endpoints, permissões e exemplos previstos da interface própria KairOS.

PREVISTO

API e SDK estão descritos como contrato previsto KairOS; a versão estável e a compatibilidade ainda não foram lançadas.

Repositório KairOS ↗
08endpoints REST principais
JSONrespostas REST
WSMAVLink em bruto
KEYautorização por permissões
01
REST API / :8080

Oito endpoints principais

A superfície de controlo escuta na porta 8080 e devolve JSON. A maioria dos pedidos requer o cabeçalho X-KairOS-Key. Cada chave tem um nível de permissões, permitindo separar leitura de telemetria, comandos de voo, carregamento de missões e operações administrativas.

MétodoEndpointDados ou ação
GET/api/statusSaúde, tempo ativo, ligação do FC, papel e versão do agente
GET/api/telemetryAtitude, GPS, bateria, canais RC e modo de voo
GET/api/paramsCache de parâmetros do FC com filtro por prefixo
POST/api/commandsDescolar, aterrar, ir para, RTL, armar e desarmar
GET/api/configConfiguração atual do agente em JSON
PUT/api/configAlteração de chaves e recarregamento em funcionamento dos serviços afetados
GET/api/servicesrunning, stopped ou failed para os serviços geridos
GET/api/logsEventos estruturados com filtros de serviço e nível
bashTelemetria por REST
curl -s http://<board-ip>:8080/api/telemetry \
  -H "X-KairOS-Key: <your-key>" | jq
Interface prevista KairOS: o comando só será executável após o lançamento do componente correspondente.
jsonExemplo de resposta 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
EXEMPLO DE CLIENTE

Ler telemetria e enviar comandos a partir de Python

pythonCliente previsto KairOS: apenas para simulador até à validação de voo
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}},
)
Interface prevista KairOS: o comando só será executável após o lançamento do componente correspondente.
03
PORTAS E TÓPICOS

Um fluxo MAVLink, vários transportes

InterfacePorta ou tópicoFinalidade
REST:8080Estado, telemetria, configuração, serviços e comandos
MAVLink WebSocket:8765MAVLink v2 binário bidirecional
WebRTC WHEP:8889Vídeo local
Estadokairos/v1/agents/{agent_id}/statusSaúde retida e disponibilidade do agente
Telemetriakairos/v1/agents/{agent_id}/telemetryFluxo de estado do veículo
Eventoskairos/v1/agents/{agent_id}/eventsEventos e avisos observáveis
Comandoskairos/v1/agents/{agent_id}/commandsComandos para o agente com QoS 1
ACKkairos/v1/agents/{agent_id}/acks/{command_id}Resultado de um comando concreto
Sinalização WebRTCkairos/v1/agents/{agent_id}/video/webrtc/offerOferta SDP para vídeo P2P

O encaminhador recebe um único fluxo do FC e distribui-o simultaneamente a vários consumidores: GCS no navegador por WebSocket 8765, SITL ou cliente de engenharia por TCP 5760 e ferramentas antigas por UDP 14550. O WebSocket não contém invólucro JSON: transmite tramas binárias MAVLink v2 compatíveis com o protocolo de transmissão.

javascriptWebSocket previsto 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));
Interface prevista KairOS: o comando só será executável após o lançamento do componente correspondente.
04
SDK PYTHON

Contratos para controladores e lógica a bordo

ClasseFinalidade
CameraDriverCâmaras CSI, USB UVC, IP e com SDK do fabricante
GimbalDriverRotação horizontal, inclinação, rolamento e telemetria do gimbal
LidarDriverDispositivos LiDAR e telémetros
GpsDriverRecetores GPS/GNSS
EscDriverControladores ESC e telemetria de retorno
VisionClientFotogramas e deteções do barramento de visão a bordo
05
SEGURANÇA

As permissões da chave API limitam o âmbito de atuação

NívelO que é permitido
readTelemetria, estado, configuração, registos e parâmetros sem alterar o estado
commandComandos de voo; inclui read
missionCarregamento e execução de ficheiros de missão; inclui command
configAlteração da configuração do agente e do FC; inclui read
adminAtualizações, reinício de serviços, gestão de chaves e acesso completo

A chave deve ser guardada como segredo e não colocada em registos públicos, capturas de ecrã ou pacote do cliente. Para integração no navegador, recomenda-se uma credencial de âmbito limitado e curta duração em vez de uma chave administrativa permanente.

Interface do assistente de IA MCP: análise dialogada da missão, mapa, telemetria, chamadas de ferramentas, registo de eventos e permissões de acesso.
INTERFACE / EXEMPLO VISUALContexto para comandos, acesso e auditoria

O painel de permissões e o registo de chamadas de ferramentas surgem junto à missão. A ilustração liga as permissões ao contexto do operador; os contratos API do KairOS são descritos no texto da página.

06
INTEGRIDADE DE MENSAGENS

Assinatura MAVLink v2 sem guardar a chave no agente

A estação terrestre cria uma chave de 32 bytes e guarda-a no navegador como chave Web Crypto não extraível. O endpoint de capacidades verifica o firmware e a existência dos parâmetros de assinatura. Após uma inscrição inicial única, o controlador de voo verifica a etiqueta HMAC-SHA256 de cada trama de saída. O agente mantém-se um canal transparente e não guarda a chave de assinatura.

httpVerificação 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
}
Interface prevista KairOS: o comando só será executável após o lançamento do componente correspondente.