ROS创建使用srv

 ROS中使用srv需要一个服务器端和一个客户端。客户端向服务器端发出服务请求,服务器端根据客户端的请求给出回应。在本文前两节的基础上继续讲解ROS系统中的srv使用。

1. 创建srv文件

 在~/catkin_ws/src/ROS_Test1路径中创建srv文件:

 mkdir srv

 cd srv

 vim ROS_Test1_srv.srv

 编辑内容如下所示:

ROS创建使用srv_第1张图片

2. 编辑功能包清单package.xml

 rosed ROS_Test1 package.xml

 找到如下模块并按图所示取消注释

ROS创建使用srv_第2张图片

3. 编辑文件CMakeLists.txt

 分别找到如下模块取消注释并编辑:

ROS创建使用srv_第3张图片

ROS创建使用srv_第4张图片

ROS创建使用srv_第5张图片


 执行命令行:

 cd ~/catkin_ws

 source /devel/setup.bash

 rossrv show ROS_Test1/ROS_Test1_srv

若显示内容与ROS_Test1_srv.srv文件中的内容一致,说明服务创建成功。

4. 服务端创建

 在src文件下编辑node_d1.cpp内容如下:

#include "ros/ros.h"
#include "ROS_Test1/ROS_Test1_srv"

bool add(ROS_Test1::ROS_Test1_srv::Request &req,
		 ROS_Test1::ROS_Test1_srv::Response &res)
{
	res.result = req.i1 + req.i2 + req.i3;
	ROS_INFO("sending service add");
	return true;
}

int main(int argc, char **argv)
{
	ros::init(argc, argv, "service_server");
	ros::NodeHandle n;
	ros::ServiceServer service = n.advertiseService("service1", add);
	ROS_INFO("service Ready!");
	ros::spin();

	return 0;
}

5. 客户端创建

#include "ros/ros.h"
#include "ROS_Test1/ROS_Test1_srv.h"
#include 

int main(int argc, char **argv)
{
	ros::init(argc, argv, "service_client");
	ros::NodeHandle n;
	ros::ServiceClient client = n.serviceClient("service1");

	ROS_Test1::ROS_Test1_srv srv;

	srv.request.i1 = 1;
	srv.request.i2 = 2;
	srv.request.i3 = 3;

	if(client.call(srv))
	{
		ROS_INFO("service success. result : %d", srv.response.result);
	}
	else
	{
		ROS_INFO("service failed!");
		return 1;
	}

	return 0;

}

6. 编辑ROS_Test1文件夹下的CMakeLists.txt文件

ROS创建使用srv_第6张图片

7. 编译节点与节点运行

 cd ~/catkin_ws

 catkin_make

 roscore

 另外打开两个终端分别运行一下命令行(先source):

 rosrun ROS_Test1 Test1_node_d1

 rosrun ROS_Test1 Test1_node_d2

 运行结果如下所示:

ROS创建使用srv_第7张图片




你可能感兴趣的:(ROS系统)