dji_simulator/PROJECT.md

96 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

2. 技术方案书
以下是为您规划的 《DJI Cloud API 设备模拟器技术实施方案》。
2.1 系统架构设计
系统采用 C/S 架构 或 B/S 架构 均可。考虑到您要求“简单的图形化界面”且需要模拟硬件底层通信Python + Qt (PySide6) 是开发成本最低且性能最好的选择(也可选 Electron + Node.js
模拟器端 (Device Simulator): 扮演“网关”角色,模拟 Aircraft (无人机) 和 Dock (机场) 的行为。
通信层: 封装 MQTT Client负责与您的云平台 Broker 建立长连接。
业务层: 包含设备状态机、航线执行引擎、媒体上报模块。
2.2 功能模块规划
我们将模拟器分为四个核心模块:
1. 连接与鉴权模块 (Connection Manager)
功能: 输入设备SN、Secret、云平台地址IP/Port实现MQTT登录。
模拟对象: 支持配置为“直连设备”如M30/M3E系列通过遥控器上云或“网关子设备”如Dock 2 + M3D无人机
心跳机制: 自动发送 Ping 包,维持在线状态。
2. 物模型引擎 (Thing Model Engine) 这是模拟器的核心,用于生成符合文档的数据:
OSD 发生器 (1Hz):
模拟经纬度支持在地图上画点或加载GPX路径让飞机“动”起来
模拟姿态角Pitch/Roll/Yaw
模拟电池信息(电量随飞行时间线性递减)。
State 上报 (事件驱动):
当设备状态变化时(如从 Idle -> TakingOff立即推送 State Topic。
模拟 Dock 2 的舱盖状态、急停按钮状态、雨量传感器报警等。
3. 指令响应系统 (Service Handler) 完全模拟真实设备的指令闭环:
航线下发: 接收云端 flighttask_prepare 指令,校验参数,回复 result: 0 (成功)。
任务执行: 收到 flighttask_execute 后,开启内部定时器,按航线坐标更新 OSD 位置,模拟飞行过程。
云台控制: 接收 live_control 指令,改变模拟摄像头的朝向数据。
4. 媒体交互模拟 (Media Mock)
功能: 模拟无人机拍摄照片/视频并上传。
流程:
接收云端“媒体上传”指令或航线结束自动触发。
模拟器读取本地一张静态图片(如一张风景图)。
请求云端获取对象存储OSS/S3的临时凭证STS
通过 HTTPS PUT 方法将图片上传到云平台指定的 URL。
向云端汇报“上传完成”。
2.3 界面设计 (GUI Mockup)
界面应包含三个主要区域:
左侧:设备列表与配置
显示当前模拟的 Dock 2 和 无人机 SN。
连接状态指示灯(在线/离线)。
配置面板:输入 MQTT 地址、AppID、AppKey。
中间:状态可视化与地图
地图组件: 显示无人机当前位置图标、模拟的飞行轨迹。
仪表盘: 显示高度、速度、电量、卫星数。
Dock状态: 图形化显示舱盖(开/关)、推杆位置、充电状态。
右侧:调试与日志
控制面板: 提供滑块手动调节“电量”、“信号强度”;提供按钮触发“任务结束”、“返航”、“遭遇障碍物”等事件。
通信日志: 实时滚动显示发送和接收的 MQTT JSON 报文(方便您调试平台端解析逻辑)。
2.4 技术栈推荐
编程语言: Python 3.10+ (开发效率高适合处理JSON和网络IO)。
GUI 框架: PySide6 (Qt for Python) - 界面美观,支持多线程(防界面卡顿)。
网络库: paho-mqtt (处理MQTT 5.0), requests (处理HTTPS上传)。
地图组件: PyQtWebEngine 加载 Leaflet 或 高德地图 Web API。