一、服务
服务可以实现类似你问我答的同步通信效果,此时可以在需要某个数据的时候,发一个查询的请求,然后尽快得到目标的最新位置,这样的通信模型和话题单向传输有所不同,变成了发送一个请求,反馈一个应答的形式,这种通信机制在ROS中成为服务(Service)。
二、服务模型
1、客户端/服务器模型
发送请求和反馈应答:
从服务的实现机制上来看,这种你问我答的形式叫做客户端/服务器模型,简称为CS模型,客户端在需要某些数据的时候,针对某个具体的服务,发送请求信息,服务器端收到请求之后,就会进行处理并反馈应答信息。
浏览器的应用场景:
这种通信机制在生活中也很常见,比如我们经常浏览的各种网页,此时你的电脑浏览器就是客户端,通过域名或者各种操作,向网站服务器发送请求,服务器收到之后返回需要展现的页面数据。

图1 服务的发送和应答
三、同步通信
这个过程一般要求越快越好,假设服务器半天没有反应,你的浏览器一直转圈圈,那有可能是服务器宕机了,或者是网络不好,所以相比话题通信,在服务通信中,客户端可以通过接收到的应答信息,判断服务器端的状态,我们也称之为同步通信。
四、一对多通信
在服务通信中服务器端是唯一,而客户端可以不唯一,比如古月居这个网站,服务器是唯一存在的,并没有多个完全一样的古月居网站,但是可以访问古月居网站的客户端是不唯一的,大家每一个人都可以看到同样的界面。所以服务通信模型中,服务器端唯一,但客户端可以不唯一。

图2 一个服务器和多个客户端
五、服务接口
和话题通信类似,服务通信的核心还是要传递数据,数据变成了两个部分,一个请求的数据,比如请求苹果位置的命令,还有一个反馈的数据,比如反馈苹果坐标位置的数据,这些数据和话题消息一样,在ROS中也是要标准定义的,话题使用.msg文件定义,服务使用的是.srv文件定义。
六、案例

图3 加法器
通过服务实现一个加法求解器的功能,当我们需要计算两个加数的求和结果时,就通过客户端节点,将两个加数封装成请求数据,针对服务“add_two_ints”发送出去,提供这个服务的服务器端节点,收到请求数据后,开始进行加法计算,并将求和结果封装成应答数据,反馈给客户端,之后客户端就会得到想要的结果。

图4 功能包内部结构
1、创建服务接口的功能包
进入工作空间study_ws中src路径下:
cd ~/study_ws/src
创建功能包demo_interface:
ros2 pkg create --build-type
3085



被折叠的 条评论
为什么被折叠?



