DJI ROS dji_sdk 源码分析|整体框架

news2024/11/25 18:40:28

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_node
  src/main.cpp
  src/modules/dji_sdk_node_control.cpp
  src/modules/dji_sdk_node_services.cpp
  src/modules/dji_sdk_node.cpp
  src/modules/dji_sdk_node_mission_services.cpp
  src/modules/dji_sdk_node_subscriber.cpp
  src/modules/dji_sdk_node_publisher.cpp
  src/modules/dji_sdk_node_mobile_comm.cpp
  src/modules/dji_sdk_node_payload_comm.cpp
  src/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.hDJISDKNode类的定义就在这个文件中。

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 threads
  spinner.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文件中实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络考研-第一章学

计算机网学习总结第一章计算机系统概述1.1.1 导学1.1.2 操作系统的特征1.2 操作系统的发展与分类1.3 操作系统的运行环境1.3.1 操作系统的运行机制1.3.2 中断和异常1.3.3系统调用&#xff1a;1.3.4 操作系统的体系结构第一章总结第一章计算机系统概述 1.1.1 导学 1.1.2 操作系…

Nginx 配置实例-反向代理案例一

实现效果&#xff1a;使用nginx反向代理&#xff0c;访问 www.suke.com 直接跳转到本机地址127.0.0.1:8080 一、准备工作 Centos7 安装 Nginxhttps://liush.blog.csdn.net/article/details/125027693 1. 启动一个 tomcat Centos7安装JDK1.8https://liush.blog.csdn.net/arti…

简单粗暴的分布式定时任务解决方案

分布式定时任务1.为什么需要定时任务&#xff1f;2.数据库实现分布式定时任务3.基于redis实现1.为什么需要定时任务&#xff1f; 因为有时候我们需要定时的执行一些操作&#xff0c;比如业务中产生的一些临时文件&#xff0c;临时文件不能立即删除&#xff0c;因为不清楚用户是…

基于FPGA实现正弦插值算法

1、正弦插值的算法分析 1.1 信号在时域与频域的映射关系 在进行正弦算法分析之前&#xff0c;我们回顾一下《数字信号处理》课程中&#xff0c;对于信号在时域与频域之间的映射关系&#xff0c;如下图。 对于上图中的原始信号x(t)&#xff0c;使用ADC对信号进行采样&#xff0…

【操作系统】进程句柄

进程句柄句柄是什么为什么需要句柄作用句柄是什么 先给结论&#xff0c;句柄&#xff08;handle&#xff09;实际上是一个指向指针的指针。 它指向进程所要访问的进程对象的地址&#xff0c;是用来找到目标进程的索引&#xff0c;当我们想要访问对象进程时&#xff0c;就要利…

从一道面试题看 TCP 的吞吐极限

分享一个 TCP 面试题&#xff1a;单条 TCP 流如何打满香港到旧金山的 320Gbps 专线&#xff1f;(补充&#xff0c;写成 400Gbps 更具迷惑性&#xff0c;但预测大多数人都会跑偏&#xff0c;320Gbps 也就白给了) 这个题目是上周帮一个朋友想的&#xff0c;建议他别问三次握手&a…

C#:Krypton控件使用方法详解(第十六讲) ——kryptonCheckedListBox

今天介绍的Krypton控件中的kryptonCheckedListBox。下面介绍控件的外观属性如下图所示&#xff1a;Cursor属性&#xff1a;表示鼠标移动过该控件的时候&#xff0c;鼠标显示的形状。属性值如下图所示&#xff1a;UseWaitCursor属性&#xff1a;表示鼠标在控件中等待时&#xff…

问ChatGPT:零基础如何学好.Net Core?

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 ChatGPT横空出世&#xff0c;一下子让全球互联网企业都慌了&#xff0c;纷纷表示&#xff1a;马上跟进发布ChatGPT&#xff0c;媒体纷纷报道大有改变教培行业。 下面我们问问ChatGPT&#xff1a;零基础如何学好…

EasyCVR视频融合平台开放插件功能:支持EasyNTS与EasyShark抓包

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅…

GPS/GPRS车载定位系统智能终端设计μC/OS-Ⅱ调度液晶显示汽车行驶记录仪电路

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;gps电路 免费下载完整无水印论文报告&#xff08;包含主板电路图和采集板电路图&#xff09; 文章目录一、绪论二、车载智能终端三、车载智能终端的硬件结构及设计四、车载智能终端的软件结构及设计五、总结和展望附录一 汽…

