7、客户端

在ROS通讯中,除了话题通讯,还有一种就是服务通讯。服务包括客户端和服务端,客户端就是请求服务,服务端就是提供服务的。本节就以客户端为主要内容,说c++和python如何实现客户端。

7.1、准备工作

7.1.1、建立功能包

1)、切换至~/catkin_ws/src目录下,

2)、切换至~/catkin_ws目录下,

7.2、C++语言实现

7.2.1、实现步骤

1)、初始化ROS节点

2)、创建句柄

3)、创建一个Client实例

4)、初始化并发布服务请求数据

5)、等待Server处理之后的应答结果

7.2.2、切换至~/catkin_ws/src/learning_server/src目录下,新建一个.cpp文件,命名为a_new_turtle,把下边代码粘贴在里边

a_new_turtle.cpp

1)、程序流程图

image-20220225112117967

2)、在CMakelist.txt中配置,build区域下,添加如下内容

3)、工作空间目录下编译代码

4)、运行程序

5)、运行效果截图

image-20220225112424249

6)、程序说明

在启动小海龟的节点后,再运行a_new_turtle这个程序会发现,画面中会出现另外一直小海龟,这是因为小海龟的节点提供了服务/spawn,该服务会产生另外一直小海龟turtle2,查看小海龟提供的服务可以通过rosservice list命令来查看,如下图所示

image-20220218180756612

可以通过rosservice info /spawn,查看这个服务需要的参数,如下图所示

image-20220218181244822

可以看出需要有4个参数:x,y,theta,name,这四个参数在a_new_turtle.cpp里边有初始化

7.3、python语言实现

7.3.1、切换至~/catkin_ws/src/learning_server目录下,新建一个script文件夹,切进去,新建一个py文件,命名为a_new_turtle,把下边代码粘贴在里边

a_new_turtle.py

1)、程序流程图

image-20220225113010789

2)、运行程序

3)、程序运行效果和程序说明与C++实现的效果一致,这里主要说下python如何提供服务需要的参数,

对应的参数,分别是x,y,theta,name。