dji_simulator/PROJECT.md

3.4 KiB
Raw Blame History

  1. 技术方案书 以下是为您规划的 《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 包,维持在线状态。

  1. 物模型引擎 (Thing Model Engine) 这是模拟器的核心,用于生成符合文档的数据:

OSD 发生器 (1Hz):

模拟经纬度支持在地图上画点或加载GPX路径让飞机“动”起来

模拟姿态角Pitch/Roll/Yaw

模拟电池信息(电量随飞行时间线性递减)。

State 上报 (事件驱动):

当设备状态变化时(如从 Idle -> TakingOff立即推送 State Topic。

模拟 Dock 2 的舱盖状态、急停按钮状态、雨量传感器报警等。

  1. 指令响应系统 (Service Handler) 完全模拟真实设备的指令闭环:

航线下发: 接收云端 flighttask_prepare 指令,校验参数,回复 result: 0 (成功)。

任务执行: 收到 flighttask_execute 后,开启内部定时器,按航线坐标更新 OSD 位置,模拟飞行过程。

云台控制: 接收 live_control 指令,改变模拟摄像头的朝向数据。

  1. 媒体交互模拟 (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。