• 参数的用法——利用参数创建节点


    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

  • 相关阅读:
    codechef Graph on a Table
    CF1063F. String Journey
    BZOJ1547: 周末晚会
    maxsigma
    LOJ#2351. 「JOI 2018 Final」毒蛇越狱
    BZOJ3632: 外太空旅行
    图论:tarjan相关算法复习
    Codeforces 321E. Ciel and Gondolas(凸优化+决策单调性)
    5031. 【NOI2017模拟3.27】B (k次狄利克雷卷积)
    CSAcademy Round 10 Yury's Tree(有根树点分树或kruskal重构树)
  • 原文地址:https://www.cnblogs.com/fuzhuoxin/p/12584992.html
Copyright © 2020-2023  润新知