96 lines
3.4 KiB
Markdown
96 lines
3.4 KiB
Markdown
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。 |