模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

626查看 | 0回复

uORB原理与使用 来自知乎沈阳无距科技

[复制链接]
发表于 2022-10-25 21:02:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
无人机中级篇:第三讲:uORB原理与使用 uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 8157
沈阳无距科技

工业级无人机的中国名片






飞控程序中内部消息传递采用的是异步消息机制uORB。它的设计理念很有趣,它可以实现不同模块中的数据快速通讯,并且以异步通讯为基本原则,也就是说在通讯过程中发送者只负责发送数据,而并不关心数据由谁接收,也不关心接收者是否能将所有的数据都接收到;而对于接收者来说并不关心数据是由谁发送的,也不关心在接收过程中是否将所有数据都接收到。关于uORB的设计原理我们会在后续章节中仔细讲述。这里只做一个简单的介绍,我们来举一个简单的例子说明一下uORB的设计原理:
有一个教室编号208,里面的黑板上可以写上一些文字内容,有一个同学名叫小强,他每隔1个小时就会来到208教室,先将黑板上原来的文字擦除,然后在黑板上写下一段新文字,之后离开208教室。而另外有一个同学叫小朋,他每隔3个小时就会来到208教室,将黑板上的文字抄写到自己的笔记本上,然后离开。我们可以用下列图例来说明一下这个过程:
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 4278
我们可以看到,小强每次发布数据之后就会离开208教室,至于有没有人或是谁来读取他留下的文字,小强自己并不关心,也不再乎自己发布的数据是否有人收到了。而对于小朋来说,他每隔3小时来读取一次数据,至于这些数据是谁发布的他也不关心。他每隔3小时来读黑板上的文字时,其实小强已经在黑板上留言3次了,前两次的文字已经被小强擦除了,小朋看到的永远是小强留下最新的内容。
上面这个例子实际上就是uORB的实现原理:
发送者:小强每隔1小时发布一次数据orb_publish
接收者:小朋每隔3小时接收一次数据orb_copy
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 2762
uORB在在数据发布与接收过程中并不保证发送者的所有数据都可以被接收者收到,而只保证接收者在想要接收时能收到最新的数据。而发送与接收的分离可以使飞程中各个模块相互独立,互不干扰。实际上一个uORB可以由多个发送者发布,也可以被多个接收者接收。实际上同一个uORB可以由多个发布者进行发布,而也可以由多个接收者接收,也就是说他们之间是多对多的关系。
下面我们来看一个具体的例子:
1.在msg文件夹中创建一个叫做extctl_sp.msg的文件,表示我们创建了一个新的uORB,它的名字叫作extctl_sp,其内容如下:
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 5018
这是作者在做“外部控制”模式下所用到的一个uORB,在本节中读者可以不用了解其中变量的具体含义,只知道我们需要在extctl_sp.msg中定义一些指定属性即可。不过需要注意其定义的语法与C/C++类似但有些不同,参考PX4中现有的msg文件内容即可。
2.在msg文件夹中的CMakeLists.txt中添加刚刚我们添加的extctl_sp.msg,表示对其做编译处理:
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 4910
即程序在编译时会根据extctl_sp.msg生成extctl_sp.h和extctl_sp.cpp文件,也就是我们在程序中所用到的结构定义:
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 1324
3.发布者发布uORB时需要做两步操作:
(1)公告/多重公告uORB;
(2)发布uORB。
我们来看下面的的发布者的例子:
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 5220
4.接收者接收uORB时需要做三步操作:
(1)订阅uORB;
(2)判断uORB数据是否有更新。
(3)复制uORB数据内容到本地内存。
我们来看下面的的者接收的例子
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 9188
这就是uORB的使用方法,注意,发布和订阅只需要执行一次即可,而发布、检查更新和接收可以执行多次。下面我们来看看uORB中比较关键的几个函数的定义:
uORB原理与使用     来自知乎沈阳无距科技 无人机,飞控,基本原则,消息传递,设计理念 作者:15519743871 3515
关于这些函数的用法、参数及反回值不做过多的说明,这些函数的参数和反回值源代码中有详细的说明,还是比较容易理解和使用的。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|关于模吧|APP下载|广告报价|手机版|企业会员|商城入驻|联系我们|模吧 ( 黔ICP备2022002348号-1 )

© 2013-2020 Moz8.com 模吧,玩出精彩!