注:本教程适用于树莓派 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.无线上网卡接口 |
-
第三方开发板:Raspberry Pi 4B(树莓派 4B)
-
大疆开发套件: E-Port 开发者套件
注:左侧开关,靠近接口侧为 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 开发者套件示意图)
连线效果见下图,注意 RX 与 TX 不要接反了
连接 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 电源接口,见下图
至此硬件连线完成,后面我们会在软件部分对线路连接是否成功进行验证。
硬件连接参考教程:PSDK 各机型硬件连接介绍 – 大疆创新 SDK 技术支持论坛
2 软件准备
PSDK 版本:psdk3.11.0,下载地址:dji-sdk/Payload-SDK at release/v3.11.0
PSDK 连接模式:DJI_USE_UART_AND_USB_BULK_DEVICE
注: 连接 M300 无人机最高只能用 psdk3.11.0,再往上的版本就无法正常获取相机码流了,因为这个被坑了好长时间!!
2.1 环境下载
- 树莓派系统:Raspberry PI OS(64-bit) 通过官方烧录工具 Raspberry Pi Imager 正常烧录即可,参考教程:开始使用树莓派:给树莓派安装操作系统 | 树莓派实验室
安装 libusb
sudo apt-get install libusb-1.0-0-dev
安装 opencv 3.4.15 下载地址:https://opencv.org/releases/
sudo apt install libgtk2.0-dev pkg-config #必须安装这个,后续才能使用 psdk3.11.0 正常订阅相机码流
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) #然后重新打包即可
安装 ffmpeg-4.3 下载 ffmpeg 压缩包 (https://ffmpeg.org/releases/ffmpeg-4.3.2.tar.gz)
tar -zxvf ffmpeg-4.3.2.tar.gz
./configure --enable-shared
make -j4
sudo make install
安装 opus-1.3.1 在官网 (https://opus-codec.org/) 下载 opus-1.3.1.tar.gz
tar -xzvf opus-1.3.1.tar.gz
cd opus-1.3.1/
autoreconf -f -i
./configure
make -j4 && sudo make install
安装 libaio
sudo apt-get install automake
sudo apt-get install libaio-dev
安装 GCC/G++工具:
sudo apt install gcc g++ -y
gcc -v #安装成功会显示版本信息
安装 CMake:
sudo apt install cmake
更新树莓派软件仓库由于树莓派默认使用外网镜像下载,因此速度比较慢,建议先自行配置树莓派镜像
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=dwc2
注:原有的 dtoverlay=vc4-kms-v3d 不要删除,会导致图形化界面无法启动
修改 /boot/firmware/cmdline.txt(理由同上) 在rootwait 后面加上
modules-load=dwc2
在 /etc/modules 文件末尾添加
libcomposite
重新编译start_bulk 程序压缩包里有一个 start_bulk 可执行程序,但并不是所有系统都能使用,因此需要用户自己重新编译一个
cd usb-bulk-configuration-reference
make clean
make
得到 start_bulk 可执行文件
关于编译 startup_bulk.c 文件,有些平台编译可能会报错 htole32,htole16 没有,按照下面的方式进行解决
a.安装依赖
sudo apt install libaio-dev build-essential
b.编写 fix_endian.h头文件
/* fix_endian.h */
#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顶部引入头文件
#include"fix_endian.h"
d.批量替换旧关键字
sed -i 's/\bhtole32\b/cpu_to_le32/g; s/\bhtole16\b/cpu_to_le16/g' startup_bulk.c
e.重新编译
make clean
make
此时应该会出现一个新的 start_bulk 可执行文件,在之后的脚本中会调用该程序
下载官方 start_bulk 包链接:https://terra-1-g.djicdn.com/71a7d383e71a4fb8887a310eb746b47f/psdk/e-port/usb-bulk-configuration-reference.zip 传入树莓派中,并使用 unzip 指令进行解压
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
# The IP address shared by all USB network interfaces created by this script.
net_ip=192.168.42.120
# The associated netmask.
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
#写入 gadget 配置文件
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 # Linux Foundation
echo 0xF001 > idProduct # Multifunction Composite Gadget
if [ ${enable_vcom} -eq 1 ]; then
0xF002 > idProduct
[ -eq 1 ];
0xF003 > idProduct
[ -eq 1 ];
0xF001 > idProduct
0x0001 > bcdDevice
0x0200 > bcdUSB
0xEF > bDeviceClass
0x02 > bDeviceSubClass
0x01 > bDeviceProtocol
-p strings/0x409
> strings/0x409/serialnumber
> strings/0x409/manufacturer
> strings/0x409/product
cfg=configs/c.1
-p
0x80 > /bmAttributes
250 > /MaxPower
[ -eq 1 ];
cfg_str=
func=/rndis.usb0
-p
-sf
1 > os_desc/use
0xcd > os_desc/b_vendor_code
MSFT100 > os_desc/qw_sign
RNDIS >
5162001 >
-sf os_desc
[ -eq 1 ];
cfg_str=
func=/acm.gs0
-p
-sf
[ -eq 1 ];
-p /dev/usb-ffs
cfg_str=
-p /dev/usb-ffs/bulk1
func=/ffs.bulk1
-p
-sf
mount -o mode=0777,uid=2000,gid=2000 -t functionfs bulk1 /dev/usb-ffs/bulk1
cfg_str=
-p /dev/usb-ffs/bulk2
func=/ffs.bulk2
-p
-sf
mount -o mode=0777,uid=2000,gid=2000 -t functionfs bulk2 /dev/usb-ffs/bulk2
-p
>
[ -eq 1 ];
[ ! -f ];
make && ( $? != 0 ) && ( 1 )
startup_bulk /startup_bulk
-
/dev/usb-ffs/bulk1 &
1
/dev/usb-ffs/bulk2 &
1
udevadm settle -t 5 || :
/sys/class/udc > UDC
[ -eq 1 ];
/sbin/brctl addbr pi4br0
/sbin/ifconfig pi4br0 netmask up
/sbin/brctl addif pi4br0 usb0
/sbin/ifconfig usb0 down
/sbin/ifconfig usb0 up
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=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 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 虚拟机执行指令
lsusb
执行结果
可以看到新出现了一个 USB 设备,这个就是树莓派 USB 设备信息,2ca3:f001,分别对应了该设备的 VID,PID,这个值其实是 raspi-usb-device-start.sh脚本中写死的,大家可以自行修改
查看树莓派 USB device 信息
启动脚本:
chmod 777 raspi-usb-device-start.sh
使用指令进行验证
ps -ef | grep startup_bulk
结果如下,说明脚本执行成功
2.3 验证线路连接
完成 1.1 的硬件连接后,启动无人机,并将开关拨至 ON,USE 主/从切换至 device,再连接树莓派,进入终端
验证 TypeA-TypeC 数据线,连接 E-Port 开发板与树莓派
ls /dev/tty*
若出现了 /dev/ttyACM0 则说明 USB-TTL 线连接成功,ttyACM0 为 M300 无人机->E-Port 开发板->树莓派 4B 所特有的,插上之后才会出现
验证 USB-TTL 线是否连接成功
ls /dev/tty*
若出现了 /dev/ttyUSB0 则说明 USB-TTL 线连接成功
执行指令
lsusb
也会出现 USB-TTL 的信息
Bus 001 Device 012: ID 1a86:7523 QinHeng Electronics CH340 serial converter
3 启动 PSDK
下载 psdk3.11.0 压缩包 (链接:https://github.com/dji-sdk/Payload-SDK/tree/release/v3.11.0 ),将压缩包传入树莓派中并完成解压
本教程以 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)
/*!< Attention: Select your hardware connection mode here. * */
#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_USB_BULK_DEVICE
不同机型端口所支持的 PSDK 链路情况:PSDK 各机型硬件连接介绍 – 大疆创新 SDK 技术支持论坛
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 验证线路连接进行查看
//User can config dev based on there environmental conditions
#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" //修改为 2.2 中树莓派上查看到的值
#define LINUX_USB_BULK1_EP_OUT_FD "/dev/usb-ffs/bulk1/ep2" //同上
#define LINUX_USB_BULK1_INTERFACE_NUM (0) //修改为 2.2 中 Ubuntu 查看的 bInterfaceNumber 的值
#define LINUX_USB_BULK1_END_POINT_IN (0x81) //修改为 2.2 中的 bEndpointAddress 的值
#define LINUX_USB_BULK1_END_POINT_OUT (0x01) //修改为 2.2 中的 bEndpointAddress 的值
#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) //修改为 2.2 中的 VID 值
#define LINUX_USB_PID (0xF001) //修改为 2.2 中的 PID 值
上面的信息不要改错了,否则会导致无法获取无人机数据
3.5 编译运行
先修改 CMakeLists.txt
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]-------- Fc subscribe sample - subscribe quaternion and gps data |
| Flight controller sample - you can control flying by PSDK |
| Hms info manager sample - get health manger system info by language |
| Gimbal manager sample - you can control gimbal by PSDK |
| Camera stream view sample - display the camera video stream |
| Stereo vision view sample - display the stereo image |
| Run camera manager sample - you can test camera's functions interactively ||
| 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 技术支持论坛


