树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南
本教程基于 Raspberry Pi 4B 与大疆 M300 RTK 无人机的 Payload SDK (PSDK) 集成实践。不同型号间存在细节差异,若使用其他开发板或机型,请务必查阅官方文档确认兼容性。
1. 硬件准备
1.1 设备选型
M300 RTK 顶部有三个主要接口:OSDK 端口、云台口(Payload SDK Port)和 Type-C 调参口。其中 OSDK 和云台口支持运行 PSDK 程序,Type-C 口用于固件升级与日志导出。
核心组件:
- 无人机:M300 RTK
- 开发板:Raspberry Pi 4B
- 扩展套件:E-Port 开发者套件(含同轴线、XT30 转 TypeC 线等)
- 调试工具:USB-TTL 模块(建议 CH340),部分树莓派串口性能有限,外接模块更稳定
注意: E-Port 开发板左侧开关靠近接口侧为 OFF,右侧 USB 主/从切换靠近接口侧为 HOST。连接时务必将开发板拨至 DEVICE 模式,无人机作为 Host 端。
1.2 物理连接
连线逻辑是通信的基础,请仔细核对引脚定义。
- UART 通信:树莓派通过 USB-TTL 连接 E-Port 的 UART 口。RX 接 TX,TX 接 RX,GND 共地。此通道用于低速控制指令传输。
- 电源供电:使用 XT30 转 TypeC 线连接 E-Port 的 5V/2A 输出口与树莓派的 TypeC 电源口,确保供电稳定。
- 高速数据:使用 TypeA-TypeC 数据线连接 E-Port 的 USB2.0 口与树莓派的 USB2.0 口,用于 Bulk 数据传输。
- 信号链路:E-Port 同轴线的 A 标识端插入无人机 OSDK 端口,TypeC 端插入 E-Port 的 E-Port 接口(B 标识朝上)。
完成接线后,启动无人机并将 E-Port 开关拨至 ON,指示灯亮起绿光即表示硬件链路初步连通。
2. 软件环境搭建
2.1 系统安装与依赖
推荐使用 Raspberry Pi OS (64-bit)。烧录完成后,需安装一系列底层库以支持 SDK 运行。
sudo apt-get update
sudo apt-get install libusb-1.0-0-dev
OpenCV 版本建议锁定在 3.4.15,过高版本可能导致编译错误。若遇到 persistence_base64.cpp 语法报错,需手动修改源码第 167 行,将指针比较逻辑修正。
sudo apt install libgtk2.0-dev pkg-config
unzip opencv-3.4.15.zip
cd opencv-3.4.15/
mkdir build && cd build
cmake ../
make -j4
sudo make install
此外还需安装 FFmpeg、Opus、libaio 及 GCC 工具链。由于镜像源速度问题,建议提前配置国内镜像加速。
2.2 USB Gadget 配置
Linux 下启用 USB Device 功能需要加载 dwc2 驱动并配置 Gadget。这一步是让树莓派伪装成 USB 设备的关键。
修改 /boot/firmware/config.txt 末尾添加:
dtoverlay=dwc2
*注意:保留原有的 dtoverlay=vc4-kms-v3d,否则图形界面无法启动。
修改 /boot/firmware/cmdline.txt,在 rootwait 后追加:
modules-load=dwc2
在 /etc/modules 末尾添加:
libcomposite
重启后,需重新编译 start_bulk 程序。若编译报错提示 htole32 未定义,需编写 fix_endian.h 头文件进行兼容替换,然后重新执行 make clean && make。
2.3 脚本自启动
为避免每次开机重复配置,建议将 USB 初始化脚本注册为 systemd 服务。
创建服务文件 /etc/systemd/system/bulk-gadget.service,内容如下:
[Unit]
Description=Start PSDK USB bulk gadget
After=sysinit.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/pi/program/start_bulk/raspi-usb-device-start.sh
StandardOutput=journal
StandardError=journal
User=root
[Install]
WantedBy=sysinit.target
激活服务并重启:
sudo systemctl enable bulk-gadget
sudo reboot
验证时可通过 lsusb 查看是否出现 ID 为 2ca3:f001 的设备,或通过 ps -ef | grep startup_bulk 确认进程存活。
3. PSDK 集成与运行
3.1 应用注册
前往大疆开发者网站注册账号并创建应用。获取 AppID、AppKey 和 License。注意应用名称不宜过长,超过一定字符数会导致启动报错,建议控制在四个字以内。
3.2 配置文件修改
进入解压后的 SDK 目录,定位到 C++ 示例路径 samples/sample_c++/platform/linux/manifold2/application/。
-
用户信息:修改
dji_sdk_app_info.h,填入刚才获取的应用凭证。#define USER_APP_NAME "your_app_name" #define USER_APP_ID "your_app_id" // ... 其他字段 #define USER_BAUD_RATE "921600"波特率统一设为 921600 即可适配多数机型。
-
连接模式:修改
dji_sdk_config.h,M300 仅支持 UART 或 UART+Bulk 模式。#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_USB_BULK_DEVICE -
端口映射:修改
hal_uart.h和hal_usb_bulk.h,根据实际设备节点调整路径。#define LINUX_UART_DEV1 "/dev/ttyUSB0" #define LINUX_UART_DEV2 "/dev/ttyACM0" #define LINUX_USB_VID (0x2CA3) #define LINUX_USB_PID (0xF001)*提示:VID/PID 值需在 Ubuntu 虚拟机中通过
lsusb -d 2ca3:f001 -v确认,确保与脚本生成的一致。
3.3 编译与测试
修改根目录下的 CMakeLists.txt,确保包含 Linux Manifold2 子目录:
if (USE_SYSTEM_ARCH MATCHES LINUX)
add_definitions(-DSYSTEM_ARCH_LINUX)
add_subdirectory(samples/sample_c/platform/linux/manifold2)
add_subdirectory(samples/sample_c++/platform/linux/manifold2)
endif
执行编译:
cd Payload-SDK/
mkdir build && cd build
cmake ../
make -j4
运行演示程序:
sudo ./dji_sdk_demo_linux_cxx
成功启动后,终端会显示可用命令列表。此时可尝试订阅飞行数据或控制云台。若看到 gimbal init error: 0x000000E0 属于正常现象,因 M300 OSDK 接口对云台功能有部分限制,不影响基础通信。
4. 常见问题排查
- 串口 CRC 错误:若出现大量警告,检查 USB-TTL 线材质量或更换高性能模块。
- 连接超时:提示
DjiAccessAdapter_IsUartConnect returnCode=236时,检查负载端串口是否开启,E-Port 开关是否在 DEVICE 位。 - 码流无法订阅:高版本 PSDK 可能存在兼容性问题,若无法弹出视频窗口,建议降级至 PSDK 3.11.0 版本。
- 模拟测试:飞行控制逻辑建议先通过 DJI Assistant 2 Enterprise Series 模拟器进行验证,避免直接实飞风险。
注:本文档基于实战经验整理,具体参数请以最新官方文档为准。

