DJI ROS dji_sdk 源码分析|整体框架
DJI ROS dji_sdk 源码分析|整体框架
- launch文件
- CMakeLists.txt
- cpp文件
- main.cpp
OSDK 是一个用于开发无人机应用程序的开发工具包,基于OSDK 开发的应用程序能够运行在机载计算机上(如Manifold 2),开发者通过调用OSDK 中指定的接口能够获取无人机上的各类数据,经开发者设计的软件逻辑和算法框架,执行相应的计算和处理,生成对应的控制指令控制无人机执行相应的动作,实现如自动化飞行、负载控制和视频图像分析等功能。

本篇博客通过对dji_sdk 源码分析梳理出了整体框架。
launch文件
运行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="123456"/><param name="app_version" type="int" value="1"/><param name="align_time" type="bool" value="false"/><param name="enc_key" type="string" value="abcd1234"/><param name="use_broadcast" type="bool" value="false"/></node>
</launch>
节点的名字为dji_sdk_node ,之后可以看CMakeLists.txt 可以看这个节点对应的 cpp文件。
节点有几个参数,需要配置。
- acm_name 不用管
- serial_name 串口的名称
- baud_rate 波特率
- app_id 申请的app id
- app_version 不用管
- align_time 是否开启时间同步
- enc_key 申请的app id 对应的KEY
- use_broadcast 是否使用广播,默认不使用
CMakeLists.txt
前面的依赖配置就不看了,直接看 exe生成部分
add_executable(dji_sdk_nodesrc/main.cppsrc/modules/dji_sdk_node_control.cppsrc/modules/dji_sdk_node_services.cppsrc/modules/dji_sdk_node.cppsrc/modules/dji_sdk_node_mission_services.cppsrc/modules/dji_sdk_node_subscriber.cppsrc/modules/dji_sdk_node_publisher.cppsrc/modules/dji_sdk_node_mobile_comm.cppsrc/modules/dji_sdk_node_payload_comm.cppsrc/modules/dji_sdk_node_time_sync.cpp)
依赖的cpp文件在 src文件夹下和src/modules文件夹下
cpp文件
main.cpp
首先来看 main.cpp
该文件完成 ros的最基础功能,然后对DJISDKNode类的实例化
#include <dji_sdk/dji_sdk_node.h>
包含dji_sdk_node.h,DJISDKNode类的定义就在这个文件中。
int main(int argc, char **argv) {ros::init(argc, argv, "dji_sdk");ros::NodeHandle nh;ros::NodeHandle nh_private("~");
ros 节点的初始基本操作
DJISDKNode* dji_sdk_node = new DJISDKNode(nh, nh_private);
对DJISDKNode类的实例化
ros::AsyncSpinner spinner(4); // Use 4 threadsspinner.start();
开启4个线程
ros::waitForShutdown();delete dji_sdk_node;dji_sdk_node = NULL;return 0;
}
结束部分
DJISDKNode类的定义在dji_sdk_node.hpp文件中
其中的实现在主要在dji_sdk_node.cpp中,特殊功能的在modle文件夹下的其它对应cpp文件中实现
相关文章:
DJI ROS dji_sdk 源码分析|整体框架
DJI ROS dji_sdk 源码分析|整体框架launch文件CMakeLists.txtcpp文件main.cppOSDK 是一个用于开发无人机应用程序的开发工具包,基于OSDK 开发的应用程序能够运行在机载计算机上(如Manifold 2),开发者通过调用OSDK 中指定的接口能够…...
HT32合泰单片机开发环境搭建和配置教程
HT32合泰(Holtek)单片机开发环境搭建安装教程 前言 最近在准备合泰杯的比赛,在看合泰官方的PPT和数据手册学习,顺便做个合泰单片机的开发环境搭建教程。 合泰杯比赛发放的开发板是ESK32-30501,用的单片机是HT32F52352。 合泰杯官网地址&a…...
动态内存分配之伙伴算法
伙伴算法 伙伴算法是一种在计算机内存管理中使用的算法,用于分配和释放内存。它是一种基于二叉树的动态内存分配算法,可以高效地分配和合并内存块。伙伴算法是一种按照固定大小分配内存的算法,例如,每个内存块的大小为2的n次幂&a…...
CGAL 根据扫描线方向和角度对法向量进行重定向
目录一、算法原理1、主要函数二、代码实现一、算法原理 最小生成树对法向量定向的结果在具有许多尖锐特征和遮挡的机载点云数据中结果并不理想。scanline_orient_normals()是专门用于具有扫描线特性的点云法向量重定向的替代方法。它充分利用了某些激光雷达扫描器的LAS特性&…...
一个C#开发的开源的快速启动工具
更多开源项目请查看:一个专注推荐.Net开源项目的榜单 平常计算机安装软件比较多、或者工作涉及的文件比较多,很多人都会直接放在桌面,一方面不安全,还不容易查找,这时候我们往往,都会放在其他硬盘内&#x…...
Paddle项目调试记录
PaddlePaddle是百度公司提出的深度学习框架。近年来深度学习在很多机器学习领域都有着非常出色的表现,在图像识别、语音识别、自然语言处理、机器人、网络广告投放、医学自动诊断和金融等领域有着广泛应用。面对繁多的应用场景,深度学习框架有助于建模者…...
3月11日,30秒知全网,精选7个热点
///微盟集团宣布接入百度文心一言 据介绍,微盟SaaS产品和数字营销服务将与文心一言的技术能力实现深度融合,通过AIGC技术,深化微盟在营销AI创意内容生产、智能营销、智能客服、智能经营等方面的布局 ///T3出行与华为云深化业务合作 双方将在…...
C win32基础学习(四)
上一篇我们已经介绍了关于窗口处理函数的知识。本篇我们说一下注册窗口类,创建窗口和显示窗口的内容。 前文 窗口创建过程 定义WinMain函数 定义窗口处理函数(自定义,处理消息) 注册窗口类(向操作系统写入一些数据) 创建窗口&…...
Java 日期时间API(Java 8及以上)
Java 8及以上版本提供了新的日期时间API,其中包括了LocalDate、LocalTime、LocalDateTime、ZonedDateTime、Duration、Period等类,这些类提供了更加丰富和灵活的日期时间操作方法。 LocalDate LocalDate类表示一个本地日期,不包含时间和时区…...
DHCP的配置
实验目的熟悉DHCP的应用场景掌握DHCP的配置方法实验拓扑DHCP的配置如图15-2所示: 图15-2:DHCP的配置 实验步骤配置IP地址<Huawei>system-view Enter system view, return user view with Ctrl+Z....
JavaWeb14-线程池
目录 1.传统线程的缺点 2.线程池的定义 3.线程池的优点 4.线程池的创建/使用(2类7种) 4.1.通过Executors(执行器)自动创建(6种) ①Executors.newFixedThreadPool:创建⼀个固定⼤⼩的线程池…...
[qiankun+nuxt]子应用请求本地文件报错404
前言 目前公司的前端架构是qiankunnuxt做的微前端项目 问题说明 在子应用中,前端需要模拟一些数据,方便后期演示调整而不需要重新打包 所以将一些数据存储到了本地的json文件中,但是获取时报了404的错误,找不到该文件。 页面报错…...
【Qt网络编程】实现TCP协议通信
文章目录概要:本期主要讲解QT中对于TCP协议通信的实现。一、TCP协议二、Qt中TCP协议处理1.QTcpSocket2.QTcpServer三、Qt实现TCP通信1.客户端2.服务器端结尾概要:本期主要讲解QT中对于TCP协议通信的实现。 一、TCP协议 传输控制协议(TCP&am…...
Webpack打包———处理样式资源
基本使用 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles&a…...
VP记录:Codeforces Round 857 (Div. 2) A~D
传送门:CF A题 Likes: 这道题的题意很变态,十分的难懂,简直就是一坨shit,这场比赛最后被骂是有原因的 简单来说就是对于一个项目,每一个人都能对此加一或者减一,最后问你这个项目每一时刻最大和最小是多少.题目中只说明了只能点赞后才能取消,并没有解释存在取消操作必存在点…...
Docker常用项目实战演练
docker镜像源的修改 linux环境下编辑 /etc/docker/daemon.json vi /etc/docker/daemon.json #如添加如下网易镜像源 { "registry-mirrors": ["http://hub-mirror.c.163.com"] }docker run命令详细解释 日常工作中用的比较多的是docker run命令ÿ…...
Linux进程间通信-FIFO命名管道
Linux进程间通信-FIFO命名管道 1、概述 管道因为没有名称,所以只用于进程间的亲缘通信。为了克服这一缺点,提出了命名管道(FIFO),又称命名管道、FIFO文件。 FIFO不同于无名管道,它提供与之关联的路径名,该路径名以FIF…...
【Kafka】记录一次基于connect-mirror-maker做的Kafka集群迁移完整过程
文章目录背景环境工具选型实操MM1MM2以MM2集群运行以Standalone模式运行验证附录MM2配置表其他背景 一个测试环境的kafka集群,Topic有360,Partition有2000,部署在虚拟机上,由于多方面原因,要求迁移至k8s容器内&#x…...
实现VOC数据集与COCO数据集格式转换
实现VOC数据集与COCO数据集格式转换2、将voc数据集的xml转化为coco数据集的json格式2、COCO格式的json文件转化为VOC格式的xml文件3、将 txt 文件转换为 Pascal VOC 的 XML 格式<annotation><folder>文件夹目录</folder><filename>图片名.jpg</file…...
常用的密码算法有哪些?
我们将密码算法分为两大类。 对称密码(密钥密码)——算法只有一个密钥。如果多个参与者都知道该密钥,该密钥 也称为共享密钥。非对称密码(公钥密码)——参与者对密钥的可见性是非对称的。例如,一些参与者仅…...
移动开发终极指南:如何利用stb库在Android和iOS平台实现高性能图像处理
移动开发终极指南:如何利用stb库在Android和iOS平台实现高性能图像处理 【免费下载链接】stb stb single-file public domain libraries for C/C 项目地址: https://gitcode.com/GitHub_Trending/st/stb 在移动应用开发中,图像处理是提升用户体验…...
7个强力策略!Seafile插件市场终极推广指南:提升曝光与用户采纳率全攻略
7个强力策略!Seafile插件市场终极推广指南:提升曝光与用户采纳率全攻略 【免费下载链接】seafile High performance file syncing and sharing, with also Markdown WYSIWYG editing, Wiki, file label and other knowledge management features. 项目…...
网易云音乐评论爬虫实战:破解加密接口抓取数据
一、接口分析:找准评论数据请求入口 在抓取网易云音乐歌曲评论时,我们不难发现,页面并不会随着翻页刷新跳转,评论的加载属于异步AJAX请求。这类接口有一个明显特点:接口地址固定不变,分页切换完全依靠请求载…...
【CTF实战解析】ACTF2020新生赛Exec:从PING功能到命令注入的完整攻击链
1. 从PING功能到命令注入的漏洞挖掘 第一次看到这个ACTF2020新生赛的Exec题目时,我差点以为就是个简单的网络测试题。毕竟页面上只有一个PING功能的输入框,看起来人畜无害。但作为一个老CTF选手,我深知越是简单的界面,越可能暗藏玄…...
VScode+SFTP插件保姆级配置教程:2025年最新远程同步方案(附常见错误排查)
VScodeSFTP插件2025终极配置指南:从零搭建高效远程开发环境 每次在咖啡厅修改完代码,却发现服务器上的版本还停留在上周?团队协作时总有人忘记同步最新文件?2025年的远程开发早已不是简单的文件传输,而是无缝衔接的云端…...
Scoop国内镜像加速全攻略:从安装失败到高效下载的完整解决方案
1. Scoop安装失败的常见原因分析 第一次接触Scoop的Windows用户,90%都会在安装阶段卡壳。我刚开始用的时候也踩过不少坑,后来帮团队部署开发环境时更是见识了各种奇葩错误。总结下来主要有三类典型问题: 网络连接问题是最常见的拦路虎。由于S…...
TMS320F280049系列文章之第二章 工程搭建实战:从零配置到路径设置的避坑指南
1. 工程准备与环境搭建 第一次接触TMS320F280049开发的朋友,可能会被复杂的工程配置劝退。别担心,跟着我的步骤走,保证你能顺利搭建第一个工程。我用的环境是CCS10.3.1和C2000Ware_4_01,这也是目前比较稳定的组合。 先说说准备工作…...
效率提升秘籍:用快马平台快速生成魔鬼面具试戴应用代码骨架
效率提升秘籍:用快马平台快速生成魔鬼面具试戴应用代码骨架 最近在做一个有趣的个人项目——魔鬼面具在线试戴应用。作为一个前端开发者,我深知从零开始搭建这种交互式应用需要花费不少时间在基础框架上。幸运的是,我发现了InsCode(快马)平台…...
蚕豆剥豆机设计(机械原理设计)【设计说明书+机构简图+SW三维+stp通用格式+运动仿真】 备注:此份资料没有CAD装配
蚕豆剥豆机作为农业机械化的重要工具,其核心作用在于通过机械结构替代人工操作,显著提升剥豆效率并降低劳动强度。其设计需综合考量豆荚的物理特性、剥壳力传递路径及豆粒完整性保护等关键因素。机械原理设计以连杆机构、凸轮机构及夹持机构为基础&#…...
精准拓客新范式:号码核验行业的痛点破解与技术赋能之路,氪迹科技法人号码核验系统,阶梯式价格
在B端拓客进入精细化竞争的深水区,“有效线索”成为企业突破增长瓶颈的核心抓手,而号码核验作为拓客流程的前置关键环节,其服务质量直接决定了后续线索转化效率与投入回报比。据Gartner相关报告显示,传统拓客渠道的单个有效线索成…...
