在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;
}