前言
记录这两天的学习情况,以前只是按照教程盲目的走了一遍,很多概念都不太清晰。将这段时间对ROS的服务粗浅理解记录下来。文章内容只是自己对于该部分内容的暂时性理解,如有错误还请指正
目录
1. ROS下的服务(service)是什么?
总结来说,service就是ROS提供的一种节点间的通信方式。这种通信方式和客户端服务端的通信机理类似。如下图所示。
图中client提出服务请求,server响应请求。从这个模式可以看到几个明显的特点:
(a)这中通信方式是点对点的,他区别与topic的通信。当然一个服务器可以为多个客户端提供服务。
(b)在server和client之间的消息(srv)是需要定义的,server需要知道我要得服务数据是什么,应答给client什么,对client也一样。
2. 编写简单的Server(C++)
2.1 建立工作空间
下面会从建立工作空间开始,到软件包,到具体的可执行文件,确保可以有最终的效果。
step1: 建立工作空间
mkdir -p haley_ws/src
cd haley_ws/src/
catkin_init_workspace
step2: 创建软件包 包名为“haley_service”
catkin_create_pkg haley_service roscpp std_msgs
2.2 编写自定义srv消息
step3: 创建所需的自定义服务消息(srv),这里我们定义一个求和的srv,在sum.srv中写入消息的格式。
mkdir srv
cd srv
touch sum.srv
sum.srv的内容如下,这里的上半部分是请求数据格式,下半部分是应答的数据格式。中间必须用三个短线隔开。
int32 A
int32 B
---
int32 SUM
好了进行到这里总结一下,我们做了什么,这些事情的目的是啥。
(a)建立了完整的工作空间和软件包
(b)定义了之后要使用到的service消息格式
做完了这些我们的目录从工作空间开始大概是这样的
现在来查看一下我们的srv消息吧
(a)编译工作空间
(b)查看srv格式catkin_make source ./devel/setup.bash rossrv show haley_service/sum
结果
至此我们上面的工作还是没有什么问题的。