ROS:在launch文件中修改参数服务器中的parameter

4 篇文章 0 订阅

在源代码中修改参数每次都需要重新编译才能运行,费时费力,我们可以利用ROS的参数服务器,并且把修要修改的参数写在launch文件中,这样每次修改launch文件后Ctrl+S,就可以马上运行看看效果。

在answer.ros.org上看见别人的回答如下。写下自己的见解,和一点补充。

launch文件:

<launch>
......
<param name="camera_topic_root" value="/camera/image_rect">
<group ns="group_ns">
    <param name="camera_topic_ns" value="/camera/image_rect">
    <node name="node_name" pkg="foo" type="bar" >
        <param name="camera_topic_private" value="/camera/image_rect">
    </node>
</group>
......
</launch>

可见三个不同的参数被分别放置在不同的命名空间下,因此,参数服务器中,他们是这样的:

/camera_topic_root
/group_ns/camera_topic_ns
/group_ns/node_name/camera_topic_private

在cpp文件中调用他们的语法是这样的:

ros::param::get("/camera_topic_root",camera_topic);     // /camera_topic_root
ros::param::get("camera_topic_ns",camera_topic);        // /group_ns/camera_topic_ns
ros::param::get("~camera_topic_private",camera_topic);  // /group_ns/node_name/camera_topic_private

我的验证中发现~camera_topic_private在使用过程中会报错,提示我在定义ros::NodeHandle n;的时候写为ros::NodeHandle n(~);

我的理解是,这样的话就把命名空间命名为“~”了,而事实上,我们在ros::init(argc, argv, “node_name”);的过程中默认使用的是node_name命名空间,因此在我使用的过程中,ROS会报错,提示我,如果想要表明此变量是私有变量,请不要用“~”同时使用node_name作为命名空间,要么将命名空间改为“~”,要么把变量前面的“~”用命名空间名称替换,从而来表达这是个私有变量。

总结:
总的来说,在参数服务器中的名字永远是可用的,毕竟只需要写一次,所以无论变量前面有什么前缀,也就是无论在什么命名空间下,只要在源文件里写全就没什么问题啦。
比如:

ros::param::get("~camera_topic_private",camera_topic); 

有问题,
就写成:

ros::param::get("/group_ns/node_name/camera_topic_private",camera_topic); 

另外对于load yaml参数文件做个补充,以下是示范:
launch文件:

......
    <rosparam command="load" file="$(find package_name)/conf/file_name.yaml" />
......

在ROS软件包的conf文件夹下,file_name.yaml文件内容为:

name_space:
    key : valve

在cpp文件中:
首先定义好与参数同类型的变量,如int i,之后再通过key将valve赋值给 i。

int i;
n.getParam("/name_space/key", i );

上述过程,参数服务器中的变量,也就是launch文件或者相应的.yaml文件中均未指明变量的类型,只是在cpp中定义用于接收参数的变量时指明了类型,用起来似乎没什么问题。
目前,我在使用的过程中都是在launch文件中也指明参数类型的,比如:

......
    <param name="param_name"    type="param_type"    value="param_valve"/>
......

使用的时候注意标签名字,以及type支持的类型,比如type=“double”是ok的,但是type=“float”会报错,float是不被支持的。
笨笨的错误,高手莫见笑。

参考:
https://answers.ros.org/question/43001/setting-parameters-in-a-launch-file-does-not-appear-to-be-working/
https://github.com/ankitdhall/lidar_camera_calibration (github 用于标定相机和雷达的程序)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值