ধারণা ও উন্নয়নমানববিহীন ক্রীড়া · #bezpiLOTa · KAIROS DRONE AGENTনথিপত্র
#bezpiLOTa→Drone Agent→API & SDK
KairOS / DRONE AGENT / 03

Integration-এর জন্য REST, real-time data-এর raw MAVLink WebSocket, remote relay-এর versioned MQTT topics এবং drivers ও extensions-এর Python SDK। এখানে KairOS-এর নিজস্ব interface-এর লক্ষ্য ports, endpoints, permissions ও examples নির্ধারিত।

পরিকল্পিত

API ও SDK KairOS-এর লক্ষ্য contract হিসেবে বর্ণিত; stable version ও compatibility এখনও release হয়নি।

KairOS repository ↗
08প্রধান REST endpoints
JSONREST responses
WSRaw MAVLink
KEYPermission authentication
01
REST API / :8080

আটটি প্রধান endpoints

Control interface port 8080-এ শোনে এবং JSON ফেরত দেয়। অধিকাংশ requests-এ X-KairOS-Key header লাগে। প্রতিটি key-এর permission level থাকায় telemetry reading-কে flight commands, mission upload ও administrative operations থেকে আলাদা করা যায়।

MethodEndpointData বা action
GET/api/statusHealth, uptime, FC connection, role, agent version
GET/api/telemetryAttitude, GPS, battery, RC channels ও flight mode
GET/api/paramsPrefix filter-সহ FC parameter cache
POST/api/commandsTakeoff, land, goto, RTL, arm ও disarm
GET/api/configJSON হিসেবে agent-এর বর্তমান configuration
PUT/api/configKeys পরিবর্তন ও প্রভাবিত services-এর hot reload
GET/api/servicesনিয়ন্ত্রিত services-এর running, stopped বা failed অবস্থা
GET/api/logsService ও level filters-সহ structured events
bashREST দিয়ে telemetry
curl -s http://<board-ip>:8080/api/telemetry \
  -H "X-KairOS-Key: <your-key>" | jq
KairOS-এর লক্ষ্য interface: সংশ্লিষ্ট component release হওয়ার পরেই command চালানো যাবে।
jsonJSON response উদাহরণ
{
  "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
Client উদাহরণ

Python থেকে telemetry পড়া ও command পাঠানো

pythonলক্ষ্য KairOS client — flight validation পর্যন্ত শুধু simulator-এর জন্য
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}},
)
KairOS-এর লক্ষ্য interface: সংশ্লিষ্ট component release হওয়ার পরেই command চালানো যাবে।
03
Ports ও topics

একটি MAVLink stream, একাধিক transports

InterfacePort বা topicউদ্দেশ্য
REST:8080Status, telemetry, config, services, commands
MAVLink WebSocket:8765দুই দিকে binary MAVLink v2
WebRTC WHEP:8889স্থানীয় ভিডিও
অবস্থাkairos/v1/agents/{agent_id}/statusRetained health ও agent availability
টেলিমেট্রিkairos/v1/agents/{agent_id}/telemetryযানের state stream
ঘটনাkairos/v1/agents/{agent_id}/eventsদৃশ্যমান events ও warnings
নির্দেশkairos/v1/agents/{agent_id}/commandsQoS 1 দিয়ে agent-কে commands
ACKkairos/v1/agents/{agent_id}/acks/{command_id}নির্দিষ্ট command-এর ফল
WebRTC signalingkairos/v1/agents/{agent_id}/video/webrtc/offerP2P ভিডিওর SDP offer

Router FC-এর একটি stream একই সঙ্গে একাধিক consumers-এ দেয়: WebSocket 8765 দিয়ে browser GCS, TCP 5760 দিয়ে SITL/engineering client এবং UDP 14550 দিয়ে legacy tools। WebSocket-এ JSON wrapper নেই: wire-compatible binary MAVLink v2 frames পাঠানো হয়।

javascriptলক্ষ্য KairOS Browser WebSocket
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));
KairOS-এর লক্ষ্য interface: সংশ্লিষ্ট component release হওয়ার পরেই command চালানো যাবে।
04
PYTHON SDK

Drivers ও on-vehicle logic-এর contracts

Classউদ্দেশ্য
CameraDriverCSI, USB UVC, IP ও vendor SDK cameras
GimbalDriverPan, tilt, roll ও gimbal telemetry
LidarDriverLiDAR ও rangefinder devices
GpsDriverGPS/GNSS receivers
EscDriverESC drivers ও return telemetry
VisionClientOn-vehicle vision bus থেকে frames ও detections
05
নিরাপত্তা

API key permissions কার্যপরিসর সীমিত করে

স্তরকী অনুমোদিত
readState না বদলে telemetry, status, config, logs, params
commandFlight commands; read অন্তর্ভুক্ত
missionMission files upload ও execution; command অন্তর্ভুক্ত
configAgent ও FC configuration পরিবর্তন; read অন্তর্ভুক্ত
adminUpdates, service restart, key management এবং full access

Key secret হিসেবে রাখুন; public logs, screenshots বা client bundle-এ দেবেন না। Browser integration-এ permanent admin key-এর বদলে short-lived scoped credential সুপারিশ করা হয়।

MCP AI assistant interface: কথোপকথনে mission analysis, map, telemetry, tool calls, event log ও permissions।
INTERFACE / দৃশ্যমান উদাহরণCommands, access ও audit context

Permission panel ও tool-call log mission-এর পাশে দেখানো। চিত্র permissions-কে operator context-এর সঙ্গে যুক্ত করে; KairOS API contracts পৃষ্ঠার text-এ আছে।

06
Message integrity

Agent-এ key না রেখে MAVLink v2 signing

Ground station 32-byte key বানিয়ে browser-এ non-extractable Web Crypto key হিসেবে রাখে। Capability endpoint firmware ও signing parameters-এর উপস্থিতি যাচাই করে। একবার enrollment-এর পরে flight controller প্রতিটি outbound frame-এর HMAC-SHA256 tag পরীক্ষা করে। Agent transparent pipe থাকে এবং signing key সংরক্ষণ করে না।

httpCapability পরীক্ষা
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
}
KairOS-এর লক্ষ্য interface: সংশ্লিষ্ট component release হওয়ার পরেই command চালানো যাবে।