前言
此文档针对 DJI 经纬 M210V2+OnboardSDK3.9
项目所使用的 NANO 账户密码:962464
最后修改时间:202006111601
开发者:vanguard 联系方式:vanguard6@foxmail.com
注意事项
使用 OSDK 开发应用程序时,为保护开发者免受意外,请注意如下事项:
• 在使用 OSDK 开发应用程序或测试基于 OSDK 开发的应用程序时,请取下桨叶;
• 无人机电机在转动时,请勿靠近;
• 请勿向无人机电源输出接口输入大功率电流;
为降低基于 OSDK 开发的应用程序因内部故障导致无人机损毁或意外事件的发生,DJI
强烈要求开发者使用 DJI Assistant 2 中的模拟器模拟无人机的飞行状态,并根据模拟器中
的数据和日志信息调试应用程序,降低无人机损毁或意外事件发生的风险,避免不必要的损
失。
1、M210V2 Onboard SDK 3.9 开发
官方链接:
https://developer.dji.com/onboard-sdk/documentation/development-
workflow/environment-setup.html#ubuntu-linux
启用 OSDK 控制功能
为使基于 OSDK 开发的程序能够与飞行平台间正常通信,请在 DJI Assistant2 中启用
OSDK API 控制功能。
(1)Ubuntu Linux 开发环境要求:
具体设置为:
①Opencv3.3.1(官方推荐),源码编译全安装,步骤详见 opencv 安装(若不用视觉相关,
可不安装);
②安装 LibUSB 并添加 DJI USB 设备节点
sudo apt-get install libusb-1.0-0-dev //用于读取双目摄像头、FPV 图像
③添加 UART 读写权限
1)使用 sudo usermod -a -G dialout $USER 命令将用户添加至 dialout 组中。
2)重新登录所添加的账户后,该账户即可获取 UART 读写权限。
④如需在 M210 系列的无人机上使用 OSDK 中的视觉功能,使 Linux 系统能够获取并标
识 DJI 的设备:
1)在/etc/udev/rules.d/目录下创建文件 DJIDevice.rules
2 ) 在 DJIDevice.rules 文 件 中 添 加 SUBSYSTEM=="usb", ATTRS{idVendor}=="2ca3",
MODE="0666"
3)重新启动电脑后,系统即可识别 DJI USB 设备
⑤sudo apt-get install libavcodec-dev libswresample-dev
⑥sudo apt-get install libopencv-dev
(2)OSDK 功能
https://developer.dji.com/cn/onboard-sdk/
(3)环境配置以及测试(PC 测试环境 Ubuntu 1604)
https://developer.dji.com/onboard-sdk/documentation/development-workflow/sample-
setup.html#linux-onboard-computer
设备连接:
使用 USB 转 TTL 线(FT232BL)和双头 USB 线连接计算机和无人机。
可参照无人机连接妙算。
具体步骤:
①配置环境,详见(1)开发环境要求
②注册大疆开发者账户,新建例程获取开发者 ID 以及 KEY
https://developer.dji.com/user/apps/#all
③下载 SDK3.9,见文件/package/Onboard-SDK-master.zip
https://github.com/dji-sdk/Onboard-SDK
④在命令行实现:解压并进入文件,创建 build 文件夹并进入
unzip xxx
mkdir build
cd build
⑤cmake .. -DADVANCED_SENSING=ON -DWAYPT2_CORE=ON
/*获取高级图像感知,若在线编译出错,请使用离线包“/package/ Onboard-SDK-Resources-
advanced-sensing-2.0.3-armv8.zip”按照文档“OSDK3.9 离线安装 AD 和 WPv2.pdf”进行编译
*/
⑥make
⑦将获取的 ID 和 KEY 填入文件 UserConfig.txt
/Onboard-SDK-master/sample/platform/linux/common/ UserConfig.txt
⑧复制 UserConfig.txt 到/Onboard-SDK-master/build/bin
⑨使用串口连接电脑和无人机,打开无人机和遥控器,运行 demo
进入/Onboard-SDK-master/build/bin
运行:./djiosdk-flightcontrol-sample UserConfig.txt
可使用公对公 USB 数据线连接无人机和电脑,运行 DJI Assistant 2 For Matrice(已经安装好
调参软件),进行模拟仿真,根据提示输入命令,观察无人机状态。
(4)环境配置以及测试(Nvida Jetson Nano)
①清除 TF 卡(高速卡),格式化
②下载官方镜像,见文件 jetson-nano-sd-r32.1-2019-03-18.zip,并解压
③将 TF 卡插入电脑,打开软件 Win32DiskImager-1.0.0
加载 img 镜像,然后写入
④将 TF 卡插入 Nano,插上电源,进行简单的设置,就可进入 Ubuntu 系统。
⑤按照上文步骤配置环境
⑥编译
A, 解压 OnboardSDKmaster,进入文件夹,新建文件 build
B, 进入 build,执行:
cmake .. -DADVANCED_SENSING=ON -DWAYPT2_CORE=ON //获取高级图像感知
(ps:下载较慢,可以使用离线下载源码包)
C, 下载最新的 advanced-sensing 源码包
https://github.com/dji-sdk/Onboard-SDK-Resources/tree/advanced-sensing-2.0.3-armv8
将下载好 Onboard-SDK-Resources-advanced-sensing-2.0.3-armv8.zip 解压
将解压后的文件 src 和 inc 文件放到 Onboard-SDK-master\osdk-core\advanced-sensing-
2.0.3 目录下。详见文件:
https://mail.qq.com/cgi-
bin/mail_spam?action=check_link&url=https://djisdksupport.zendesk.com/attachments/toke
n/Zb2OYgW5XzbOHpKFWM6hushkI/?name=OSDK3.9%25E7%25A6%25BB%25E7%25BA%25BF
%25E5%25AE%2589%25E8%25A3%2585AD%25E5%2592%258CWPv2.pdf&mailid=FQAHaHMCBg
UFHg1VQlRtVUlVRwJWWXR0dW16ZWEHZVIJ&spam=0
OSDK3.9 离线安装 AD 和 WPv2.pdf
⑦将 ID 和 KEY 填入文件 UserConfig.txt
/Onboard-SDK-master/sample/platform/linux/common/ UserConfig.txt
⑧复制 UserConfig.txt 到/Onboard-SDK-master/build/bin
⑨使用串口连接电脑和无人机,打开无人机和遥控器,运行 demo
进入/Onboard-SDK-master/build/bin
运行:./djiosdk-flightcontrol-sample UserConfig.txt
可使用公对公 USB 数据线连接无人机和电脑,运行 DJI Assistant 2 For Matrice(已经安装好
调参软件),进行模拟仿真,根据提示输入命令,观察无人机状态。
2、新建测试 app
(1)在/Onboard-SDK-master/sample/platform/linux 目录下创建 selfDemo 文件夹
(2)编写 selfDemo.cpp 文件,selfDemo.hpp 文件,CMakeLists.txt main.cpp
Ps:可直接复制例程,然后修改代码,修改 CMakeLists.txt 中的生成的可执行文件名称
如:
将 cameragimbal 修改为 selfDemo,并保存
(3)打开/Onboard-SDK-master/sample/platform/linux 下的 CMakeLists.txt(与上面那个不
同,目录少一级)
如图,增加一句代码,并保存
(4)进入/Onboard-SDK-master/build
运行:make
进入/Onboard-SDK-master/build/bin
可以看到结果如下,则正确。
3、视觉检测辅助降落
无人机完成巡航任务后,将悬停在起始点上方,手动拨动遥控器的模式切换按键,使用
OnboardSDK 接管无人机,进行降落。下视视觉系统获取的图像是灰度图像,分辨率为
320*240,采用自适应阈值分割,进行圆检测,获取检测到的圆的圆心,将圆心坐标与图像
坐标中心进行差值计算,获取中心之间的像素差值,标定相机坐标系和无人机机体坐标系,
将差值送入控制器,控制无人机回到中心。
(1)自适应阈值分割
自适应阈值法(adaptiveThreshold),根据图像不同区域亮度分布,计算其局部阈值,对
于图像不同区域,能够自适应计算不同的阈值,适用于光照分布不均匀的图像。使用方法如
下:
cv::Mat AdaptImage;
adaptiveThreshold(gray,AdaptImage,255,0,THRESH_BINARY_INV,7,8);
(2)滤波
噪声在图像当中常表现为一引起较强视觉效果的孤立像素点或像素块。简单来说,噪声
的出现会给图像带来干扰,让图像变得不清楚。
①中值滤波
中值滤波本质上是统计排序滤波器(包括最小值滤波器和最大值滤波器)的一种,中值
滤波对图像特定噪声类型(椒盐噪声)会取得比较好的去噪效果,也是常见的图像去噪声与
增强的方法之一。在本例中的使用,详见代码。
②高斯滤波是一种线性平滑滤波,适用于消除高斯噪声高斯滤波。在本例中的使用,详
见代码。
(3)Hough 圆检测
计算轮廓点处的梯度向量,然后根据搜索的半径 R 在该梯度方向距离轮廓点距离 R 的
开始设置航线加载航线开始巡航回到起始点,悬停拨动Mode SwitchOSDK获取权限降落至2m高度获取降落标志图像自适应阈值分割中值滤波获取中心差值无人机位置控制降落结束高斯滤波Hough圆检测
两边各投一点,最后根据投票结果图确定圆心位置。
4、无人机精确降落工程(NANO+M210V2)
(1)代码工程
/软件/Onboard-SDK-master
新 建 的 工 程 具 体 位 置 : / 软 件 /Onboard-SDK-master/sample/platform/linux/advanced-
sensing/onboard_mission
(2)NANO 与 M210V2 连接
电源 Power 接 NANO;USB1 一端接无人机 USB 口,另一端接 NANO 任意 USB 口;USB2 一
端(USB 端)接 NANO 任意 USB 口,另一端接无人机“3”号接口,黄色标签向上。
(注意:
为避免干扰无人机的正常工作,请确保机载计算机的电压在 18V~26V 间,电流恒定为
2A;
在 utility/bin/ 中 设 置 开 启 或 关 闭 电 源 接 口 ; ./M210ConfigTool --usb-port
/dev/ttyACM0 --config-file UserConfig.txt --power-supply on)
(3)运行方式
所有代码、命令已加入自启动,可以在/etc/rc.local 中查看,设置方式参考 6.7 设置
Ubuntu18 自启动。
5、其他:
(1)无法获取图像,检测 usb 是否接入
ls /dev/ttyUSB0
(2)关闭 USB 连接时读取双目视觉图像时禁止起飞
首先将 utility/bin/linux/x86-64”下的 M210ConfigTool 复制到/build/bin 目录下
运 行 : ./M210ConfigTool --usb-port /dev/ttyACM0 --config-file UserConfig.txt --usb-
connected-flight on
此命令已加入自启动。
(3)安装 Code-OSS (Nvida Jetson Nano 专用)
git clone https://github.com/JetsonHacksNano/installVSCode
cd installVSCode
./installVSCode.sh
(4)OpenCV 安装
1、下载 opencv3.3.1 source 版本
2、解压 unzip xxx
3、卸载(如有必要)
make uninstall
cd ..
sudo rm -r build
4、安装依赖项
安装依赖项:https://blog.csdn.net/u013066730/article/details/79411730
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev
libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-
dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3.5-dev
sudo apt-get install ffmpeg
5、进入文件,新建 build 文件
cd opencv-3.3.1 # 进入 opencv 文件夹
mkdir build # 创建 build 文件夹
cd build # 进入 build 文件夹
cmake -D CMAKE_BUILD_TYPE=Release -D
CMAKE_INSTALL_PREFIX=/usr/local .. #最后的两个点不能省,与上
一行是一句的
sudo make #编译过程十分的漫长
sudo make install #安装完成
6、sudo apt-get install python-opencv
7、测试
python
import cv2
8、opencv 环境配置
首先需要将 opencv 的库添加至路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开后添加: