搭建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开发环境及测试相关推荐

  1. DJI 无人机 Onboard SDK ROS 功能包demo运行

    DJI 无人机 Onboard SDK ROS 功能包demo运行 demo功能 准备测试环境 运行 dji sdk 节点 运行 demo 节点 自动飞行任务 航点自动飞行 兴趣点环绕自动飞行 飞行控 ...

  2. 大疆无人机二次开发进阶-DJI mobile SDK和DJI onboard SDK联合开发行业应用项目

    PS:最近又涉及该项目,增加部分没写内容,记录下详细步骤. 上一篇文章讲到了怎么使用DJI mobile SDK,这次主要讲解DJI mobile SDK和DJI onboard SDK联合开发. a ...

  3. Astra相机的ROS开发环境配置与使用

    Astra相机的ROS开发环境配置与使用 一.Astra相机简介 二.搭建ROS工作空间 1.下载ROS驱动功能包 2.安装依赖 3.配置工作空间 三.配置设备节点 1.固定设备串口号 2.获取设备信 ...

  4. Android开发实战一之搭建开发环境-附测试实例(已亲测)

    使用JDK.Android SDK.Eclipse + ADT搭建开发环境      附测试实例     (已亲测) ----------------------------------------- ...

  5. ROS入门(ROS安装+编译器配置)详细教程 ROSneotic安装 VScode的ROS开发环境的简单配置

    ROS安装 + vscode简单配置 假设你已经安装好了Ubuntu 20.04,并且只有国内网络环境. 换源 Ctrl + Alt + T打开终端 备份并打开 sudo cp /etc/apt/so ...

  6. 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  7. 【官方搭建入门】JEEWX 捷微开发环境搭建必读

    [官方搭建入门]JEEWX 捷微开发环境搭建必读 下载地址: http://git.oschina.net/jeecg/jeewx 1. 标准开发环境:eclipse + maven + jdk7 + ...

  8. 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(二)

    2017一月 23 转载自:http://blog.csdn.net/jdjdndhj/article/details/54691894 搭建IntelliJ IDEA+maven+jetty+Spr ...

  9. 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)

    2017一月 16 转载自 http://blog.csdn.net/jdjdndhj/article/details/54572439 原 搭建IntelliJ IDEA+maven+jetty+S ...

最新文章

  1. 其他算法-高斯白噪声
  2. 【杂谈】有三AI知识星球一周年了!为什么公众号+星球才是完整的?
  3. leetcode910. 最小差值 II(贪心)
  4. 电大计算机应用基础试卷号2007,电大计算机应用基础(试卷版)计算机试卷7.doc...
  5. oracle ora 08103,ORA-08103: 对象不再存在
  6. Nginx做反向代理的问题
  7. python实现异步的原理_一篇文章理解Python异步编程的基本原理
  8. 基于simulink的PN码同步的性能仿真
  9. 通道布线 matlab程序,快速最优通道布线算法
  10. 接上文安装完opencv后安装viz模块
  11. 高中数学竞赛和信息学竞赛_将数学竞赛变成编码竞赛
  12. 驯服烂代码_驯服业力,SauceLabs和Internet Explorer:揭秘之旅
  13. Java连接Sql Server的过程及遇到的问题(极端新手向)
  14. 网络游戏行业不能说的秘密
  15. 小程序最新获取头像和昵称
  16. 极光笔记丨百亿级数据的实时存取优化与实践
  17. MSI驱动指南HOWTO
  18. 万字好文!Redis 到底是怎么实现“附近的人”这个功能的呢?
  19. 虚拟机黑群晖联机失败问题
  20. uniapp集成colorUI uView2.0 Vuex

热门文章

  1. Python中Gevent的使用
  2. 从大山走出的阿里首席通信科学家,这次要重返课堂
  3. 分享一个64位的PS安装包
  4. 电信运营商杀入互联网金融 与联通、银行现三大阵营对垒
  5. bat快速生成文件列表和目录列表
  6. 使用cv2进行图像融合
  7. Github注册一直卡在验证环节解决方法
  8. ios 对应 iphone_如何锁定iPhone相机的曝光并专注于iOS
  9. python 表情包制作库_Django+PIL 做一个表情包生成网站
  10. 解决ConEmu中文乱码的问题