搭建DJI 无人机Onboard SDK ROS开发环境及测试
搭建DJI 无人机Onboard SDK ROS开发环境及测试
- 功能包简介
- 开发环境搭建
- 测试功能包
- 连接设备
- 启动SDK
功能包简介
ROS功能包名称:dji_sdk
功能包功能:用于DJI 板载SDK的ROS版本
OSDK 是一个用于开发无人机应用程序的开发工具包,基于OSDK 开发的应用程序能够运行在机载计算机上(如Manifold 2),开发者通过调用OSDK 中指定的接口能够获取无人机上的各类数据,经开发者设计的软件逻辑和算法框架,执行相应的计算和处理,生成对应的控制指令控制无人机执行相应的动作,实现如自动化飞行、负载控制和视频图像分析等功能。
主要优势
兼容广泛的软硬件平台
使用OSDK 开发的应用程序能够运行在主流的嵌入式硬件平台上,如STM32等,也可运行在主流的嵌入式操作系统和软件架构中,如Linux、ROS及RTOS,开发者按照跨平台移植中的步骤执行所需的工作后,即可在不同版本的软硬件平台上运行基于OSDK 开发的应用程序。满足复杂的控制需要
通过调用OSDK 开放的接口,即可使无人机按照指定的控制逻辑在极端环境中实现自主飞行、负载控制及图像感知等应用功能。支持丰富的拓展方案
OSDK 提供了丰富的接口,方便开发者使用第三方应用程序和算法框架,使用图像识别、自主巡航及SLAM 等技术开发出专业的应用软件,此外,还方便开发者接入第三方传感器、相机或检测设备,采集所需的数据信息,满足用户个性化的应用功能和控制需求。
该功能包为 DJI 机载 SDK 提供了 ROS 接口,使用户能够使用 ROS 消息和服务完全控制无人机。
目前支持的无人机平台有:
- DJI M300
- DJI M100
- M600
- M210
- 配备 A3/N3 飞控的无人机。
功能包依赖DJI SDK 核心库,链接地址为:DJI SDK 核心库
注意:功能包有很多的版本,要根据自己的平台,选择正确的版本
其中4.0和4.1是能够支持M300无人机飞行平台的
对于 A3/N3 飞控的无人机,最新的支持版本是3.8版本
ROS WIKI地址:http://wiki.ros.org/dji_sdk
开发环境搭建
下载 Onboard-SDK-ROS
git地址:https://github.com/dji-sdk/Onboard-SDK-ROS
下载指定分支命令
git clone -b 分支名+仓库地址
具体指令如下:
git clone -b 3.8 https://github.com/dji-sdk/Onboard-SDK-ROS
放到ROS的工作空间中,进行编译
catkin_make
编译的时候,会检测依赖库,检测到没有Onboard-SDK的时候会自动下载,这时候会花费些时间
自动下载完成后,会在功能包里,出现两个文件夹:Onboard-SDK-3.8.1、Onboard-SDK-3.8.1-build
中间还会安装一些依赖的库,所以会慢些,等到最后报了一个这样的错误:
CMake Error at /home/jk-jone/jone_ws/devel/share/dji_sdk/cmake/dji_sdkConfig.cmake:197 (find_package):
Could not find a package configuration file provided by “nmea_msgs” with
any of the following names:
nmea_msgsConfig.cmake
nmea_msgs-config.cmake
Add the installation prefix of “nmea_msgs” to CMAKE_PREFIX_PATH or set
“nmea_msgs_DIR” to a directory containing one of the above files. If
“nmea_msgs” provides a separate development package or SDK, be sure it has
been installed.
Call Stack (most recent call first):
/opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package)
Onboard-SDK-ROS/dji_sdk_demo/CMakeLists.txt:10 (find_package)
这个好办,就是缺少nmea_msgs包的依赖,下载就行,指令如下:
sudo apt-get install ros-noetic-nmea-msgs
其中的noetic需要根据自己ros的版本进行替换
然后再次编译
编译成功!
测试功能包
dji_sdk 的 launch 文件夹中有一个 sdk.launch 文件
原文件如下:
<launch><node pkg="dji_sdk" type="dji_sdk_node" name="dji_sdk" output="screen"><!-- node parameters --><param name="acm_name" type="string" value="/dev/ttyACM0"/><param name="serial_name" type="string" value="/dev/ttyUSB0"/><param name="baud_rate" type="int" value="921600"/><param name="app_id" type="int" value="your app id here"/><param name="app_version" type="int" value="1"/><param name="align_time" type="bool" value="false"/><param name="enc_key" type="string" value="your app key here"/><param name="use_broadcast" type="bool" value="false"/></node>
</launch>
注意这里默认配置的串口设备是 /dev/ttyUSB0 ,这里可以做一个设备修改和绑定,到时候也要增加串口的访问权限
波特率默认是921600,与上位机的设置要一致
app_id
enc_key
需要从官网上申请,申请下来后,填入,即可。
连接设备
用一个USB转TTL模块,将TTL端的接口与无人机API接口连接,USB端插入电脑。
通过dji 上位机,设置API串口波特率为921600(ROS 默认订阅的主题相对较多,为保证ROS 与基于OSDK 开发的应用程序间有足够的通信带宽,UART 的波特率应大于921600,修改完上位机,需要重新启动飞机)
启动SDK
增加串口权限
添加用户组,可长期使用
sudo usermod -aG dialout ${USER}
指定串口单次有效
sudo chmod 777 /dev/ttyUSB0
启动sdk
roslaunch dji_sdk sdk.launch
运行会返回一个错误
ERRORLOG/1 @ AdvancedSensing, L58: Please make sure the connected drone is a M210 and firmware version is supported.
[ERROR] [1675676083.363339870]: drone activation error
[ERROR] [1675676083.363366996]: Vehicle initialization failed
程序默认是用于M210飞机的,当不是该飞机的时候,程序开着避障传感器的功能,冲突了,所以需要修改程序,将避障传感器功能关闭。
在
这几个文件内
#ifdef ADVANCED_SENSINGenable_advanced_sensing = true;ROS_INFO("Advanced Sensing is Enabled on M210.");
#endif
改为:
#ifdef ADVANCED_SENSINGenable_advanced_sensing = false;ROS_INFO("Advanced Sensing is Enabled on M210.");
#endif
编译后,再次运行,会出现程序die掉的情况,很明显是访问了非法地址。
可能还是因为ADVANCED_SENSING的原因,将dji_sdk_node.cpp中的关于ADVANCED_SENSING这个宏里的内容,全部注释掉再次运行
NODES
/
dji_sdk (dji_sdk/dji_sdk_node)
auto-starting new master
process[master]: started with pid [28159]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to d899f17a-a604-11ed-8bc2-87af082c8f87
process[rosout-1]: started with pid [28169]
started core service [/rosout]
process[dji_sdk-2]: started with pid [28176]
STATUS/1 @ init, L55: Attempting to open device /dev/ttyUSB0 with baudrate 921600…
STATUS/1 @ init, L65: …Serial started successfully.
STATUS/1 @ parseDroneVersionInfo, L727: Device Serial No. = 0670169082
STATUS/1 @ parseDroneVersionInfo, L729: Hardware = A3
STATUS/1 @ parseDroneVersionInfo, L730: Firmware = 3.3.8.47
ERRORLOG/1 @ initVirtualRC, L1103: Virtual RC is not supported on this platform!
STATUS/1 @ activate, L1313: version 0x303082F
STATUS/1 @ activate, L1326: Activation successful
STATUS/1 @ verify, L244: Verify subscription successful.
STATUS/1 @ initGimbal, L890: Checking if gimbal is connected …
STATUS/1 @ startPackage, L350: Start package 0 result: 0.
STATUS/1 @ startPackage, L352: Package 0 info: freq=50, nTopics=1.
STATUS/1 @ removePackage, L468: Remove package 0 successful.
STATUS/1 @ initGimbal, L934: Gimbal not mounted!
[ INFO] [1675677533.046816131]: drone activated
[ INFO] [1675677533.060621911]: Use data subscription to get telemetry data!
[ INFO] [1675677533.060638745]: align_time_with_FC set to false. We will use ros time to time stamp messages!
STATUS/1 @ verify, L244: Verify subscription successful.
STATUS/1 @ startPackage, L350: Start package 2 result: 0.
STATUS/1 @ startPackage, L352: Package 2 info: freq=100, nTopics=3.
STATUS/1 @ startPackage, L350: Start package 1 result: 0.
STATUS/1 @ startPackage, L352: Package 1 info: freq=50, nTopics=14.
STATUS/1 @ startPackage, L350: Start package 0 result: 0.
STATUS/1 @ startPackage, L352: Package 0 info: freq=5, nTopics=1.
STATUS/1 @ removePackage, L468: Remove package 0 successful.
STATUS/1 @ startPackage, L350: Start package 0 result: 0.
STATUS/1 @ startPackage, L352: Package 0 info: freq=5, nTopics=12.
STATUS/1 @ startPackage, L350: Start package 3 result: 0.
STATUS/1 @ startPackage, L352: Package 3 info: freq=400, nTopics=1.
运行成功!
并且可以通过日志输出的信息看到订阅了很多的topic
这里总结下:
- 400hz的1个
- 100hz的3个
- 50hz的14个
- 5hz的1个和12个
订阅的初始功能在 dji_sdk_node.cpp
例如
std::vector<Telemetry::TopicName> topicList5hz;topicList5hz.push_back(Telemetry::TOPIC_GPS_DATE);topicList5hz.push_back(Telemetry::TOPIC_GPS_TIME);topicList5hz.push_back(Telemetry::TOPIC_GPS_POSITION);topicList5hz.push_back(Telemetry::TOPIC_GPS_VELOCITY);topicList5hz.push_back(Telemetry::TOPIC_GPS_DETAILS);topicList5hz.push_back(Telemetry::TOPIC_BATTERY_INFO);
之后可以根据使用情况,将没有用到的信息关闭,或者减少频率。减少通信和计算压力。
默认的ROS topic 有
搭建DJI 无人机Onboard SDK ROS开发环境及测试相关推荐
- DJI 无人机 Onboard SDK ROS 功能包demo运行
DJI 无人机 Onboard SDK ROS 功能包demo运行 demo功能 准备测试环境 运行 dji sdk 节点 运行 demo 节点 自动飞行任务 航点自动飞行 兴趣点环绕自动飞行 飞行控 ...
- 大疆无人机二次开发进阶-DJI mobile SDK和DJI onboard SDK联合开发行业应用项目
PS:最近又涉及该项目,增加部分没写内容,记录下详细步骤. 上一篇文章讲到了怎么使用DJI mobile SDK,这次主要讲解DJI mobile SDK和DJI onboard SDK联合开发. a ...
- Astra相机的ROS开发环境配置与使用
Astra相机的ROS开发环境配置与使用 一.Astra相机简介 二.搭建ROS工作空间 1.下载ROS驱动功能包 2.安装依赖 3.配置工作空间 三.配置设备节点 1.固定设备串口号 2.获取设备信 ...
- Android开发实战一之搭建开发环境-附测试实例(已亲测)
使用JDK.Android SDK.Eclipse + ADT搭建开发环境 附测试实例 (已亲测) ----------------------------------------- ...
- ROS入门(ROS安装+编译器配置)详细教程 ROSneotic安装 VScode的ROS开发环境的简单配置
ROS安装 + vscode简单配置 假设你已经安装好了Ubuntu 20.04,并且只有国内网络环境. 换源 Ctrl + Alt + T打开终端 备份并打开 sudo cp /etc/apt/so ...
- 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...
- 【官方搭建入门】JEEWX 捷微开发环境搭建必读
[官方搭建入门]JEEWX 捷微开发环境搭建必读 下载地址: http://git.oschina.net/jeecg/jeewx 1. 标准开发环境:eclipse + maven + jdk7 + ...
- 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(二)
2017一月 23 转载自:http://blog.csdn.net/jdjdndhj/article/details/54691894 搭建IntelliJ IDEA+maven+jetty+Spr ...
- 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)
2017一月 16 转载自 http://blog.csdn.net/jdjdndhj/article/details/54572439 原 搭建IntelliJ IDEA+maven+jetty+S ...
最新文章
- 其他算法-高斯白噪声
- 【杂谈】有三AI知识星球一周年了!为什么公众号+星球才是完整的?
- leetcode910. 最小差值 II(贪心)
- 电大计算机应用基础试卷号2007,电大计算机应用基础(试卷版)计算机试卷7.doc...
- oracle ora 08103,ORA-08103: 对象不再存在
- Nginx做反向代理的问题
- python实现异步的原理_一篇文章理解Python异步编程的基本原理
- 基于simulink的PN码同步的性能仿真
- 通道布线 matlab程序,快速最优通道布线算法
- 接上文安装完opencv后安装viz模块
- 高中数学竞赛和信息学竞赛_将数学竞赛变成编码竞赛
- 驯服烂代码_驯服业力,SauceLabs和Internet Explorer:揭秘之旅
- Java连接Sql Server的过程及遇到的问题(极端新手向)
- 网络游戏行业不能说的秘密
- 小程序最新获取头像和昵称
- 极光笔记丨百亿级数据的实时存取优化与实践
- MSI驱动指南HOWTO
- 万字好文!Redis 到底是怎么实现“附近的人”这个功能的呢?
- 虚拟机黑群晖联机失败问题
- uniapp集成colorUI uView2.0 Vuex