التصور والتطويررياضة الأنظمة غير المأهولة · #bezpiLOTa · KAIROS DRONE AGENTالوثائق
#bezpiLOTa→Drone Agent→API وSDK
KairOS / DRONE AGENT / 03

منظومة REST للتكامل، وMAVLink WebSocket خام للبيانات الآنية، وموضوعات MQTT ذات إصدارات للترحيل البعيد، وPython SDK لبرامج التشغيل والتوسعات. يحدد هذا القسم المنافذ ونقاط النهاية والصلاحيات والأمثلة المستهدفة لواجهة KairOS الخاصة.

مخطط له

وُصفت API وSDK بوصفهما مواصفات KairOS المستهدفة؛ ولم يُصدر بعد إصدار مستقر أو ضمان توافق.

مستودع KairOS ↗
08نقاط نهاية REST رئيسية
JSONاستجابات REST
WSMAVLink خام
KEYمصادقة بالصلاحيات
01
REST API / :8080

ثماني نقاط نهاية رئيسية

تستمع واجهة التحكم على المنفذ 8080 وتعيد JSON. تتطلب معظم الطلبات ترويسة X-KairOS-Key. لكل مفتاح مستوى صلاحيات، مما يتيح فصل قراءة القياس عن بُعد عن أوامر الطيران وتحميل المهمات والعمليات الإدارية.

الطريقةنقطة النهايةالبيانات أو الإجراء
GET/api/statusالصحة ومدة التشغيل واتصال FC والدور وإصدار الوكيل
GET/api/telemetryالاتجاه وGPS والبطارية وقنوات RC ووضع الطيران
GET/api/paramsذاكرة معلمات FC المؤقتة مع تصفية بالبادئة
POST/api/commandsالإقلاع والهبوط والانتقال والعودة RTL والتسليح وإلغاء التسليح
GET/api/configإعدادات الوكيل الحالية بصيغة JSON
PUT/api/configتغيير المفاتيح وإعادة التحميل الفوري للخدمات المتأثرة
GET/api/servicesrunning أو stopped أو failed للخدمات المُدارة
GET/api/logsأحداث منظمة مع مرشحي service وlevel
bashالقياس عن بُعد عبر REST
curl -s http://<board-ip>:8080/api/telemetry \
  -H "X-KairOS-Key: <your-key>" | jq
واجهة KairOS المستهدفة: لا يصبح الأمر قابلًا للتنفيذ إلا بعد إصدار المكوّن المعني.
jsonمثال استجابة 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
مثال للعميل

قراءة القياس عن بُعد وإرسال أمر من Python

pythonعميل KairOS المستهدف — للمحاكي فقط إلى حين التحقق بالطيران
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 المستهدفة: لا يصبح الأمر قابلًا للتنفيذ إلا بعد إصدار المكوّن المعني.
03
المنافذ والموضوعات

تدفق MAVLink واحد، ووسائط نقل متعددة

الواجهةالمنفذ أو الموضوعالغرض
REST:8080الحالة والقياس عن بُعد والإعدادات والخدمات والأوامر
MAVLink WebSocket:8765MAVLink v2 ثنائي في الاتجاهين
WebRTC WHEP:8889الفيديو المحلي
الحالةkairos/v1/agents/{agent_id}/statusحالة صحة محتفظ بها وتوفر الوكيل
القياس عن بُعدkairos/v1/agents/{agent_id}/telemetryتدفق حالة المركبة
الأحداثkairos/v1/agents/{agent_id}/eventsأحداث وتحذيرات قابلة للمراقبة
الأوامرkairos/v1/agents/{agent_id}/commandsأوامر إلى الوكيل بمستوى QoS 1
ACKkairos/v1/agents/{agent_id}/acks/{command_id}نتيجة أمر محدد
إشارات WebRTCkairos/v1/agents/{agent_id}/video/webrtc/offerعرض SDP لفيديو P2P

يستقبل الموجّه تدفقًا واحدًا من FC ويوزعه على عدة مستهلكين بالتزامن: محطة GCS في المتصفح عبر WebSocket 8765، وSITL أو عميل هندسي عبر TCP 5760، والأدوات القديمة عبر UDP 14550. لا يوجد غلاف JSON في WebSocket؛ بل تُنقل إطارات MAVLink v2 ثنائية متوافقة مع تنسيق النقل الأصلي.

javascriptWebSocket المستهدف لمتصفح KairOS
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 المستهدفة: لا يصبح الأمر قابلًا للتنفيذ إلا بعد إصدار المكوّن المعني.
04
PYTHON SDK

عقود برمجية لبرامج التشغيل والمنطق على متن المركبة

الصنفالغرض
CameraDriverكاميرات CSI وUSB UVC وIP وكاميرات SDK الخاصة بالمصنّع
GimbalDriverالتحريك الأفقي والميل والدوران وقياس حامل الكاميرا عن بُعد
LidarDriverأجهزة LiDAR ومحددات المدى
GpsDriverمستقبلات GPS/GNSS
EscDriverبرامج تشغيل ESC والقياس الراجع عن بُعد
VisionClientالإطارات ونتائج الكشف من ناقل الرؤية على المركبة
05
الأمان

تحدد صلاحيات مفتاح API نطاق العمل

المستوىالمسموح
readالقياس عن بُعد والحالة والإعدادات والسجلات والمعلمات دون تغيير الحالة
commandأوامر الطيران؛ وتشمل read
missionتحميل ملفات المهمات وتنفيذها؛ وتشمل command
configتغيير إعدادات الوكيل وFC؛ وتشمل read
adminالتحديثات وإعادة تشغيل الخدمات وإدارة المفاتيح والوصول الكامل

يجب حفظ المفتاح بوصفه سرًا وعدم إدراجه في السجلات العامة أو لقطات الشاشة أو حزمة العميل. يُنصح في تكامل المتصفح ببيانات اعتماد قصيرة العمر ومحددة النطاق، بدلًا من مفتاح admin دائم.

واجهة مساعد الذكاء الاصطناعي MCP: تحليل المهمة في الحوار والخريطة والقياس عن بُعد واستدعاءات الأدوات وسجل الأحداث وصلاحيات الوصول.
الواجهة / مثال مرئيسياق الأوامر والوصول والتدقيق

تظهر لوحة الصلاحيات وسجل استدعاءات الأدوات بجانب المهمة. يربط الرسم موضوع الصلاحيات بسياق المشغّل؛ وتُوصف عقود API الخاصة بـKairOS في نص الصفحة.

06
سلامة الرسائل

توقيع MAVLink v2 دون تخزين المفتاح على الوكيل

تنشئ المحطة الأرضية مفتاحًا بطول 32 بايت وتحفظه في المتصفح كمفتاح Web Crypto غير قابل للاستخراج. تتحقق نقطة نهاية القدرات من البرنامج الثابت ووجود معلمات التوقيع. بعد التسجيل لمرة واحدة، تتحقق وحدة التحكم بالطيران من وسم HMAC‑SHA256 لكل إطار صادر. يظل الوكيل قناة شفافة ولا يحفظ مفتاح التوقيع.

httpالتحقق من القدرات
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 المستهدفة: لا يصبح الأمر قابلًا للتنفيذ إلا بعد إصدار المكوّن المعني.