小i机器人登陆纳斯达克:市值4.2亿美元,与苹果打了10年专利侵权官司

‍数据智能产业创新服务媒体——聚焦数智 改变商业要问当前科技圈里最靓的仔是谁&#xff1f;那当然是非 ChatGPT莫属。当下谁能推出真正意义上的中国版ChatGPT&#xff0c;并且在这轮AI浪潮竞争白热化阶段中笑到最后&#xff0c;已经成为人们关注的焦点。美东时间3月9日&…

使用chatgpt写6.5分作文范文

其实使用chatgpt最大的背单词好处就是你可以看到真正的外国人的思维到底是如何的。而且&#xff0c;你也可以看到chatgpt这个模型&#xff0c;如果是编写代码的话&#xff0c;你如果使用中文&#xff0c;它编写的效果是没有英文输入的好的&#xff0c;为什么呢&#xff1f;因为…

Vector - CAPL - log回放模块函数

Replay log回放模块作为我们常见的问题分析小工具,是大部分车载圈老人的必备工具,不过自从CANoe软件11.0之后的版本变动依然无法阻挡每一个车载人使用的热情,除了我们常见的手动回放log外,我们工作中还有一部分低概率以及极低概率出现的问题,这时候我们就需要通过自动化对…

python趣味编程-2048游戏

在上一期我们用Python实现了一个盒子追逐者的游戏&#xff0c;这一期我们继续使用Python实现一个简单的2048游戏&#xff0c;让我们开始今天的旅程吧~ 在 Python 免费源代码中使用 Tkinter 的简单 2048 游戏 使用 Tkinter 的简单 2048 游戏是一个用Python编程语言编码的桌面游…

阅读笔记DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks

zi,t∈Rz_{i,t}\in \mathbb{R}zi,t​∈R表示时间序列iii在ttt时刻的值。给一个连续时间段t∈[1,T]t\in [1, T]t∈[1,T]&#xff0c;将其划分为context window[1,t0)[1,t_0)[1,t0​)和prediction window[t0,T][t_0,T][t0​,T]。用context window的时间序列预测prediction window…

关于异常控制流和系统级 I/O:进程

&#x1f4ad; 写在前面&#xff1a;本文将学习《深入理解计算机系统》的第六章 - 关于异常控制流和系统级 I/O 的 进程部分。CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写&#xff0c;该教材由Randal E. Bryant和David R. OHallaron 合著…

C 去除字符串中重复字母(LeetCode)

&#x1f31f;前言摆烂太久&#xff0c;好久没有更文了&#xff0c;小九和大家一起看看题写写题找回手感吧&#xff0c;也希望这篇文章可以帮助正在寻找解题答案的朋友&#xff0c;你们的支持就是我最大的动力&#xff01;求三连&#xff01;求关注呀&#xff01;&#x1f31f;…

信息系统项目管理师第4版教材的变化:PMBOK第六版和第七版的叠加

昨天下午&#xff0c;软考官方网站突然发布了第4版考纲和教材&#xff0c;这让很多在准备今年上半年信息系统项目管理师考试的考生们有些紧张。那么这次教材改版主要的变化是什么&#xff0c;5月份的考试是否会按照新版的教材来考呢&#xff1f;让我们逐个章节进行分析。信息化…

Spark RDD编程基本操作

RDD是Spark的核心概念&#xff0c;它是一个只读的、可分区的分布式数据集&#xff0c;这个数据集的全部或部分可以缓存在内存中&#xff0c;可在多次计算间重用。Spark用Scala语言实现了RDD的API&#xff0c;程序员可以通过调用API实现对RDD的各种操作&#xff0c;从而实现各种…

数据结构刷题(二十三):47全排列II、51N皇后、37解数独

1.全排列II题目链接思路&#xff1a;回溯之排列问题并且有数组排序标记数组。 回溯三部曲同46. 全排列。过程图&#xff1a;https://programmercarl.com/0047.%E5%85%A8%E6%8E%92%E5%88%97II.html#%E6%80%9D%E8%B7%AF注意&#xff1a;本题的去重操作主要在树层上。就是说同一树…