首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Dji-OSDK (订阅功能)

Dji-OSDK (订阅功能)

作者头像
云深无际
发布2022-01-05 08:17:13
发布2022-01-05 08:17:13
8610
举报
文章被收录于专栏:云深之无迹云深之无迹

关于这个SDK我前面写过几篇文章,不过还不深入以及不深刻。这篇文章写了关于OSDK中消息订阅的相关内容。

Dji Onboard SDK(边缘高性能SDK)

大疆(Dji)SDK思路前的准备(上)

代码语言:javascript
复制
https://developer.dji.com/cn/onboard-sdk/downloads/

这里是官网

代码语言:javascript
复制
https://github.com/dji-sdk/Onboard-SDK/tree/4.1

论坛里面有个人发出这样的声音,巧了,我正在封装。可能在一段时间后,我回去合并一下库,假如。。。人家合并我的话。

代码语言:javascript
复制
https://stackoverflow.com/questions/tagged/dji-sdk

著名搞基论坛上面有个tag,关于dji-sdk的,有空我撸一边

这里应该就是负责这个SDK的员工,点进去有有趣的东西

对于无人机的开发,第一个重要的事情是各个模块之间的信息交互。接着是两个切实相关的主题,控制无人机的飞行以及从无人机中取数据流,数据流可以是状态的信息也可以是从相机回传的视频流。

一个简单的思维导图

SDK虽然庞杂,但是信息的流转的最重要的,尤其是对于一个无人机的应用来说,保证信息流的传输正确是很重要的,所以SDK中有大量的ack,重连,超时等机制,如果没有这些,可能SDK看起来好些。

然后SDK是纯C++编写的,使用起来可能有些门槛,我C写的凑合对于C++我还得学一下啊。因为这个语言据说很上头,一直也不敢学。

无人机有好多传感器,这些数据是不停从各种传感器里面产生。而这些数据是混杂在一起的,具体获得他们是需要用消息订阅的模式,这个东西我感觉是有点和ROS的节点一样。

这是一个订阅节点的订阅的样子

首先就是指明节点的名字是什么,这里的设计是用了枚举,有很多的Topic,具体我会写。

UID 这个地方我理解是统一标识符,身份证的作用。

真实数据的大小,FC(飞控)提供的主题的最大频率,订阅主题的频率,订阅的ID。最后的指针指向存储最新数据的数据缓冲区中主题的地址 ,这个是收尾的工作,也好理解,一堆数据最后要用你得放个存放的位置,不是吗?

可以订阅的主题

部分截图

用于 TOPIC_BATTERY_INFO 和数据广播的结构,返回电池状态

另外,因为是编译型的语言,都关注数据类型

真正的好程序,可读性是第一位的。这里的名称容量,电压,当前值,百分比。无人机的续航是永远的痛,以及炸机这个事情emmmm。电池这个东西还是需要不停的去观测的。

罗盘状态

如果你订阅这个主题,会返回上面的数字的一种

那么你就可以通过接收这个返回值来写程序,比如你的3,那么就可能要发送悬停命令,在安全的情况下快速迫降,把这个东西解决了再工作。

再看个有趣的东西,

T是油门,RPY是姿态信息。下面的有点看不懂,不过三个就够用。其实写程序就是在不停的处理数据。

就像这里,你就可以可视化这个摇杆的情况或是无人机的情况。都是可以的,只是数据而已。

云台是无人机的主要负载,有时候也需要它的一些信息。比如可以在初始化的时候进行使用。

无人机的动力来源是来自无刷电机,无刷电机这个东西哇,你可以测量的东西多,与之相关的电调:上面就是我们的电调信息

  1. 电调电流,mA
  2. 电调速度,rpm
  3. 电池到电调的输入功率 mV
  4. ESC温度,摄氏度
  5. 电机失速
  6. 电机速度不平衡
  7. ESC断开(我草,这也行?)
  8. 温度高

就是这个数据类型有点看不懂了

这个是一个LB2遥控器的原生数据的获取???是个啥遥控器?

咦,也是LB2 RC full raw data 命名的真好

真还有这么个东西。。。看了看价格(告辞)

在飞控上面接的,如果我没有看错,是N3的飞控

这个场景就更屌了

一套dji的无人机方案,家境贫寒,告辞

好像买个这性价比也挺高的,还可以使用OSDK

这个订阅是对无人机飞行信息的订阅,注释比较简单

用到的时候我会说,我现在不想说

后面有大量的模板,我其实对这个模板没有多少认识

这个东西写完好好看有没有

我理解的模板:

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

模板是创建泛型类或函数的蓝图或公式。

模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计

这个参数是我们的可订阅主题

回来的东西是四元数,都算好了都

这里是可返回的东西,是个结构体

同样是可以返回其它的内容

前面是传入的参数,后面是返回的东西

看这个电池的订阅就知道了

我们再看看电池的实现:

出现了这pack

作用:调整结构体的边界对齐,让其以一个字节对齐;

<使结构体按1字节方式对齐>

编译器中提供了 #pragma pack(n) 来设定变量以n字节对齐方式。

n字节对齐就是说变量存放的起始地址的偏移量有两种情况:

第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,

第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。

结构的总大小也有个约束条件,分下面两种情况:

  1. 如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;
  2. 否则必须为n的倍数。

写鸡儿C系语言就是个这,没什么好办法

MOP此命名空间通过广播或订阅封装了所有可用的遥测主题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档