1.学习资料

官网资料:https://developer.dji.com/onboard-sdk/support/
CSDN博客
阿木实验室 课程名:大疆Onboard SDK
https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video

2.开发环境准备(我们用的是Linux环境)

(1)安装Linux发行版(eg:Ubuntu 18.04)
(2)安装C ++编译器GCC -5(注意版本)
(3)安装Cmake(命令如下)
sudo apt install cmake //下载安装Cmake
cmake –version //查看版本

3.设备连接示意图

DJI OSDK 二次开发过程记录 - 图1
实际应用中,我们使用的是大疆的机载计算机(妙算)来给飞控发送指令,也就相当于图中的linux端
两者通过串口通信,可以用USB转TTL或DJI提供的转接线连接两者(飞控用的是API端口)
DJI OSDK 二次开发过程记录 - 图2 DJI OSDK 二次开发过程记录 - 图3
(注意:当使用USB-TTL线链接A3飞控与计算机时,需要注意USB-TTL线的VCC线不要插入API端口,因为A3飞控使用PMU模块供电)

而安装有调参软件的PC/Mac端则使用USB-MicroUSB转接线和飞控连接。

具体连接可查看说明书:
M600pro:https://dl.djicdn.com/downloads/m600%20pro/20180417/Matrice600_Pro_User_Manual_v1.0_CHS.pdf
A3/A3pro:https://dl.djicdn.com/downloads/a3/20170825/A3A3Pro_User_manual_cn_v1.4.pdf

4.运行示例程序步骤(连接好硬件)

(1)下载SDK源码(注:M600pro 用的 OSDK V3.9)
(2)下载调参软件DJI Assistant2 (Enterprise Series) 到Windows/Mac电脑上(在大疆官网),下载DJI GO APP到手机/平板上
(3)将飞行器/飞控用USB线连接到装有Assistant2的PC,打开DJI Assistant2,在SDK中勾选Enable API Control。
(4)打开linux命令行,将用户添加到dialout组中,以获取uart通信的读/写权限。
输入命令:sudo usermod -a -G dialout $USER 然后注销用户帐户并再次登录使权限生效。
(5)插上USB转串口后,查看串口设备,输入
dmesg | grep ttyS*
通过此法确定新插入的串口对应的USB串口号是ttyUSB0
注:如果使用妙算,其对应的串口号如下图:【
DJI OSDK 二次开发过程记录 - 图4
(6)进入源码根目录。执行如下命令:
mkdir build
cd build
cmake ..
make

(7)到https://developer.dji.com/register/完成开发者注册,并创建APP,然后获取APP ID和密钥,
之后进入下载好的源码的bin/目录下,修改用户配置文件Userconfig.txt。配置文件如下:
app_id : your_app_id_here //App ID
app_key : your_key_here //Key
device : /dev/ttyUSB0 //USB连接飞控后在电脑中显示的串口名称
baudrate : 230400 //在 DJI Assitant 2 中修改的波特率

(8)执行示例程序,并在Assistant2中查看仿真轨迹。
cd bin
./djiosdk-flightcontrol-sample UserConfig.txt

(9)新设备使用SDK需要激活,主要是连接好Assistant2并保持网络连接

5.关于妙算的使用

1.注意写好的程序拷到妙算上需要重新编译一遍才能执行。

2.使用manifold2时,网上有些博客写了刷机、刷源,人家是把linux搞奔溃了才这样做,不要盲从。


3.经纬 M600 可使用妙算 Manifold 2 进行 Onboard SDK开发,但是无法应用于图像获取相关的功能。因此需要外接USB摄像头到妙算2。

  • 使用DJI OSDK 的高级感知功能时,需使用USB 线接收无人机视觉感知系统的原始图像数据。

6.例程控制无人机实飞需要解决的问题

(1)启动问题:写成自启动文件/使用SSH远程登陆妙算

方法一:写好脚本并将脚本设置为开机自启动
以例程djiosdk-flightcontrol-sample的启动为例,
(前提:在我们的./build/bin目录下,我已经可以在SSH或终端中,输入命令: ./djiosdk-flightcontrol-sample,运行成功)

第一步:制作sh脚本
在程序sample的同级目录即~/bin下,使用如下命令:

  1. sudo vim clientStart.sh

(或者用gedit也行)
输入如下脚本内容:

  1. #!/bin/sh
  2. cd sample所在目录
  3. ./djiosdk-flightcontrol-sample

(其实就是将程序运行路径与程序执行命令写在了一个脚本里)
第二步:修改clientStart.sh的权限
在主界面里输入以下命令:

  1. sudo chmod 777 ~/所在目录/clientStart.sh

一定要修改这个权限,否则无法执行

第三步:向rc.local添加我们制作的这个脚本,用于开机启动。
使用命令:
sudo vim /etc/rc.local

在exit 0的上一行,写入如下语句:
~/所在目录/clientStart.sh start
保存退出编辑器

上面的做完后,重启,sample就可以自动运行了,以后,只要一通电,它就会自己运行。
方法二:使用ssh搭建妙算的远程控制台

manifold2可用网线或Wi-Fi(仅Manifold2-G)连接网络
步骤:

  1. 笔记本和妙算均连接手机热点或者路由器信号,笔记本需要安装SSH。
  2. 在妙算上,打开终端,输入ifconfig -a,查看妙算的IP

如果用的是路由器(有线),看的是eth0中IP地址
如果用的是热点,需要看wlan0这一项中IP地址
image.png

3.笔记本打开终端,输入ssh -x dji@IP地址。 注:只能终端操作,不能看到妙算的桌面
image.png

如何连接图形化界面:
https://blog.csdn.net/weixin_42232749/article/details/81624156

测试记录:
3.23-3.24
测试 起飞降落 功能
运行例程,模拟器中飞机不起飞, 报错提示MOTOR_FAIL_ASSISTANT_PROJECTED
解决方法:手机连接好遥控器,确保遥控器和调参软件同时打开

模拟器中仿真正常,但实际电机不转,APP显示电调异常

DJI OSDK 二次开发过程记录 - 图7
解决方案: 不使用系留装置时,两根电源线要接起来。

连接后电机仍不转,后来了解到,使用USB 连接无人机和用户电脑时,无人机将会进入安全保护模式,在该模式下,用户无法使用遥控器或OSDK 控制无人机解锁或启动无人机的电机。

3.25
问题描述:只接USB-TTL的RX和TX、不接microusb时,会报如下错误
image.png
问题原因:没有共地,需要把飞控API的GND和USB转ttl的GND连起来(上妙算后电机正常转动)

3.27
脚本文件开机自启动正常,程序可以运行
问题记录:
(1)A3飞控指示灯红色慢闪,低电压报警,此时无法启动电机,需要充电。
(2)遥控器的模块自检出现版本不匹配,可以多重启几次无人机,直到正常。