ROS基礎:獲取全局與局部launch Parameter

   在launch 參數配置中,分爲有全局參數和局部參數(私有參數),兩者參數的獲取是不同的,參數示例如下:

<launch>
    <!-- 全局參數 -->
    <param name="param1" value="1"/>
    <param name="param2" type="string" value="Hello param"/>

    <node name="param_zpq" pkg="param_demo" type="param_zpq" output="screen">
        <!-- 局部參數(私有參數) -->
        <param name="param3" value="/dev/ttyusb"/>
    </node>
</launch>

   如何獲取參數呢,如下:

#include "ros/ros.h"

int main(int argc,char** argv)
{
    ros::init(argc, argv, "param_zpq");

    ros::NodeHandle nh;
    /* 私有句柄 */
    ros::NodeHandle n("~");
    int param1;
    std::string param2,param3,param4;

    ROS_INFO("=================loge1===============");
    /*句柄nh 獲取全局參數*/
    bool get1 = nh.getParam("param1",param1);
    if(get1)ROS_INFO("GET param1 %d",param1);

    /*句柄nh 獲取全局參數*/
    bool get2 = nh.getParam("param2",param2);
    if(get2)ROS_INFO("GET param2 %s",param2.c_str());

    /*局部n 獲取局部參數*/
    bool get3 = n.getParam("param3",param3);
    if(get2)ROS_INFO("GET param3 %s",param3.c_str());

    /*如果想通過 全局句柄 nh 獲取局部參數,只要在參數前添加node名即可*/
    bool get4 = nh.getParam("/param_zpq/param3",param4);
    if(get2)ROS_INFO("GET param4 %s",param4.c_str());

    ros::Rate rate(10);
    while(ros::ok()){
        ROS_INFO("=================loge2===============");
        ROS_INFO("param1 = %d",param1);
        ROS_INFO("param2 = %s",param2.c_str());
        ROS_INFO("param3 = %s",param3.c_str());
        ROS_INFO("param4 = %s",param4.c_str());
        ros::spinOnce();
        rate.sleep();
    }
    return 0;
}

 

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