参数的用法——利用参数创建节点
在 ROS 消息通讯——服务器/客户端的来龙去脉的基础上,对service_server.cpp文件进行修改如下:
1 #include <ros/ros.h> 2 #include <ros_tutorials_service/SrvTutorial.h>//服务头文件 3 4 #define PLUS 1 5 #define MINUS 2 6 #define MULTIPLICATION 3 7 #define DIVISION 4 8 9 int g_operator=PLUS; 10 //如果收到客户端的请求,将执行以下处理,服务请求为req,服务响应为res 11 bool calculation(ros_tutorials_service::SrvTutorial::Request &req, 12 ros_tutorials_service::SrvTutorial::Response &res) 13 { 14 //收到请求时,将两数之和保存到服务响应值中 15 switch(g_operator) 16 { 17 case PLUS: 18 res.result = req.a+req.b;break; 19 case MINUS: 20 res.result = req.a-req.b;break; 21 case MULTIPLICATION: 22 res.result = req.a*req.b;break; 23 case DIVISION: 24 if(req.b==0) 25 { 26 res.result =0;break; 27 } 28 else 29 { 30 res.result = req.a/req.b;break; 31 } 32 default: 33 res.result = req.a+req.b;break; 34 //显示a,b的值及结果 35 ROS_INFO("request:x=%ld,y=%ld",(long int)req.a,(long int)req.b); 36 ROS_INFO("sending back response:%ld",(long int)res.result); 37 return true; 38 } 39 40 int main(int argc,char **argv) 41 { 42 ros::init(argc,argv,"service_server");//声明服务器节点名称 43 ros::NodeHandle nh; 44 nh.setParam("calculation_method",PLUS);//初始化设置参数 45 //声明服务器,创建一个使用ros_tutorials_service功能包SrvTutorial服务文件的服务器 46 //ros_tutorial_service_server,服务名称是ros_tutorial_srv,有服务请求,执行calculation函数 47 ros::ServiceServer ros_tutorials_service_server = nh.advertiseService("ros_tutorial_srv", calculation); 48 49 ROS_INFO("ready srv server!"); 50 ros::Rater(10); 51 while(1) 52 { 53 nh.getParam("calculation_method",g_operator);//获取参数 54 ros::spinOnce(); 55 r.sleep(); 56 } 57 58 return 0; 59 }
- 运行结果对照:查看参数列表,修改参数试验效果
- 有参数运行实例:git clone https://github.com/ROBOTIS-GIT/ros_tutoruals.git