跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南

综述由AI生成档详细记录了树莓派 4B 通过 E-Port 套件与大疆 M300 RTK 无人机进行 PSDK 开发的完整流程。涵盖硬件选型与接线规范、Linux 环境配置(libusb、OpenCV、FFmpeg)、USB Gadget 模式开启及 bulk 传输脚本编写。重点解决了 PSdk 3.11.0 版本下的相机码流订阅问题及串口波特率配置,提供了从系统烧录到代码编译运行的实操步骤,并附带常见错误排查方案。

未来可期发布于 2026/4/10更新于 2026/5/2127 浏览
树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南

树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南

本教程基于树莓派 4B 与大疆 M300 RTK 无人机的 Payload SDK (PSDK) 对接。不同型号间存在细节差异,具体配置请以官方文档为准。

1. 硬件准备

1.1 硬件选型

  • 无人机:M300 RTK。顶部接口中,OSDK 端口和云台口(Payload SDK Port)可用于运行 PSDK 程序;TypeC 调参口用于连接电脑进行固件升级或日志导出。
  • 开发板:Raspberry Pi 4B。
  • 开发套件:E-Port 开发者套件。
    • 注意左侧开关靠近接口侧为 OFF,反之为 ON;右侧 USB 主/从切换,靠近接口侧为 HOST,反之为 DEVICE。
  • 辅助工具:
    • USB-TTL 模块(CH340):部分树莓派串口性能有限,建议外接。
    • XT30 转 TypeC 线:用于 E-Port 供电。
    • TypeA-TypeC 数据线:需支持数据传输。
    • E-Port 同轴线:套件配套。

![硬件接口示意图]

接口编号功能描述
25调参接口
26OSDK 接口
27PSDK 接口

1.2 硬件连接

  1. USB-TTL 连接:树莓派 USB3.0 接 USB-TTL TypeA 端;E-Port 端 RX 接 TX、TX 接 RX、GND 接 GND,用于 UART 低速数据传输。
  2. 同轴线连接:TypeC 端插入 E-Port 的 E-Port 接口(B 标识朝上),另一端 A 标识插入无人机 OSDK 端口。注意 M300 需将 E-Port 拨码开关设为 Device 模式,飞机作为 Host 设备。
  3. Bulk 数据传输:使用 TypeA-TypeC 数据线连接树莓派 USB2.0 与 E-Port USB2.0 接口,用于高速数据流传输。
  4. 供电连接:XT30 转 TypeC 线连接 E-Port 5V/2A 输出与树莓派 TypeC 电源口。

启动无人机后,若开发板指示灯亮绿光,说明物理连接正常。后续将通过软件验证链路连通性。

2. 软件环境配置

2.1 基础环境

推荐使用 Raspberry Pi OS (64-bit)。需安装以下依赖:

sudo apt-get install libusb-1.0-0-dev

OpenCV 3.4.15:

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

注意:若 GCC 版本过高导致编译报错,需修改 modules/core/src/persistence_base64.cpp 第 167 行,将指针比较逻辑调整为兼容写法。

FFmpeg 4.3 & Opus 1.3.1:

tar -zxvf ffmpeg-4.3.2.tar.gz
./configure --enable-shared
make -j4
sudo make install

tar -xzvf opus-1.3.1.tar.gz
cd opus-1.3.1/
autoreconf -f -i
./configure
make -j4
sudo make install

其他依赖:

sudo apt-get install automake libaio-dev gcc g++ cmake
sudo apt-get update && sudo apt-get upgrade

2.2 开启树莓派 USB Gadget 能力

Linux 下需启用 UDC 功能使树莓派充当 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 头文件并替换源码中的宏。

cd usb-bulk-configuration-reference
make clean
make

解压官方包后执行上述命令生成可执行文件。

编写启动脚本: 创建 raspi-usb-device-start.sh 配置 Gadget。重点在于设置 enable_bulk=1,并正确挂载 functionfs。

#!/bin/bash
net_ip=192.168.42.120
net_mask=255.255.0.0
enable_vcom=0
enable_rndis=0
enable_bulk=1
startup_bulk_dir=$(dirname "$0")
startup_bulk_exe=${startup_bulk_dir}/startup_bulk

if [ ! -d /sys/kernel/config/usb_gadget ]; then
    # 自动检测并修复配置文件
    if ! $(grep -q dtoverlay=dwc2 /boot/firmware/config.txt); then
        echo "dtoverlay=dwc2" >> /boot/firmware/config.txt
        init 6
    fi
    # ... 省略部分自动配置逻辑 ...
fi

modprobe g_ether
rmmod g_ether
sleep 1

# 写入 gadget 配置
mkdir -p /sys/kernel/config/usb_gadget/pi4
cd /sys/kernel/config/usb_gadget/pi4
echo 0x2ca3 > idVendor
echo 0xF001 > idProduct
# ... 配置字符串及函数 ...

if [ ${enable_bulk} -eq 1 ]; then
    mkdir -p /dev/usb-ffs/bulk1
    func=functions/ffs.bulk1
    mkdir -p "${func}"
    ln -sf "${func}" configs/c.1
    mount -o mode=0777,uid=2000,gid=2000 -t functionfs bulk1 /dev/usb-ffs/bulk1
    # 同理配置 bulk2
    
    if [ ! -f ${startup_bulk_exe} ]; then
        cd ${startup_bulk_dir}
        make
        cp startup_bulk ${startup_bulk_dir}/
    fi
    ${startup_bulk_exe} /dev/usb-ffs/bulk1 &
    sleep 1
    ${startup_bulk_exe} /dev/usb-ffs/bulk2 &
