浅析ROS及其通讯机制(Topic/Service/Action)

77
0
2021年1月13日 09时02分

1,ROS

 

根据W. S. Newsman 在“A Systematic Approach to Learning Robot
Programming With ROS”中提到。

 

ROS (robot operating system),这一机器人操作系统是一系列开源软件库和开源工具,它可以帮助我们搭建起自己的机器人应用平台。如今,ROS平台被广泛的用于移动机器人,飞行器,双目相机,机械臂和其他领域。ROS的目的是为了搭建起一个融合不同研究结果,算法实现和代码复用的通用的机器人初始平台。

 

ROS有以下几个主要的特征:分布式架构,多语言支持,足够好的稳定性以及开源。

 

根据上面的优势,我选择了ROS作为机械臂抓取平台。与此同时,ROS对于OpenCV以及PCL具有很好的兼容性,它们可以在图像处理中发挥巨大作用。比如可以实现物体的识别和位姿估计。RVIZ作为ROS中的可视化平台,可以生动的展现三维信息,比如,可以通过TF树展示机械臂,相机以及目标物体的坐标变换。

 

2,通讯机制

 

ROS的通讯主要包含三种方式:Topic(话题),Service(服务),以及Action通讯

 

在介绍通讯之前,非常重要的一点是了解ROS的数据结构。

 

Messages(消息)在整个ROS系统中扮演关键的作用。消息在通讯中是传递信息的关键媒介。其中消息的类型有很多种,比如在KinectV2中/KinectV2/ rgb/Image_raw话题的消息 是sensor_msgs/ Image.同样在位姿估计中,我们经常会看到话题发布的geometry_msgs/Pose。

 

Topic

 

在话题中,它就像ROS节点间的总线,进行数据的交换。并且,话题可以直接从主机中订阅消息和发布消息到主机。在两者之间并没有强制的纽带关系。它更像是一种单向通信,话题作为中间枢纽。它们只关心话题的名称以及当前的消息类型。下面的图可以生动展现这种交流机制。发布者发布这个话题,订阅者可以订阅这个话题,与此同时,订阅者可以从发布者中获得话题中具体的消息数据。

 

在这里插入图片描述

 

更形象来看的话,整个通讯是建立在主机的基础上,从红色箭头部分,我们可以看到一个节点发布了消息到一个topic上,然后可以让多个节点订阅此话题,可以满足一对多的关系。这便是Topic的方式进行数据通讯。其实本身节点间并没有联系,但是通过topic的方式便建立了纽带。

 

在这里插入图片描述

Service

 

ROS 服务是一个基于请求和回应的交互模式。它通常用于分布式系统中。ROS服务中的消息中,一部分会定义请求部分,一部分会定义回应部分。在服务中,一个节点可以作为ROS服务端,一个客户端可以向这个服务端请求服务,在请求后,它将发送一个结果到客户端作为回应。它更像是同步交互方式。

 

整个通讯是建立在主机的基础上,从绿色部分可以形象的看出节点利用服务进行通讯,一个节点作为服务的服务器端,另一个作为服务的客户端,当客户端发出对应的请求时,服务器便会给予相应的回应。

 

在这里插入图片描述

Action

 

Action 可以看作是一个高级的服务通讯方式。但是相比于服务只是包含两个话题请求和回应,action包含了五个话题,包括目标,状态,取消,反馈以及结果。Action服务在实时进程中可以起到很大的作用。action更像是一种异步的交互方式。它的异步性在于你并不需要等待结果,而是可以在做其他事情的时候获取到这个结果。

 

在这里插入图片描述

 

在我们利用move_group框架时,我们会遇到几种action,像抓取放置,关节控制等。

 

在这里插入图片描述

 

可能到现在还是不太理解service和action的大区别。下面有一个非常形象的例子来对比service和action。

 

利用两者方式购买卤肉饭来对比:

 

1,到卤肉饭店铺购买卤肉饭(ROS Services)
a,和老板订餐(request)
b,等待老板做完
c,得到卤肉饭(response)

 

2,利用订外卖的方式购买
a,网上下单购买(goal),可能取消订单(cancel)
b,订单确认通知(feedback)
c,偶尔检查一下订单的状态(status)
d,做其他的事情,学习,睡觉 …
e,卤肉饭送达(result)

发表评论

后才能评论