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 ↗এই পৃষ্ঠায় +
আটটি প্রধান endpoints
Control interface port 8080-এ শোনে এবং JSON ফেরত দেয়। অধিকাংশ requests-এ X-KairOS-Key header লাগে। প্রতিটি key-এর permission level থাকায় telemetry reading-কে flight commands, mission upload ও administrative operations থেকে আলাদা করা যায়।
| Method | Endpoint | Data বা action |
|---|---|---|
| GET | /api/status | Health, uptime, FC connection, role, agent version |
| GET | /api/telemetry | Attitude, GPS, battery, RC channels ও flight mode |
| GET | /api/params | Prefix filter-সহ FC parameter cache |
| POST | /api/commands | Takeoff, land, goto, RTL, arm ও disarm |
| GET | /api/config | JSON হিসেবে agent-এর বর্তমান configuration |
| PUT | /api/config | Keys পরিবর্তন ও প্রভাবিত services-এর hot reload |
| GET | /api/services | নিয়ন্ত্রিত services-এর running, stopped বা failed অবস্থা |
| GET | /api/logs | Service ও level filters-সহ structured events |
curl -s http://<board-ip>:8080/api/telemetry \
-H "X-KairOS-Key: <your-key>" | jq{
"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 }
}Python থেকে telemetry পড়া ও command পাঠানো
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}},
)একটি MAVLink stream, একাধিক transports
| Interface | Port বা topic | উদ্দেশ্য |
|---|---|---|
| REST | :8080 | Status, telemetry, config, services, commands |
| MAVLink WebSocket | :8765 | দুই দিকে binary MAVLink v2 |
| WebRTC WHEP | :8889 | স্থানীয় ভিডিও |
| অবস্থা | kairos/v1/agents/{agent_id}/status | Retained health ও agent availability |
| টেলিমেট্রি | kairos/v1/agents/{agent_id}/telemetry | যানের state stream |
| ঘটনা | kairos/v1/agents/{agent_id}/events | দৃশ্যমান events ও warnings |
| নির্দেশ | kairos/v1/agents/{agent_id}/commands | QoS 1 দিয়ে agent-কে commands |
| ACK | kairos/v1/agents/{agent_id}/acks/{command_id} | নির্দিষ্ট command-এর ফল |
| WebRTC signaling | kairos/v1/agents/{agent_id}/video/webrtc/offer | P2P ভিডিওর 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 পাঠানো হয়।
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));Drivers ও on-vehicle logic-এর contracts
| Class | উদ্দেশ্য |
|---|---|
| CameraDriver | CSI, USB UVC, IP ও vendor SDK cameras |
| GimbalDriver | Pan, tilt, roll ও gimbal telemetry |
| LidarDriver | LiDAR ও rangefinder devices |
| GpsDriver | GPS/GNSS receivers |
| EscDriver | ESC drivers ও return telemetry |
| VisionClient | On-vehicle vision bus থেকে frames ও detections |
API key permissions কার্যপরিসর সীমিত করে
| স্তর | কী অনুমোদিত |
|---|---|
| read | State না বদলে telemetry, status, config, logs, params |
| command | Flight commands; read অন্তর্ভুক্ত |
| mission | Mission files upload ও execution; command অন্তর্ভুক্ত |
| config | Agent ও FC configuration পরিবর্তন; read অন্তর্ভুক্ত |
| admin | Updates, service restart, key management এবং full access |
Key secret হিসেবে রাখুন; public logs, screenshots বা client bundle-এ দেবেন না। Browser integration-এ permanent admin key-এর বদলে short-lived scoped credential সুপারিশ করা হয়।
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 সংরক্ষণ করে না।
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
}