从前在一个大山里,有五个村庄,这五个村庄每个村庄有自己的方言。不同村庄的村民们互相沟通就是非常复杂的一件事,首先要找到一个能同时会两个方言的翻译官,才能互相沟通。
后来五个村子合并成了一个镇,来了个叫ROS的镇长,一看这多影响平时交流呀,就开始推行普通话。后来又有很多村子迁入这个镇,因为语言统一,大家互相交流起来都很方便。
方言统一了之后,沟通方便了,镇子里就兴起了三个行业,第一个行业是报业,专门卖报纸的。第二个行业是外卖业,专门送外卖。
ROS镇长给报业制定了一种订报机制,叫做话题(Topic),并且开设了一个报务科去管理这个事: 村民王二单身多年,最喜欢看的就是村民李四写的《艳娘传奇》这个杂志。
单身狗王二(Subscriber)想要看这个《艳娘传奇》(Topic-Name)这个杂志,首先要去报务科去告诉科长,我要定《艳娘传奇》,科长会留下王二的联系方式并写在手册上。但李四(Publisher)更新总是不定时,但他一更新就会把杂志送到镇上报务科去,报务科有一个手册,里面写着订阅《艳娘传奇》的村民名单。科长看到谁定了,就会把杂志复印一份让邮差给谁(Node)送过去。
看完上面的内容,我们来总结一下,上面其实讲了一下ROS中Topic和Service两种非常重要的通信方式。Topic是一种发布订阅模型,订阅者(王二)需要通过话题(艳娘传奇)到Master节点(科长)来订阅发布者(李四)的发布。这里讲的还是一对一(一个发布者,一个订阅者)的模型,真实的ROS中其实可以1对n,n对1,n对n的。
并且满足以下规则:
李四为了专心写杂志,每天窝在家里不出去,吃饭全靠叫外卖。镇里叫外卖比较原始,是靠写信定的,想要叫外卖先写一封信(request),写清楚菜名和菜馆名,然后通过外卖小哥(service)进行送信,小哥将信送到镇上对应的某个菜馆(service端),镇上菜馆做好菜(response),然后让外卖小哥带回去,这时候李四(client端)才能吃上外卖。
李四是服务的客户端,菜馆是服务端,客户端(李四)通过发送一个request(一封信)给服务端(菜馆),服务端根据信里的内容进行处理后,让外卖小哥把菜(response)将送回去。
服务满足以下规则:
ROS小镇在ROS镇长的治理下,变得非常的繁华,但是ROS镇长是一个人非常有控制欲的一个人,到什么程度呢?如果ROS镇长不在,报务科和外卖小哥就不能营业,村民就不允许互相分享杂志(话题通信)、叫外卖了(服务通信)。
初次之外,村里来的每一个人也都需要到ROS镇长的人口管理科注册登记才能成为一个合法的村民,平时也受ROS镇长的管理。
总结一下: ROS镇长和其下属的科,其实就是ROS中的主节点,这个是ROS1才有的机制。同时节点之间的topic和service通信,也都需要主节点牵线搭桥。
随着外卖行业兴起,越来越多的村民选择点外卖。于此同时李四对现在的外卖制度表示十分的不满意。
主要原因是把菜名和餐馆名告诉外卖小哥后,自己就不知道自己要的菜有没有、菜做的怎么样了,而且如果自己中途被隔壁老王喊去喝酒,想取消都没办法取消。
ROS镇长得知这种情况后,就出手写了了一个新的制度,这个制度需要五个外卖小哥,两个小哥在李四这边,三个小哥在餐馆,他们分别负责不同的任务。 李四这边的两个小哥分别是:
餐馆这边的外卖小哥分别是:
总结一下: 上面所说的通信机制其实是ROS中的action,完整的定义如下图:
五个外卖小哥分别对应着五个话题,两个由客户端发布,两个三个由服务端发布,对应着不同的任务。
Action在moveit控制机械臂或导航的时候经常会用到。
ROS镇长在2015年的时候与镇上的一个姑娘生下了一个儿子叫ROS2。ROS2出生在新时代,思想那是非常复合24字核心价值观的,ROS镇长也非常中意ROS1这个孩子,过了7年之后,ROS镇长准备要退休了,就让ROS2来帮忙打理镇上的事务。从此之后,ROS镇长就准备安详晚年了,毕竟新的时代是属于年轻人的。
总结一下: 上面其实说的是ROS2的出现势必会代替ROS,ROS2继承了ROS的优点同时也改进了ROS中的不足之处,使得ROS2更加的强大。
ROS2经过这么多年的目濡耳染,不学以能。ROS2一上任就准备做改革。
ROS2作为社会主义的接班人,24字核心价值观那是倒背如流。更是追求所谓的自由平等,他对ROS镇的这种离开镇长就不能转的中央集权制度非常的痛恨。
于是ROS2镇长做的第一件事就是,去除中央集权,让村民们自产自销,开放市场。什么意思呢?就是王二想要看李四的报纸,就直接去找李四买就行了,不用通过政府,如此以来,整体的效率就提高了。
ROS2还从外面引进了电话(DDS服务),给每个村民都免费装上了,从此村民和村民之间就可以通过DDS互相聊天(发现)。
总结一下: 上面说的其实是ROS2的通信机制的改变,引入电话就是引入了第三方的通信组件,ROS2自身只做个进程间的通信,节点和节点之间的通信采用的是DDS服务进行。
可以看一下这篇文章(顺便关注一下小鱼的知乎,谢谢啦):https://zhuanlan.zhihu.com/p/390607053
技术交流&&问题求助:
课程合作:睿慕课
微信公众号:鱼香ROS
小鱼微信:AiIotRobot