大家好,我是小鱼。
今天更新一下之前说的ROS2通信机制相关的小故事。主要更新的部分为
ROS2子承父位、ROS镇长安详晚年(ROS镇长的传奇故事第二更)
1 统一方言
从前在一个大山里,有五个村庄,这五个村庄每个村庄有自己的方言。不同村庄的村民们互相沟通就是非常复杂的一件事,首先要找到一个能同时会两个方言的翻译官,才能互相沟通。
后来五个村子合并成了一个镇,来了个叫ROS的镇长,一看这多影响平时交流呀,就开始推行普通话。后来又有很多村子迁入这个镇,因为语言统一,大家互相交流起来都很方便。
方言统一了之后,沟通方便了,镇子里就兴起了三个行业,第一个行业是报业,专门卖报纸的。第二个行业是外卖业,专门送外卖。
2 王二订报
ROS镇长给报业制定了一种订报机制,叫做话题(Topic),并且开设了一个报务科去管理这个事:村民王二单身多年,最喜欢看的就是村民李四写的《艳娘传奇》这个杂志。
单身狗王二(Subscriber)想要看这个《艳娘传奇》(Topic-Name)这个杂志,首先要去报务科去告诉科长,我要定《艳娘传奇》,科长会留下王二的联系方式并写在手册上。但李四(Publisher)更新总是不定时,但他一更新就会把杂志送到镇上报务科去,报务科有一个手册,里面写着订阅《艳娘传奇》的村民名单。科长看到谁定了,就会把杂志复印一份让邮差给谁(Node)送过去。
杂志=话题
看完上面的内容,我们来总结一下,上面其实讲了一下ROS中Topic和Service两种非常重要的通信方式。Topic是一种发布订阅模型,订阅者(王二)需要通过话题(艳娘传奇)到Master节点(科长)来订阅发布者(李四)的发布。这里讲的还是一对一(一个发布者,一个订阅者)的模型,真实的ROS中其实可以1对n,n对1,n对n的。
并且满足以下规则:
- 话题名字是关键,订阅者必须要订阅的话题的名称才能完成订阅;
- 同一个人可以订阅多个话题,同时也可以发布多个话题,就像一本书的作者也可以是另外一本书的读者;
- 同一个杂志不能有多个作者,但同一个话题可以有多个发布者。
3 李四叫外卖
李四为了专心写杂志,每天窝在家里不出去,吃饭全靠叫外卖。镇里叫外卖比较原始,是靠写信定的,想要叫外卖先写一封信(request),写清楚菜名和菜馆名,然后通过外卖小哥(service)进行送信,小哥将信送到镇上对应的某个菜馆(service端),镇上菜馆做好菜(response),然后让外卖小哥带回去,这时候李四(client端)才能吃上外卖。
外卖=服务
李四是服务的客户端,菜馆是服务端,客户端(李四)通过发送一个request(一封信)给服务端(菜馆),服务端根据信里的内容进行处理后,让外卖小哥把菜(response)将送回去。
服务满足以下规则:
- 请求者必须知道服务名和可服务类型,就像李四知道菜馆名和菜名一样
- 请求者在返回之前,无法或者服务端处理的进度。就像李四在菜到之前并不知道外卖小哥有没有偷换了自己的菜
- 每一个节点可以提供多个服务,也可以请求多个服务。这点和餐馆不太一样
4 ROS镇长的中央集权
ROS小镇在ROS镇长的治理下,变得非常的繁华,但是ROS镇长是一个人非常有控制欲的一个人,到什么程度呢?如果ROS镇长不在,报务科和外卖小哥就不能营业,村民就不允许互相分享杂志(话题通信)、叫外卖了(服务通信)。
初次之外,村里来的每一个人也都需要到ROS镇长的人口管理科注册登记才能成为一个合法的村民,平时也受ROS镇长的管理。
总结一下:ROS镇长和其下属的科,其实就是ROS中的主节点,这个是ROS1才有的机制。同时节点之间的topic和service通信,也都需要主节点牵线搭桥。
5 ROS镇长完善外卖制度
随着外卖行业兴起,越来越多的村民选择点外卖。于此同时李四对现在的外卖制度表示十分的不满意。
主要原因是把菜名和餐馆名告诉外卖小哥后,自己就不知道自己要的菜有没有、菜做的怎么样了,而且如果自己中途被隔壁老王喊去喝酒,想取消都没办法取消。
ROS镇长得知这种情况后,就出手写了了一个新的制度,这个制度需要五个外卖小哥,两个小哥在李四这边,三个小哥在餐馆,他们分别负责不同的任务。李四这边的两个小哥分别是:
- 外卖小哥A名字叫goal,负责传递李四想吃的菜给餐馆
- 外卖小哥B名字叫cancel,如何中途李四想取消,就告诉B,B会去通知
餐馆这边的外卖小哥分别是:
- 外卖小哥C名字叫status,负责通知李四当前菜做到哪一阶段了
- 外卖小哥D叫feedback,这个小哥每10分钟跑一趟,告诉当前进度的百分比
- 外卖小哥E叫result,负责最后把做好的菜送到李四手上
总结一下:上面所说的通信机制其实是ROS中的action,完整的定义如下图
五个外卖小哥分别对应着五个话题,两个由客户端发布,两个三个由服务端发布,对应着不同的任务。
Action在moveit控制机械臂或导航的时候经常会用到。
6 子承父位,ROS镇上安享晚年
ROS镇长在2015年的时候与镇上的一个姑娘生下了一个儿子叫ROS2。ROS2出生在新时代,思想那是非常复合24字核心价值观的,ROS镇长也非常中意ROS1这个孩子,过了7年之后,ROS镇长准备要退休了,就让ROS2来帮忙打理镇上的事务。从此之后,ROS镇长就准备安详晚年了,毕竟新的时代是属于年轻人的。
总结一下:上面其实说的是ROS2的出现势必会代替ROS,ROS2继承了ROS的优点同时也改进了ROS中的不足之处,使得ROS2更加的强大。
7 ROS2镇长的改革故事
ROS2经过这么多年的目濡耳染,不学以能。ROS2一上任就准备做改革。
ROS2作为社会主义的接班人,24字核心价值观那是倒背如流。更是追求自由平等,他对ROS镇的这种离开镇长就不能转的中央集权制度非常的痛恨。
于是ROS2镇长做的第一件事就是,去除中央集权,让村民们自产自销,开放市场。什么意思呢?就是王二想要看李四的报纸,就直接去找李四买就行了,不用通过政府,如此以来,整体的效率就提高了。
ROS2还从外面引进了电话(DDS服务),给每个村民都免费装上了,从此村民和村民之间就可以通过DDS互相聊天(发现)。
总结一下: 上面说的其实是ROS2的通信机制的改变,引入电话就是引入了第三方的通信组件,ROS2自身只做个进程间的通信,节点和节点之间的通信采用的是DDS服务进行。
干货分享:ROS2和ROS最大的区别中间件到底有什么不一样?
8 写在最后
我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚
初中学习编程,高中开始学习机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)
目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人
扫码上车