fi

udevadm settle -t 5 || :
ls /sys/class/udc > UDC
exit 0

配置自启动服务: 创建 systemd 服务文件 /etc/systemd/system/bulk-gadget.service,指向上述脚本路径,并执行:

sudo systemctl enable bulk-gadget
sudo reboot

重启后通过 lsusb 确认是否出现 ID 为 2ca3:f001 的设备。

2.3 验证线路

  • UART 验证:ls /dev/tty* 应出现 /dev/ttyACM0(M300 特有)或 /dev/ttyUSB0(TTL 模块)。
  • USB 验证:lsusb 应显示 CH340 转换器信息。

3. 启动 PSDK

下载 PSDK 3.11.0 源码(更高版本可能无法获取相机码流)。以 C++ 示例为例。

3.1 配置用户信息

修改 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_APP_KEY "your_app_key"
#define USER_APP_LICENSE "your_app_license"
#define USER_DEVELOPER_ACCOUNT "[email protected]"
#define USER_BAUD_RATE "921600"

注:App 名称不宜过长,建议控制在 4 字以内,避免初始化报错。

3.2 配置连接模式

修改 dji_sdk_config.h:

#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_USB_BULK_DEVICE

M300 OSDK 端口仅支持 UART 或 UART+USB Bulk 模式。

3.3 修改 UART 配置

修改 hal_uart.h,指定正确的设备节点:

#define LINUX_UART_DEV1 "/dev/ttyUSB0"
#define LINUX_UART_DEV2 "/dev/ttyACM0"

DEV2 是 M300 特有的 USB 通道配置。

3.4 修改 Bulk 配置

修改 hal_usb_bulk.h,填入之前 lsusb -v 查到的 VID/PID 及 Endpoint 信息:

#define LINUX_USB_VID (0x2CA3)
#define LINUX_USB_PID (0xF001)
#define LINUX_USB_BULK1_INTERFACE_NUM (0)
#define LINUX_USB_BULK1_END_POINT_IN (0x81)
#define LINUX_USB_BULK1_END_POINT_OUT (0x01)
// ... 其他参数对应实际值 ...

务必核对 bInterfaceNumber 和 bEndpointAddress,否则无法通信。

3.5 编译运行

修改 CMakeLists.txt 确保包含 Linux Manifold2 路径:

add_subdirectory(samples/sample_c++/platform/linux/manifold2)

编译并运行:

cd Payload-SDK/
mkdir build && cd build
cmake ../
make -j4
sudo ./dji_sdk_demo_linux_cxx

成功运行后将显示可用命令列表。若出现 init gimbal module error: 0x000000E0 属正常现象,因 M300 OSDK 接口对云台控制支持有限,不影响数据订阅与飞行控制。

常见问题

  1. CRC8 错误:串口性能不佳时可能出现,尝试更换高质量 TTL 线或缩短线缆。
  2. DjiAccessAdapter_IsUartConnect returnCode=236:检查负载端串口设备是否开启,TTL 连接是否正常。
  3. 无法订阅相机码流:若示例程序能跑通但视频窗口不弹出,尝试降级至 PSDK 3.11.0,高版本可能存在兼容性限制。
  4. 波特率选择:M300 推荐 921600,其他机型视情况调整。

附录

  • 官方文档参考:Payload SDK
  • 硬件连接详情:PSDK 各机型硬件连接介绍

目录

  1. 树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南
  2. 1. 硬件准备
  3. 1.1 硬件选型
  4. 1.2 硬件连接
  5. 2. 软件环境配置
  6. 2.1 基础环境
  7. 2.2 开启树莓派 USB Gadget 能力
  8. 写入 gadget 配置
  9. ... 配置字符串及函数 ...
  10. 2.3 验证线路
  11. 3. 启动 PSDK
  12. 3.1 配置用户信息
  13. 3.2 配置连接模式
  14. 3.3 修改 UART 配置
  15. 3.4 修改 Bulk 配置
  16. 3.5 编译运行
  17. 常见问题
  18. 附录
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 宇树 G1 人形机器人强化学习训练配置与奖励函数解析
  • 开源模型落地实战:Qwen1.5-7B-Chat LoRA 微调进阶
  • 开源 RAG 引擎 RAGFlow 部署与实战指南
  • 力扣 Hot100 链表算法题解(上)
  • Open WebUI Docker 部署指南与最佳实践
  • Python 爬虫学习指南:从基础到逆向进阶
  • 通义万相 2.1 多模态生成技术解析与核心优势
  • SECS/GEM 通信构建:C++ 协议解析与性能优化实战
  • 如何使用 Llama-Factory 快速微调 Qwen、Baichuan、ChatGLM
  • 前端代码分割与懒加载技术实践
  • 医疗 AI 场景下的模型融合与集成策略
  • AI 绘画:GPU 算力租赁助力数字艺术创作
  • Python 实战:人工智能中的时间序列分析基础
  • WhisperLiveKit 实时语音识别指南:从安装到生产部署
  • 机器人运动学:标准 DH 与改进 DH 方法对比
  • 大模型安全攻防:时间诱导越狱与对齐技术深度解析
  • VS Code Copilot 在 Win10 WSL2 环境连接失败修复方案
  • Ghostty + Yazi + Lazygit 打造高效终端工作流
  • 模拟算法题详解:替换问号、提莫攻击、Z 字形变换、外观数列与数青蛙
  • Linux 网络基础入门:协议栈与传输流程
  • 相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online