zoukankan      html  css  js  c++  java
  • ROS-节点参数param

    ROS中有如下3种获取参数的方式。

    在launch中写

    <param name="debug_imu"  value="true">     不管是上面何种数据类型都要带引号

    #include "ros/ros.h" 
    #include <cstdlib> 
    
    using namespace std; 
    
    int main(int argc,char** argv) 
    { 
        //initial and name node 
        ros::init(argc,argv,"node_param"); 
        if(argc!=2) 
        { 
            cout<<"Error command paramter! Please run command eg:
    " 
                <<"rosrun book_param book_param 1
    " 
                <<"help information:
    " 
                <<" 1 ------ set param mode(ros::param::set())
    " 
                <<" 2 ------ set param mode(ros::NodeHandle::setParam())
    " 
                <<" 3 ------ get param mode(ros::param::get())
    " 
                <<" 4 ------ get param mode(ros::NodeHandle::getParam())
    " 
                <<" 5 ------ get param mode(ros::NodeHandle::param())
    " 
                <<endl; 
            return 1; 
        } 
    
        //create node handle 
        ros::NodeHandle nh; 
        //param variable 
        int IntParam; 
        string StrParam; 
        bool isIntParam, isStrParam; 
        //mode flag 
        int flag = atoi(argv[1]); 
    
        // set or get param with different ways 
        switch(flag) 
        { 
            case 1: 
                ROS_INFO("set param mode(ros::param::set()):"); 
                ros::param::set("IntParam",1); 
                ros::param::set("StrParam","stringdemo"); 
                break; 
            case 2: 
                ROS_INFO("set param mode(ros::NodeHandle::setParam()):"); 
                nh.setParam("IntParam",1); 
                nh.setParam("StrParam","stringdemo"); 
                break; 
            case 3: 
                ROS_INFO("get param mode(ros::param::get()):"); 
                isIntParam = ros::param::get("IntParam",IntParam); 
                isStrParam = ros::param::get("StrParam",StrParam); 
    
                if(isIntParam){ 
                    ROS_INFO("The IntParam is:%d",IntParam); 
                }else{ 
                    ROS_INFO("Get IntParam fail!"); 
                } 
    
                if(isIntParam){ 
                    ROS_INFO("The StrParam is:%s",StrParam.c_str()); 
                }else{ 
                    ROS_INFO("Get StrParam fail!"); 
                } 
                break; 
            case 4: 
                ROS_INFO("get param mode(ros::NodeHandle::getParam()):"); 
                isIntParam = nh.getParam("IntParam",IntParam); 
                isStrParam = nh.getParam("StrParam",StrParam); 
    
                if(isIntParam){ 
                    ROS_INFO("The IntParam is:%d",IntParam); 
                }else{ 
                    ROS_INFO("Get IntParam fail!"); 
                } 
    
                if(isIntParam){ 
                    ROS_INFO("The StrParam is:%s",StrParam.c_str()); 
                }else{ 
                    ROS_INFO("Get StrParam fail!"); 
                } 
                break; 
            case 5: 
                ROS_INFO("get param mode(ros::NodeHandle::param()):"); 
                //warning: this way will set default value when get no param! 
                nh.param("IntParam",IntParam,11); 
                // be careful when use ros::NodeHandle::param get string param! 
                nh.param<std::string>("StrParam",StrParam,"stringdemo_default"); 
                ROS_INFO("
    The IntParam is:%d
    The StrParam is:%s",IntParam,StrParam.c_str()); 
                break; 
            default: 
                ROS_INFO("flag value is not in range: [1,5]"); 
        } 
        return 0; 
    }

  • 相关阅读:
    转发:原本优秀的我们是怎样滑向平庸的
    阿里巴巴C++实习生相关招聘一则
    [置顶] 我希望在20岁时就知道的26条时间管理技巧
    提示用户进行版本更新并且发布通知监控版本下载情况
    树状数组求正序数与逆序数hdu Minimum Inversion Number
    通过js 实现简单验证码的 刷新 看不清 换一张
    配置 CACTI 监控 MySQL 数据库状态
    Win7下ADB不能识别设备的可能原因
    Java 开源博客——B3log Solo 0.6.0 正式版发布了!
    MyEclipse下Import没有Maven的处理办法
  • 原文地址:https://www.cnblogs.com/long5683/p/11383066.html
Copyright © 2011-2022 走看看