跳到主要内容 树莓派 4B 连接大疆 M300 无人机开发教程 | 极客日志
C++
树莓派 4B 连接大疆 M300 无人机开发教程 树莓派 4B 连接大疆 M300_RTK 无人机的完整开发流程。内容包括硬件选型与连接(E-Port 套件、USB-TTL、同轴线等)、软件环境搭建(Raspberry Pi OS、OpenCV、FFmpeg 等依赖库安装)、树莓派 USB Gadget 配置(启用 Bulk 传输、编写启动脚本及 systemd 服务)、PSDK 3.11.0 版本配置(用户信息、硬件连接模式、UART 及 Bulk 参数修改)以及 C++ 示例程序的编译与运行。文中还包含了常见问题排查,如串口 CRC 错误、Gimbal 初始化失败及相机码流订阅问题,重点强调了 PSdk 3.11.0 版本的兼容性要求。
无尘 发布于 2026/4/5 更新于 2026/4/13 1 浏览 :本教程适用于树莓派 4B 连接大疆 M300_RTK 无人机,若是其余型号可以参考本文思路,但是具体细节请前往官方教程或大疆开发者论坛查找,第三方开发板连接大疆无人机,不同型号之间会有很多细节差异,请确认自己的型号然后针对性查找
注
官方文档:Payload SDK (官方的是树莓派 4B 连接 M350!并非 M300,实现细节完全不同,请慎重查看)
1 硬件准备
1.1 硬件选型
无人机型号 :M300_RTKM300 顶部一共有三个接口,其中 OSDK 端口和云台口(Payload SDK Port)可以用来运行 PSDK 程序,TypeC 调参口,则是用来与电脑连接,打开 DJI Assistant2 软件后,可以升级无人机固件,导出日志,使用模拟器,绑定负载等。
1.FPV 摄像头 13.左视和右视红外感知系统 25.调参接口 2.前视红外感知系统 14.左视和右视视觉系统 26.OSDK 接口 3.前视视觉系统 15.智能飞行电池 27.PSDK 接口 4.云台接口 16.电池电量指示灯 28.下视红外感知系统 5.云台相机解锁按钮 17.电池电量按键 29.下视视觉系统 6.机臂 18.D-RTK2 天线 30.下视补光灯 7.电机 19.飞行器状态指示灯 31.下视夜航灯 8.螺旋桨 20.上视夜航灯 32.后视红外感知系统 9.电调 LED 指示灯 21.电源按键/指示灯 33.后视视觉系统 10.图传天线 22.上视红外感知系统 34.电池锁紧旋钮 11.起落架 23.上视补光灯 35.云台相机 12.防尘网 24.上视视觉系统 36.无线上网卡接口
注:左侧开关,靠近接口侧为 off ,反之为on ;右侧 USB 主/从设备切换,靠近接口侧位host ,反之为device
其余设备 :除上面的设备外,还需要下面的设备用于连线
USB-TTL(CH340) :某些树莓派的串口性能较差,建议使用 USB 转 TTL 模块连接串口
XT30 转 TypeC 线 :E-Port 开发套件配套的,用于树莓派供电
TypeA-TypeC 数据线 :必须是数据线,需要能够传输数据
E-Port 同轴线 :E-Port 开发套件配套的
1.2 硬件连接
树莓派连接 USB-TTL 线:TypeA 端插入树莓派的USB3.0 协议插口 (见 1.1 中的树莓派示意图)
E-Port 开发板连接 USB-TTL 线:连接的引脚分别为 RX->TX 、TX->RX 、GND->GND ,该线主要用于 uart 数据传输 (速度较慢) 各串口见下图 (也可查看 1.1 中的 E-Port 开发者套件示意图)
连接 E-Port 同轴线:同轴线的 typec 插入 E-Port 开发板的E-Port 接口 (见 1.1 中的 E-Port 开发者套件示意图),B 标识朝上
最终连线效果 :将 E-Port 开发板的开关拨至 ON,USB 主/从设备切换拨至 device,M300 无人机做 Device 从设备**,开发板做 Host 主设备,仅能通过此方式,不要搞成官网教程上的了。启动无人机后,开发板的指示灯会发出绿光,若没亮,检查开关是否拨至 ON。
E-Port 开发板接入 M300 无人机:同轴线另一端的 A 标识 朝无人机内部插入OSDK 端口 (见 1.1 无人机示意图)PSDK 3.x 版本集OSDK,PSDK 功能与一体,比 OSDK 4.1 版本要轻量很多,而且结构更加清晰易懂 (**信息来源:**PSDK 3.x 系列文档目录)。这就是为啥我们使用 PSDK,会连接在 OSDK 接口上。而 psdk 接口通常用于接入专用的 PSDK 负载,比如 Skyport 这种。
使用 TypeA-TypeC 数据线,连接 E-Port 开发板与树莓派:该线主要用于 bulk 数据传输 (高速)TypeA 端接入树莓派的 USB2.0 接口 ,TypeC 端接入 E-Port 开发板的USB2.0 接口 (见 1.1 中的 E-Port 开发板示意图)
使用 XT30 转 TypeC 线连接树莓派: 该线主要用于树莓派供电树莓派 4B 通常使用5V/2A 电源供电,E-Port 开发板的5V/2A 输出 接口 (见 1.1E-Port 开发板示意图) 连接XT30 转 TypeC 线 ,见下图
将 XT30 转 TypeC 线接入树莓派 4B 的 TypeC 电源接口,见下图
至此硬件连线完成,后面我们会在软件部分对线路连接是否成功进行验证。
2 软件准备 PSDK 连接模式 :DJI_USE_UART_AND_USB_BULK_DEVICE
注: 连接 M300 无人机最高只能用 psdk3.11.0 ,再往上的版本就无法正常获取相机码流了,因为这个被坑了好长时间!!
2.1 环境下载 sudo apt-get install libusb-1.0-0-dev
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
opencv_version
opencv 打包和安装时间较长,请耐心等待,另外 gcc 版本过高的话,打包 opencv 时会出现源代码语法错误,去源文件修改一下重新打包就行了,错误信息如下:
/home/pi/opencv-3.4.15/modules/core/src/persistence_base64.cpp:167:31: error: comparing the result of pointer addition src + ((sizetype)off)) and NULL [-Werror=address] 167 | if (src == 0 || src + off == 0) | ~~~~~~~~~^~~
修改 modules/core/src/persistence_base64.cpp 第 167 行
if (src ==0 || src + off ==0 ) #改成下面的 if (src ==0 || off ==0 ) #然后重新打包即可
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
sudo apt-get install libaio-dev
sudo apt install gcc g++ -y
gcc -v
更新树莓派软件仓库 由于树莓派默认使用外网镜像下载,因此速度比较慢,建议先自行配置树莓派镜像
sudo apt-get update
sudo apt-get upgrade
2.2 开启树莓派 USB 能力 Linux 设备往往是通用性设备,没有专门为某个功能设计的 USB 驱动芯片,因此需要通过软件实现 UDC 功能。Linux USB gadget 是 Linux 环境下的 UDC 实现。在树莓派中启用 USB Gadget,可以让树莓派充当 USB 设备。通过 USB Gadget 中的 g_multi、g_ether、g_zero、g_audio、g_serial 等模块,可以轻松实现 USB 网卡、串口、键盘、鼠标等功能。当然,除了使用已存在的 Gadget 模块,还可以通过 configfs(functionfs)的方式自定义实现 USB 设备的定义,配置设备的基础属性和功能,具有很强大的扩展性。
本文脚本是在官方教程的开启 bulk 脚本基础上进行的修改,参考了论坛上的一篇教程
修改树莓派 USB device 配置文件 修改 /boot/firmware/config.txt(有些教程是喊修改/boot/config.txt,但我的系统里的这个文件里提示去/boot/firmware/config.txt 文件修改) 在文件末尾 添加
注:原有的 dtoverlay=vc4-kms-v3d 不要删除,会导致图形化界面无法启动
修改 /boot/firmware/cmdline.txt(理由同上) 在rootwait 后面 加上
重新编译 start_bulk 程序压缩包里有一个 start_bulk 可执行程序,但并不是所有系统都能使用,因此需要用户自己重新编译一个
cd usb-bulk-configuration-reference
make clean
make
关于编译 startup_bulk.c 文件,有些平台编译可能会报错 htole32,htole16 没有,按照下面的方式进行解决
sudo apt install libaio-dev build-essential
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define cpu_to_le32(x)(x)
#define cpu_to_le16(x)(x)
#else
#define cpu_to_le32(x) ((((x)&0xff000000u)>>24)|(((x)&0x00ff0000u)>>8)|(((x)&0x0000ff00u)<<8)|(((x)&0x000000ffu)<<24))
#define cpu_to_le16(x) ((((x)>>8)&0xffu)|(((x)&0xffu)<<8))
#endif
c.在 startup_bulk.c顶部引入头文件
sed -i 's/\bhtole32\b/cpu_to_le32/g; s/\bhtole16\b/cpu_to_le16/g' startup_bulk.c
此时应该会出现一个新的 start_bulk 可执行文件,在之后的脚本中会调用该程序
unzip usb-bulk-configuration-reference.zip
编写 raspi-usb-device-start.sh脚本,用于配置 gadget
PSDK 大致原理是通过 linux gadget 来驱动 USB bulk,然后 PSDK 来通过 functionFS 来调用驱动。
该脚本是在官网教程的脚本基础上进行的修改 ,更加适配 psdk3.11.0 的版本,脚本中的 config.txt、cmdline.txt 根据自己系统的实际路径 修改。我使用的 psdk3.11.0,连接模式为 DJI_USE_UART_AND_USB_BULK_DEVICE,只需要开启 enable_bulk 即可,因此 enable_bulk=1 其余为 0,若要开启其他功能,设置为 1 即可。
官方教程里的脚本生成了三个/dev/usb-ffs/bulk,而 psdk3.11.0,只需要两个即可,因此无需多生成一个
在该脚本中会先检测第三步中的配置是否添加,若未添加则进行配置添加并重启树莓派
#!/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
echo startup_bulk_exe
if [ ! -d /sys/kernel/config/usb_gadget ]; then
if ! $(grep -q dtoverlay=dwc2 /boot/firmware/config.txt) ; then
echo -e "\n\n\n## customized\n# for op-sdk enable USB device RNDIS\n[all]\ndtoverlay=dwc2" >> /boot/firmware/config.txt
init 6
fi
if ! $(grep -q modules-load=dwc2 /boot/firmware/cmdline.txt) ; then
sed -i 's/rootwait /&modules-load=dwc2 /' /boot/firmware/cmdline.txt
init 6
fi
if ! $(grep -q libcomposite /etc/modules) ; then
echo -e "\n\n\n## customized\n# for op-sdk enable USB device RNDIS\nlibcomposite" >> /etc/modules
init 6
fi
exit 1
fi
modprobe g_ether
rmmod g_ether
sleep 1
if [ ! -d /sys/kernel/config/usb_gadget/pi4 ]; then
mkdir -p /sys/kernel/config/usb_gadget/pi4
cd /sys/kernel/config/usb_gadget/pi4
echo 0x2ca3 > idVendor
echo 0xF001 > idProduct
if [ ${enable_vcom} -eq 1 ]; then
echo 0xF002 > idProduct
fi
if [ ${enable_rndis} -eq 1 ]; then
echo 0xF003 > idProduct
fi
if [ ${enable_bulk} -eq 1 ]; then
echo 0xF001 > idProduct
fi
echo 0x0001 > bcdDevice
echo 0x0200 > bcdUSB
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir -p strings/0x409
echo "psdk-rpi4b" > strings/0x409/serialnumber
echo "raspberry" > strings/0x409/manufacturer
echo "PI4" > strings/0x409/product
cfg=configs/c.1
mkdir -p "${cfg} "
echo 0x80 > ${cfg} /bmAttributes
echo 250 > ${cfg} /MaxPower
if [ ${enable_rndis} -eq 1 ]; then
cfg_str="${cfg_str} +RNDIS"
func=functions /rndis.usb0
mkdir -p "${func} "
ln -sf "${func} " "${cfg} "
echo 1 > os_desc/use
echo 0xcd > os_desc/b_vendor_code
echo MSFT100 > os_desc/qw_sign
echo RNDIS > "${func} /os_desc/interface.rndis/compatible_id"
echo 5162001 > "${func} /os_desc/interface.rndis/sub_compatible_id"
ln -sf "${cfg} " os_desc
fi
if [ ${enable_vcom} -eq 1 ]; then
cfg_str="${cfg_str} +ACM0"
func=functions /acm.gs0
mkdir -p "${func} "
ln -sf "${func} " "${cfg} "
fi
if [ ${enable_bulk} -eq 1 ]; then
mkdir -p /dev/usb-ffs
cfg_str="${cfg_str} +BULK1"
mkdir -p /dev/usb-ffs/bulk1
func=functions /ffs.bulk1
mkdir -p "${func} "
ln -sf "${func} " "${cfg} "
mount -o mode=0777,uid=2000,gid=2000 -t functionfs bulk1 /dev/usb-ffs/bulk1
cfg_str="${cfg_str} +BULK2"
mkdir -p /dev/usb-ffs/bulk2
func=functions /ffs.bulk2
mkdir -p "${func} "
ln -sf "${func} " "${cfg} "
mount -o mode=0777,uid=2000,gid=2000 -t functionfs bulk2 /dev/usb-ffs/bulk2
fi
mkdir -p "${cfg} /strings/0x409"
echo "${cfg_str:1} " > "${cfg} /strings/0x409/configuration"
fi
if [ ${enable_bulk} -eq 1 ]; then
if [ ! -f ${startup_bulk_exe} ]; then
cd ${startup_bulk_dir}
make && ( $? != 0 ) && ( exit 1 )
cp startup_bulk ${startup_bulk_dir} /startup_bulk
cd -
fi
${startup_bulk_exe} /dev/usb-ffs/bulk1 &
sleep 1
${startup_bulk_exe} /dev/usb-ffs/bulk2 &
sleep 1
fi
udevadm settle -t 5 || :
ls /sys/class/udc > UDC
if [ ${enable_rndis} -eq 1 ]; then
/sbin/brctl addbr pi4br0
/sbin/ifconfig pi4br0 ${net_ip} netmask ${net_mask} up
/sbin/brctl addif pi4br0 usb0
/sbin/ifconfig usb0 down
/sbin/ifconfig usb0 up
fi
exit 0
使用 TypeA-TypeC 数据线,连接树莓派的电源 typeC 接口,然后接入电脑的 USB 接口
配置脚本自启动 由于每次启动都需要启动脚本来开启 bulk 功能,因此建议配置一个脚本自启动服务,有很多配置方式,这里我就讲我是如何配置的至此树莓派 USB 能力开启完成!
sudo systemctl enable bulk-gadget
然后重启树莓派,再次进行上面第五步或第六步的验证,查看脚本是否执行即可
写入下列内容 ExecStart 的值为 raspi-usb-device-start.sh所在的路径,请根据实际情况修改
[Unit]
Description =Start PSDK USB bulk gadget
After =sysinit.target
DefaultDependencies =no
[Service]
Type =on eshot
RemainAfterExit =yes
ExecStart =/home/pi/program/start_bulk/raspi-usb-device-start.sh
StandardOutput =journal
StandardError =journal
User =root
[Install]
WantedBy =sysinit.target
sudo nano /etc/systemd/system/bulk-gadget.service
使用 VID 和 PID 查看 USB详细信息 ubuntu 虚拟机 执行指令
sudo lsusb -d 2ca3:f001 -v
Bus 001 Device 003: ID 2ca3:f001
Device Descriptor:
…
idVendor 0x2ca3 #VID
idProduct 0xf001 #PID
…
Configuration Descriptor:
…
iConfiguration 4 BULK1+BULK2 #这里可以看出有两个 bulk
…
Interface Descriptor:
…
bInterfaceNumber 0
…
bInterfaceClass 255 Vendor Specific Class
…
Endpoint Descriptor:
…
bEndpointAddress 0x81 EP 1 IN
…
Endpoint Descriptor:
…
bEndpointAddress 0x01 EP 1 OUT
…
Interface Descriptor:
…
bInterfaceNumber 1
…
bInterfaceClass 255 Vendor Specific Class
…
Endpoint Descriptor:
…
bEndpointAddress 0x82 EP 2 IN
…
Endpoint Descriptor:
…
bEndpointAddress 0x02 EP 2 OUT
…
Device Qualifier (for other device speed):
…
上述所有 bInterfaceClass 为 255 Vendor Specific Class,即为后续我们要填入 psdk 配置文件中的设备信息,请记住上面加粗的数据项 (bInterfaceNumber、bEndpointAddress、bEndpointAddress)
电脑上开启 ubuntu 虚拟机,并扫描树莓派设备ubuntu 虚拟机 执行指令
可以看到新出现了一个 USB 设备,这个就是树莓派 USB 设备信息,2ca3:f001,分别对应了该设备的 VID,PID,这个值其实是 raspi-usb-device-start.sh脚本中写死的,大家可以自行修改
chmod 777 raspi-usb-device-start.sh
ps -ef | grep startup_bulk
2.3 验证线路连接 完成 1.1 的硬件连接后,启动无人机,并将开关拨至 ON,USE 主/从切换至 device,再连接树莓派,进入终端
验证 TypeA-TypeC 数据线,连接 E-Port 开发板与树莓派
若出现了 /dev/ttyACM0 则说明 USB-TTL 线连接成功,ttyACM0 为 M300 无人机->E-Port 开发板->树莓派 4B 所特有的,插上之后才会出现
若出现了 /dev/ttyUSB0 则说明 USB-TTL 线连接成功
Bus 001 Device 012: ID 1a86:7523 QinHeng Electronics CH340 serial converter
3 启动 PSDK 本教程以 c++样例代码为例,若想启动 c 代码,将 sample_c++修改为 sample_c 即可
先在 大疆开发者网站 上进行注册,申请成为 PSDK 开发者,并创建应用,获取应用信息。
注:app 名称不要太长 ,我最开始的应用名长度为十七个字,启动应用时会提示报错信息过长,改为四个字 后才正常运行
3.1 配置用户信息 修改 samples/sample_c++/platform/linux/manifold2/application/dji_sdk_app_info.h
(官网教程修改的是 raspberry_pi,而 psdk3.11.0没有 这个目录,我们修改manifold2 目录下的文件即可,这个是妙算 2 平台的,同样适用于树莓派)
#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 "your_developer_account"
#define USER_BAUD_RATE "921600"
将开发者网站上的应用信息填入上述位置,USER_DEVELOPER_ACCOUNT 就是你的登录邮箱
关于 USER_BAUD_RATE 的选择,使用921600 即可,可适用于所有无人机型号,详细可见下表
无人机 串口波特率/bps M350 RTK 11520、230400、460800、921600、1000000 M300 RTK 11520、230400、460800、921600、1000000 M30/M30T 11520、230400、460800、921600、1000000 M3D/M3TD 921600 M3E/M3T 921600
表格来源:《无人机应用开发指南:基于大疆 Payload SDK》
3.2 配置硬件连接方式 修改 samples/sample_c++/platform/linux/manifold2/application/dji_sdk_config.h
本文主要以DJI_USE_UART_AND_USB_BULK_DEVICE 模式为主,其余模式请自行查询资料,另外 M300 OSDK 端口仅支持 DJI_USE_ONLY_UART、DJI_USE_UART_AND_USB_BULK_DEVICE
#define DJI_USE_ONLY_UART (0)
#define DJI_USE_UART_AND_USB_BULK_DEVICE (1)
#define DJI_USE_UART_AND_NETWORK_DEVICE (2)
#define DJI_USE_ONLY_USB_BULK_DEVICE (3)
#define DJI_USE_ONLY_NETWORK_DEVICE (4)
#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_USB_BULK_DEVICE
3.3 修改 UART 配置文件 修改 samples/sample_c++/platform/linux/manifold2/hal/hal_uart.h
使用 E-Port 开发板只需修改下面的内容即可,DEV1 为 USB-TTL 线的 USB 路径,DEV2 为 TypeA-TypeC 数据线的 USB 路径,可查看 2.3 验证线路连接进行查看
#define LINUX_UART_DEV1 "/dev/ttyUSB0"
#define LINUX_UART_DEV2 "/dev/ttyACM0"
关于 DEV2,这个是 M300 才需要配置的,其他机型可以不用处理,M300 会用到 USB 的通道作为串口功能使用,因此需要配置额外的 UART 端口。
M300 机型建议 DEV1 DEV2 均连接,如果有使用 E-Port 拓展板,需要把拨码开关拨到 Device(唯一配置,M300 不支持 Host),此时飞机做 Device,设备做 Host 设备,连接方式:飞机->同轴线->E-port 拓展板 (拨码开关为 Device) -> TypeC -> 设备 USBA。
以上**信息来源:**PSDK 如何配置串口端口 – 大疆创新 SDK 技术支持论坛
3.4 修改 bulk 配置文件 修改 samples/sample_c++/platform/linux/manifold2/hal/hal_usb_bulk.h
#define LINUX_USB_BULK1_EP_IN_FD "/dev/usb-ffs/bulk1/ep1"
#define LINUX_USB_BULK1_EP_OUT_FD "/dev/usb-ffs/bulk1/ep2"
#define LINUX_USB_BULK1_INTERFACE_NUM (0)
#define LINUX_USB_BULK1_END_POINT_IN (0x81)
#define LINUX_USB_BULK1_END_POINT_OUT (0x01)
#define LINUX_USB_BULK2_EP_IN_FD "/dev/usb-ffs/bulk2/ep1"
#define LINUX_USB_BULK2_EP_OUT_FD "/dev/usb-ffs/bulk2/ep2"
#define LINUX_USB_BULK2_INTERFACE_NUM (1)
#define LINUX_USB_BULK2_END_POINT_IN (0x82)
#define LINUX_USB_BULK2_END_POINT_OUT (0x02)
#define LINUX_USB_VID (0x2CA3)
#define LINUX_USB_PID (0xF001)
上面的信息不要改错了,否则会导致无法获取无人机数据
3.5 编译运行 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
'Logs/latest.log' ->'DJI_0009_20251210_16-34-36.log'
[0.024] [core] -[Info] -[DjiCore_Init:107) Payload SDK Version : V3.11.0-beta.0-build.2206 Mar 12202512:41:40
[3.237] [utils] -[Info] -[DjiSdkVersionAck_Parse:183) Identify aircraft serial number = 1ZNBJ8700C019S, Firmware =3.4.18.68
[3.242] [adapter] -[Info] -[DjiAccessAdapter_Init:314) Identify aircraft series is Matrice 300 Series
[3.242] [adapter] -[Info] -[DjiAccessAdapter_Init:353) Identify mount position type is Extension Port Type
[3.270] [adapter] -[Info] -[DjiAccessAdapter_Init:475) Identity uart0 baudrate is 921600 bps
[3.270] [adapter] -[Info] -[DjiPayloadNegotiate_Init:134) No need negotiate device info
[4.434] [core] -[Info] -[DjiIdentityVerify_UpdatePolicy:493) Updating dji sdk policy file...
[5.434] [core] -[Info] -[DjiIdentityVerify_UpdatePolicy:501) Update dji sdk policy file successfully
[5.438] [core] -[Info] -[DjiCore_Init:169) Identify AircraftType = Matrice 300 RTK, MountPosition = Extension Port, SdkAdapterType = None
[5.475] [core] -[Info] -[DjiCore_SetAlias:186) Set alias: PSDK_APPALIAS
[5.475] [gimbal] -[Error] -[DjiGimbal_Init:205) Can't support this function
[5.476] [user] -[Error] -[DjiTest_GimbalStartService:154) init gimbal module error: 0x000000E0
[5.476] [user] -[Error] -[DjiUser_ApplicationStart:316) psdk gimbal init error
[5.983] [user] -[Info] -[SetVolume:583) Set widget speaker volume: 60
[5.983] [user] -[Warn] -[SetVolume:601) No audio device found, please add audio device and init speaker volume here!!!
[10.985] [core] -[Info] -[DjiCore_ApplicationStart:247) Start dji sdk application
[10.985] [user] -[Info] -[DjiUser_ApplicationStart:363) Application start. | Available commands: |
| [0] Fc subscribe sample - subscribe quaternion and gps data |
| [1] Flight controller sample - you can control flying by PSDK |
| [2] Hms info manager sample - get health manger system info by language |
| [a] Gimbal manager sample - you can control gimbal by PSDK |
| [c] Camera stream view sample - display the camera video stream |
| [d] Stereo vision view sample - display the stereo image |
| [e] Run camera manager sample - you can test camera's functions interactively ||
|[f] Start rtk positioning sample - you can receive rtk rtcm data when rtk signal is ok |
[5.475][gimbal]-[Error]-[DjiGimbal_Init:205) Can't support this function
[5.476][user]-[Error]-[DjiTest_GimbalStartService:154) init gimbal module error: 0x000000E0
[5.476][user]-[Error]-[DjiUser_ApplicationStart:316) psdk gimbal init error
以上错误信息是正常情况,这是因为M300 RTK OSDK 接口 仅有 psdk 中的部分功能,有些功能无法使用,因此报这个错误,不影响其他功能的使用。M300 RTK OSDK 接口 支持 数据订阅、相机管理、云台管理、电源管理、飞行控制、自定义控件、自定义 HMS 功能、HMS 管理功能、低速数据传输、获取相机码流、SDK 互联互通、运动规划、喊话器控件等功能,信息来源:init gimbal module error: 0x000000E0 – 大疆创新 SDK 技术支持论坛
之后就可以向官方教程那样使用样例程序里面的功能啦,飞行控制的话,可以使用数据线通过无人机调参接口 (见 1.1 无人机示意图) 将无人机与电脑直接相连,然后启动 DJI Assistant 2 (Enterprise Series) 2.1.20 中的模拟飞行,来进行测试
参考链接:1.3 DJI 无人机与调参仿真软件 – DJI Assistant2 – 大疆创新 SDK 技术支持论坛
常见问题 (1)如果串口性能不佳,有可能出现'protocol frame crc8 error'警告。少量的警告可以忽略。如 果该警告大量出现,可以使用性能更强的 USB-TTL,或者更换质量更好、长度更短的串口线。
(2)如果提示'DjiAccessAdapter_IsUartConnect,returnCode=236'错误,说明负载端的串口设备 连接存在问题,可以尝试检查串口功能是否开启,USB-TTL 设备是否正常。
(3)如果提示'Try identify UART0 connection failed.Probably because SDK adapter or aircraft not finish init or UART connect error.'错误,说明无人机端的串口设备连接存在问题,可以检查无人机 是否开机、E-Port 等转接板是否开机,以及接线是否正常。
(4)若出现无法订阅相机码流功的情况,【成功运行了 c++示例程序,并且功能 0 可以成功订阅到一些数据显示出来,但是关于视频的功能 c→0→1,无法像文档中展示的那样弹出一个显示视频画面的窗口,停留在终端等待按 q 退出】,降低 psdk 版本即可,一开始我使用的 psdk3.14.0 一直无法成功订阅,在降低到 psdk3.11.0 之后就可以正常订阅了
附录
**PSDK 开发常用参考文章链接:**PSDK 常用参考文章 – 大疆创新 SDK 技术支持论坛
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 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