8、服务端

上节课我们说到了客户端请求服务,然后服务端提供服务,这节课我们就来说说服务端是如何实现提供服务的。

8.1、C++语言实现

8.1.1、实现步骤

1)、初始化ROS节点

2)、创建Server实例

3)、循环等待服务请求,进入回调函数

4)、在回调函数中完成服务的功能处理,并且反馈应答数据

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

turtle_vel_command_server.cpp

1)、程序流程图

image-20220427143845105

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

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

4)、运行程序

5)、运行效果截图

image-20220225114532861

6)、程序说明

首先,运行小海龟这个节点后,可以在终端输入rosservice list,查看当前的服务有哪些,结果如下

image-20220219112052144

然后,我们再运行turtle_vel_command_server程序,再输入rosservice list,会发现多了个turtle_vel_command_server,如下图所示

image-20220225114746807

然后,我们通过在终端输入rosservice call /turtle_vel_command_server调用这个服务,会发现小海龟做圆周运动,再次调用服务的话,小海龟停止了运动。这是因为在服务回调函数里边,我们把pubvel的值做了反转,然后反馈回去,主函数就会判断pubvel的值,如果是True就发布速度指令,为False则不发布指令。

8.2、python语言实现

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

turtle_vel_command_server.py

1)、程序流程图

image-20220427143957140

2)、运行程序

3)、程序运行效果和程序说明与C++实现的效果一致。