ROS理解參數服務器param demo

param_demo.cpp

// param_demo.cpp
#include<ros/ros.h>

int main(int argc, char **argv){
        ros::init(argc, argv, "param_demo");
        ros::NodeHandle nh;
        int parameter1, parameter2, parameter3, parameter4, parameter5;

        //Get Param的三種方法
        //① ros::param::get()獲取參數“param1”的value,寫入到parameter1上
        bool ifget1 = ros::param::get("param1", parameter1);

        //② ros::NodeHandle::getParam()獲取參數,與①作用相同
        bool ifget2 = nh.getParam("param2",parameter2);

        //③ ros::NodeHandle::param()類似於①和②
        //但如果get不到指定的param,它可以給param指定一個默認值(如33333)
        nh.param("param3", parameter3, 33333);

        if(ifget1)
                ROS_INFO("Get param1 = %d", parameter1);
        else
                ROS_WARN("Didn't retrieve param1");
       if(ifget2)
                ROS_INFO("Get param2 = %d", parameter2);
        else
                ROS_WARN("Didn't retrieve param2");
        if(nh.hasParam("param3"))
                ROS_INFO("Get param3 = %d", parameter3);
        else
                ROS_WARN("Didn't retrieve param3");


    //Set Param的兩種方法
        //① ros::param::set()設置參數
        parameter4 = 4;
        ros::param::set("param4", parameter4);

        //② ros::NodeHandle::setParam()設置參數
        parameter5 = 5;
        nh.setParam("param5",parameter5);

        ROS_INFO("Param4 is set to be %d", parameter4);
        ROS_INFO("Param5 is set to be %d", parameter5);


        //Check Param的兩種方法
        //① ros::NodeHandle::hasParam()
        bool ifparam5 = nh.hasParam("param5");

        //② ros::param::has()
        bool ifparam6 = ros::param::has("param6");

        if(ifparam5)
                ROS_INFO("Param5 exists");
        else
                ROS_INFO("Param5 doesn't exist");
        if(ifparam6)
                ROS_INFO("Param6 exists");

        else
                ROS_INFO("Param6 doesn't exist");


        //Delete Param的兩種方法
        //① ros::NodeHandle::deleteParam()
        bool ifdeleted5 = nh.deleteParam("param5");

        //② ros::param::del()
        bool ifdeleted6 = ros::param::del("param6");


        if(ifdeleted5)
                ROS_INFO("Param5 deleted");
        else
                ROS_INFO("Param5 not deleted");

        if(ifdeleted6)
                ROS_INFO("Param6 deleted");
        else
                ROS_INFO("Param6 not deleted");


        ros::Rate rate(0.3);
        while(ros::ok()){
                int parameter = 0;

                ROS_INFO("=============Loop==============");
                //roscpp中尚未有ros::param::getallparams()之類的方法
                if(ros::param::get("param1", parameter))
                        ROS_INFO("parameter param1 = %d", parameter);
                if(ros::param::get("param2", parameter))
                        ROS_INFO("parameter param2 = %d", parameter);
                if(ros::param::get("param3", parameter))
                        ROS_INFO("parameter param3 = %d", parameter);
                if(ros::param::get("param4", parameter))
                        ROS_INFO("parameter param4 = %d", parameter);
                if(ros::param::get("param5", parameter))
                        ROS_INFO("parameter param5 = %d", parameter);
                if(ros::param::get("param6", parameter))
                        ROS_INFO("parameter param6 = %d", parameter);
                rate.sleep();
        }
}

 

param_demo_cpp.launch

<launch>
    <!--param參數配置-->
    <param name="param1" value="1" />
    <param name="param2" value="2" />
    <!--param name="table_description" command="$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro" /-->

    <!--rosparam參數配置-->
    <rosparam>   
        param3: 3
        param4: 4
        param5: 5
    </rosparam>
    <!--以上寫法將參數轉成YAML文件加載,注意param前面必須爲空格,不能用Tab,否則YAML解析錯誤-->
    <!--rosparam file="$(find robot_sim_demo)/config/xbot-u_control.yaml" command="load" /-->
    <node pkg="param_demo" type="param_demo" name="param_demo" output="screen" />

    

</launch>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章