一、 开发环境
ubuntu20.04
ros版本noetic
参考视频
https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p=52&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=4cd1b6f268e2a29a11bea5d2568836ee
二、 编写srv文件
在功能包下面创建srv文件夹(srv文件夹和src文件夹并列),在srv文件夹中创建AddInt.srv文件
AddInt.srv
int32 num1
int32 num2
---
int32 sum
三、 编写服务端
smain.cpp
#include "ros/ros.h"
#include "/home/leon/project/ros/helloworld/ws/devel/include/addserver/AddInt.h"
#include <sstream>
bool doNums(addserver::AddInt::Request &request,addserver::AddInt::Response &response)
{
int num1 = request.num1;
int num2 = request.num2;
ROS_INFO("收到:%d,%d",num1,num2);
int sum = num1 + num2;
response.sum = sum;
ROS_INFO("反馈:%d",sum);
return true;
}
//服务端
int main(int argc,char *argv[])
{
//中文支持
setlocale(LC_ALL,"");
//初始化ros节点
//指定节点名称
ros::init(argc,argv,"server");
//创建ros节点句柄
ros::NodeHandle n;
//创建服务对象
ros::ServiceServer server = n.advertiseService("add",doNums);
ros::spin();
return 0;
}
//
//通过ros工具打印话题消息
//rostopic echo fang
//通过命令方式调用服务
//rosservice call add "num1: 5 num2: 2"
四、 编写客户端
cmain.cpp
#include "ros/ros.h"
#include "/home/leon/project/ros/helloworld/ws/devel/include/addserver/AddInt.h"
#include <sstream>
bool doNums(addserver::AddInt::Request &request,addserver::AddInt::Response &response)
{
int num1 = request.num1;
int num2 = request.num2;
ROS_INFO("收到:%d,%d",num1,num2);
int sum = num1 + num2;
response.sum = sum;
ROS_INFO("反馈:%d",sum);
return true;
}
//服务调用端
int main(int argc,char *argv[])
{
//中文支持
setlocale(LC_ALL,"");
if(argc != 3)
{
ROS_INFO("参数个数不对");
return 1;
}
//初始化ros节点
//指定节点名称
ros::init(argc,argv,"client");
//创建ros节点句柄
ros::NodeHandle n;
//创建服务对象
ros::ServiceClient client = n.serviceClient<addserver::AddInt>("add");
addserver::AddInt to;
to.request.num1 = atoi(argv[1])