ROS服务端编写
#include "ros/ros.h"
#include "demo_serv_client/AddInts.h"
bool srv_func(demo_serv_client::AddInts::Request &request,
demo_serv_client::AddInts::Response &response) {
int num1 = request.num1;
int num2 = request.num2;
int sum = num1 + num2;
response.sum = sum;
ROS_INFO("收到的请求数据: num1 = %d,num2 = %d",num1,num2);
ROS_INFO("求和结果: sum = %d",sum);
return true;
}
int main(int argc, char *argv[]) {
setlocale(LC_ALL, "");
ROS_INFO("服务器端已启动");
ros::init(argc, argv, "srv_demo");
ros::NodeHandle nh;
ros::ServiceServer srv = nh.advertiseService("AddInts", srv_func);
ros::spin();
}
ROS客户端编写
#include "ros/ros.h"
#include "demo_serv_client/AddInts.h"
int main(int argc, char *argv[]) {
setlocale(LC_ALL, "");
ROS_INFO("客户端节点已经启动");
ros::init(argc, argv,"demo_client");
ros::NodeHandle nh;
ros::ServiceClient client = nh.serviceClient<demo_serv_client::AddInts>("AddInts");
demo_serv_client::AddInts ai;
ai.request.num1 = 100;
ai.request.num2 = 200;
// 两个数值已经被写死
bool flag = client.call(ai);
if (flag) {
ROS_INFO("响应成功!");
ROS_INFO("响应结果 = %d",ai.response.sum);
}
else {
ROS_INFO("处理失败");
}
ros::spin();
}
数据未写死
#include "ros/ros.h"
#include "demo_serv_client/AddInts.h"
int main(int argc, char *argv[]) {
setlocale(LC_ALL, "");
ROS_INFO("客户端节点已经启动");
ros::init(argc, argv, "demo_client");
ros::NodeHandle nh;
ros::ServiceClient client = nh.serviceClient<demo_serv_client::AddInts>("AddInts");
demo_serv_client::AddInts ai;
std::cout<<"请输入num1和num2,用空格隔开"<<std::endl;
std::cin >> ai.request.num1 >> ai.request.num2;
bool flag = client.call(ai);
if (flag) {
ROS_INFO("响应成功!");
ROS_INFO("响应结果 = %d", ai.response.sum);
} else {
ROS_INFO("处理失败");
}
ros::spin();
}
#include "ros/ros.h"
#include "demo_serv_client/AddInts.h"
int main(int argc, char *argv[]) {
setlocale(LC_ALL, "");
if (argc != 3) {
ROS_INFO("提交的参数错误");
return 1;
}
ROS_INFO("客户端节点已经启动");
ros::init(argc, argv, "demo_client");
ros::NodeHandle nh;
ros::ServiceClient client = nh.serviceClient<demo_serv_client::AddInts>("AddInts");
demo_serv_client::AddInts ai;
//std::cout << "请输入num1和num2,用空格隔开" << std::endl;
//std::cin >> ai.request.num1 >> ai.request.num2;
ai.request.num1 = atoi(argv[1]);
ai.request.num2 = atoi(argv[2]);
//等待服务器挂起方式1
client.waitForExistence();
//等待服务器挂起方式2
ros::service::waitForService("服务的话题")
bool flag = client.call(ai);
if (flag) {
ROS_INFO("响应成功!");
ROS_INFO("响应结果 = %d", ai.response.sum);
} else {
ROS_INFO("处理失败");
}
}