DJI 无人机开发指南 — Part 2:开发环境、连接方式与基础调试
🛠️ 本章目标:带你从“未准备环境”走到“已能连通飞控并读到第一条数据”
💡 实操为主:机载电脑环境、SDK 安装、验证连接、串口/CAN/以太网、调试技巧
📅 最后更新:2025 年 11 月
📋 本章结构
-
- DJI 开发的三类典型架构(机载/移动端/云端)
-
- 开发环境建议配置(Jetson/NUC/工控机)
-
- 飞控连接方式详解(UART/CAN/ETH)与线序说明
-
- OSDK / MSDK / PSDK 的安装与初始化流程
-
- 第一条数据:基础连通性测试(状态读取、心跳、日志)
-
- 常见调试方法与故障排查
-
- 开发规范:日志、参数、固件、版本控制建议
1. DJI 开发的三类典型架构(理解后再操作)
在做任何环境搭建前,你应该知道 DJI 系统到底允许你在哪里运行代码,以及三者之间的关系。
1.1 机载架构(Onboard / OSDK)🚁💻
重点场景:SLAM、导航、深度学习检测、闭环控制
运行位置:Jetson / NUC / 工控机
链路:机载电脑 ↔ 飞控(UART/CAN/ETH)
[Jetson/NUC ROS2] <== OSDK ==> [DJI Flight Controller]
优点:低时延、可做闭环控制
缺点:接线复杂、权限严格、安全要求高
1.2 移动端架构(MSDK)📱
重点场景:App 监控、视频回传、航点上传
运行位置:Android / iOS
链路:手机 ↔ 遥控器 ↔ 飞控
[Android/iOS App] <== USB/WiFi ==> [DJI RC] ==> [Flight Controller]
优点:开发简单,易部署
缺点:无法实现复杂机载算法
1.3 云端/地面架构(Cloud API)☁️🖥️
重点场景:自动化调度、机群管理、大规模数据处理
链路:飞控 ↔ 遥控器 ↔ 网络 ↔ 云平台
[Cloud/Server ROS2] <== HTTPS/RTMP ==> [DJI Drone]
优点:集中算力、适合运维
缺点:时延高,不适合控制闭环
2. 开发环境建议配置(实战最常见)
2.1 推荐硬件(机载平台)
| 机载电脑 | 推荐系统 | 场景 |
|---|---|---|
| Jetson Orin Nano / NX | Ubuntu 20.04 / 22.04 | 视觉、路径规划、轻量深度学习 |
| Jetson Xavier NX | Ubuntu 18.04 / 20.04 | 大部分工业场景 |
| Intel NUC / 工控机 | Ubuntu 20.04 / 22.04 | 算力高、可扩展 |
2.2 必备外设
- USB-TTL/RS232 转接板(用于 UART)
- CAN 转 USB(若使用 CAN2.0)
- 千兆网线(M300RTK / M350RTK 可选 ETH)
- 高速 SD 卡(用于日志与缓存)
- 遥控器(用于调试与安全接管)
2.3 推荐软件栈
| 模块 | 推荐版本 | 说明 |
|---|---|---|
| Ubuntu | 20.04 或 22.04 | 最兼容 Jetson 与 ROS2 |
| ROS2 | Humble 或 Iron | OSDK-ROS2 官方支持良好 |
| gcc/g++ | ≥ 9 | 编译 OSDK |
| Python | 3.8–3.10 | 工具脚本与 MSDK DEMO |
| cmake | ≥ 3.14 | 构建依赖 |
3. 飞控连接方式详解(重点)
DJI 支持多种连接方式,不同机型差异很大。本章列出现实中最常用的三种。
3.1 UART(串口)📡 — OSDK 最常用
适用机型
- M210/M300/M350
- Matrice 系列
- 部分 A3/N3 飞控
典型接线
TX (flight) → RX (Jetson)
RX (flight) → TX (Jetson)
GND ↔ GND
5V(可选,部分机型供电)
串口参数
- 波特率:230400(常见默认)
- 校验:None
- 停止位:1
3.2 CAN(高速稳定)🟦
常用于工业场景。有些型号的飞控数据通过 CAN-FD 发送。
优点:抗干扰强
缺点:需要 CAN 收发器与驱动
3.3 ETH / OSDK over Network 🌐
部分新机型(如 M300/M350 RTK)支持以太网连接飞控与机载电脑。
优点:带宽大,可传视频
缺点:配置复杂,需官方镜像或 API 支持
4. SDK 安装与初始化(最关键部分)
4.1 OSDK(机载)安装流程(推荐 ROS2)
step 1 — 克隆仓库
git clone https://github.com/dji-sdk/Onboard-SDK.git
cd Onboard-SDK
step 2 — 编译
mkdir build && cd build
cmake ..
make -j4
sudo make install
step 3 — 配置串口权限
sudo usermod -a -G dialout $USER
sudo chmod 666 /dev/ttyUSB0
4.2 ROS2 集成(OSDK-ROS2)
sudo apt install ros-humble-dji-osdk-ros
启动 SDK:
ros2 launch dji_osdk_ros dji_sdk.launch.py
4.3 MSDK(移动端)快速开始
- Android Studio 创建项目
- 导入 DJI MSDK AAR
- 在
AndroidManifest.xml填入 App Key - 初始化 SDK:
DJISDKManager.getInstance().registerApp(this, callback);
4.4 PSDK(负载)基本流程
- 获取 PSDK 许可
- 安装 Payload SDK
- 用 USB-C 与 Zenmuse 接口连接机体
- 编写负载应用(如工业相机控制)
5. 第一条数据:最小连通测试(从 0 到 1)
为了确保你真的连上无人机,本节给出跨平台统一的最小检测方法。
5.1 OSDK 原生 C++ 测试(读取飞行器版本)
auto version = vehicle->getFwVersion();
std::cout << "FW version: " << version << std::endl;
5.2 ROS2 版本(订阅飞行状态)
ros2 topic echo /dji_osdk_ros/flight_status
5.3 检查飞控心跳(确认链路正常)
ros2 topic hz /dji_osdk_ros/time_sync
期望:10Hz 或更高
若无输出 → 链路不通
6. 常见调试方法与故障排查(实战经验)
🔍 无数据输出
- 检查串口权限
- 查看线序是否反接(TX↔RX)
- 波特率是否正确
- 飞控是否处于运行状态
🔍 ROS 话题没有频率
- OSDK 未获得控制权
- 未启动广播/订阅服务
- 固件版本不兼容
🔍 MSDK 无法注册
- App Key 填错
- 没有连遥控器
- 手机 USB/权限被禁止
🔍 视频流卡顿
- 降低码率
- 检查链路带宽
- Jetson 进行硬件编解码加速(GStreamer + NvMedia)
7. 开发规范:避免踩坑的最佳实践
7.1 固件管理
- 在生产中保持固件冻结策略
- 升级流程必须可回滚
- 所有测试前记录固件版本
7.2 参数管理
- 用 YAML/JSON 管理飞行参数
- 使用 Git 管控(版本化)
7.3 日志管理
- 每次飞行保存:OSDK 日志 + ROS bag + 飞控 log
- 定期清理机载电脑存储
7.4 安全与权限
- 控制权必须手动启用/释放
- 飞控状态必须可监控(低电量/RTK 失锁)
- 需保留“随时接管”的遥控器操作员
本章总结(你已经完成 DJI 开发的第一步!)
✔️ 知道 DJI 三种开发架构
✔️ 能搭建机载电脑环境
✔️ 能连接飞控(UART/CAN/ETH)
✔️ 能安装各 SDK(OSDK/MSDK/PSDK)
✔️ 已成功读取飞行器第一条状态数据
🎉祝你天天开心,我将更新更多有意思的内容,欢迎关注!
最后更新:2025年11月
作者:Echo

2347

被折叠的 条评论
为什么被折叠?



