ROS2的服务通信
服务就是节点之间的你问我答。
服务通信是通过客户端与服务端进行通信的,具有同步通信机制,服务器端是唯一的,而客户端不是唯一的。
.srv文件定义请求和应答数据结构。
创建服务服务端的程序流程:
- 创建接口初始化
- 创建节点并初始化
- 创建服务端对象
- 通过回调函数处进行服务
- 向客户端反馈应答结果
- 销毁节点并关闭接口
现在创建一个服务端的节点,在节点里进行两个整型的相加。
创建服务客户端的程序流程:
- 创建接口初始化
- 创建节点并初始化
- 创建客户端对象
- 创建并发送请求数据
- 等待服务器应答数据
- 销毁节点并关闭接口
现在创建一个客户端的节点,在节点里输入两个数,然后传递给服务端就行处理。
使用ROS2通信服务,创建一个物体识别的通信服务节点。
物体识别的服务端
服务端主要是对图像驱动后的话题进行一个订阅。同事对图像进行一个处理,去识别到我们的目标位置。
这里设置号好所需识别的颜色的HSV阈值,并且初始化节点,订阅对象,然后通过cv_bridge创建一个图像转换对象,将opencv图像和ROS图像的消息进行互相转换,并且创建服务端
这里进行目标的识别,经过一些opencv的处理之后,最后将处理结果显示出来
这是处理图像的回调函数,将opencv图像转成ROS2的图像数据。
这是目标位置的回调函数,会对目标位置进行获取与输出。
物体识别的客户端
这里服务名称要跟服务端的名称一致
初始化节点的接口,并且创建了一个node对象