1先将某参数放到参数列表(参数服务器)中去。
方法有:①launch文件里添加参数语句:
如:
<launch>
<node name="icp" pkg="my_pcl_tutorial" type="icp" >
</node>
<param name="MaximumIterations" value="80"/>
</launch>
可否改变参数服务器里参数的值:是。
参数所在命名空间:全局。(想设为某命名空间的参数,可以改变paramname:参数名-->空间名/参数名;想放在节点的命名空间里,就将参数语句放在节点语句内,<node>前面。)
又如:在launch里加载yaml文件,批量放参数。
<launch>
<node name="icp" pkg="my_pcl_tutorial" type="icp" >
</node>
<rosparam command="load" file="$(find my_pcl_tutorial)/param/icp.yaml"/>
</launch>
yaml文件格式:很简单-->参数名:值
EuclideanFitnessEpsilon: 1
MaximumIterations: 30
MaxCorrespondenceDistance: 1
TransformationEpsilon: 1e-6
可否改变参数服务器里参数的值:是。 直接在yaml文件里改变参数值就可以了。
参数所在命名空间:全局。(想设为某命名空间的参数,可以加一句ns="空间名"。如:
<rosparam command="load" file="$(find my_pcl_tutorial)/param/icp.yaml" ns="icp"/> )
②在终端中使用rosparam set语句:
如:
rosparam set /EuclideanFitnessEpsilon 0.5
可否改变参数服务器里参数的值:是。
参数所在命名空间:全局。(想设为某命名空间的参数,可以在改变paramname:参数名-->空间名/参数名)
③在源码(节点)中使用rosparam set语句:
注意这样的话,参数所在的命名空间就是节点的命名空间了。
2在源文件(节点)里使用,从参数服务器中拿下来。
方法有:①ros::param::get("frequency",f)
frequency:参数名,f:参数变量。
②使用句柄,ros::NodeHandle::getParam()
比如:
pn.getParam("int_param",num);
如果获取参数失败,可以用以下设置默认参数的语句(这种方式也不能将参数放到服务器,读取不到的),
n.param<float>("string_param", a, 123.0);
或
ros::param::param<std::string>("default_param", default_param, "default_value");
还有个私有参数私有空间的问题,还没太明白,先留着吧。