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

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

树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发涉及硬件接线、系统环境配置及 SDK 集成。本文档基于 PSDK 3.11 版本,详细说明了 E-Port 套件与树莓派的物理连接方式,包括 UART 与 USB Bulk 通道的配置。内容涵盖 Raspberry Pi OS 环境搭建、libusb 与 OpenCV 依赖安装、USB Gadget 脚本编写与 systemd 服务注册,以及 SDK 配置文件中的 VID/PID 与端口号修正。针对 M300 特有的 OSDK 接口限制及相机码流订阅问题提供了具体解决方案与常见错误排查指南,适合嵌入式开发人员参考。

编程诗人发布于 2026/4/7更新于 2026/8/3148 浏览
树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南

树莓派 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 物理连接

连线逻辑是通信的基础,请仔细核对引脚定义。

  1. UART 通信:树莓派通过 USB-TTL 连接 E-Port 的 UART 口。RX 接 TX,TX 接 RX,GND 共地。此通道用于低速控制指令传输。
  2. 电源供电:使用 XT30 转 TypeC 线连接 E-Port 的 5V/2A 输出口与树莓派的 TypeC 电源口,确保供电稳定。
  3. 高速数据:使用 TypeA-TypeC 数据线连接 E-Port 的 USB2.0 口与树莓派的 USB2.0 口,用于 Bulk 数据传输。
  4. 信号链路: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/。

  1. 用户信息:修改 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 即可适配多数机型。

  2. 连接模式:修改 dji_sdk_config.h,M300 仅支持 UART 或 UART+Bulk 模式。

    #define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_USB_BULK_DEVICE
    
  3. 端口映射:修改 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 模拟器进行验证,避免直接实飞风险。

注:本文档基于实战经验整理,具体参数请以最新官方文档为准。

目录

  1. 树莓派 4B 连接大疆 M300 RTK 无人机 PSDK 开发指南
  2. 1. 硬件准备
  3. 1.1 设备选型
  4. 1.2 物理连接
  5. 2. 软件环境搭建
  6. 2.1 系统安装与依赖
  7. 2.2 USB Gadget 配置
  8. 2.3 脚本自启动
  9. 3. PSDK 集成与运行
  10. 3.1 应用注册
  11. 3.2 配置文件修改
  12. 3.3 编译与测试
  13. 4. 常见问题排查

更多推荐文章

查看全部
  • Flood Fill 算法详解:图像渲染与岛屿问题
  • 异构数据迁移工具:DataX 与 DataX-Web 使用指南
  • 单片机与 FPGA 通信方式及 STM32 高速并行接口实现
  • PX4+ROS 无人机 Offboard 控制模式解析与实战
  • K-means 聚类算法原理与实现详解
  • 模拟算法实战:替换问号、提莫攻击、N 字形变换、外观数列与数青蛙
  • Dart File 类用法详解
  • Lostlife2.0 实战:基于 Llama-Factory 重塑 NPC 对话逻辑
  • C++ STL 线程与互斥量:优雅解决哲学家就餐问题
  • MIT 电机模式控制详解:参数、场景与调试
  • WhisperLiveKit 会议纪要模板定制:适配不同场景样式
  • 30 行 Python 实现公开接口数据抓取与本地图库构建
  • LLMQuant 与 Camel AI 战略合作:探索多智能体系统在量化金融中的应用
  • SpringBoot3 集成 Tess4J 实现 OCR 识别:环境搭建与实战避坑
  • ormpp 现代 C++ ORM 框架快速入门
  • 医疗连续体机器人模块化控制界面设计与 Python 库应用(下)
  • 基于Coze平台搭建AI客服机器人的全流程指南
  • OpenClaw Windows 10 本地 AI 智能体一键部署教程
  • 基于 Python 和 FastAPI 实现摸鱼倒计时界面
  • 别再搞混了!Copilot Chat 和 Microsoft 365 Copilot 详细对比

相关免费在线工具

  • 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