ros param rosparam

本文深入解析ROS中的参数管理机制,包括参数服务器的功能、param与rosparam的区别,以及arg和env在launch文件中的应用。详细介绍了如何通过不同方式访问和设置参数,为ROS开发者提供实用指南。

rosparam param env arg 的用法

原文:http://www.rosclub.cn/post-172.html

launch file 中可能会同时出现这么几个概念 param、rosparam、arg、env

launch file 中可能会同时出现这么几个概念 param、rosparam、arg、env

本文解释他们的区别

launch时roslaunch首先检查roscore是否已经启动

如果没有则启动roscore

roscore会做三件事:

 1、启动master节点,该节点是隐藏的,用于通过消息名查询目标节点,实现消息、服务在各个节点之间的连接

 2、启动parameter server,用于设置与查询参数

 3、启动日志节点,记录所有消息收发和stdout、stderr

目前roscore暂不会加入其他功能。

其中parameter server参数服务器,可以方便地通过设置参数来改变节点的行为

参数服务器内的参数是以key,value的形式交互

其中key可以加前缀作为命名空间构成多级参数

参数的访问有三种方式:

命令行:

1

rosparam set / rosparam get

launch文件:

1

param / rosparam

API:

1

2

roscpp: ros::param::set / ros::param::get

rospy: set_param / get_param

ROS中,param特指在参数服务器parameter server中存储的参数

在launch文件中有两个相关的标签:<param>、<rosparam>

<param>标签可用于直接设置参数,也可以从文件中读取

<rosparam>标签用于从yaml文件中读取并设置参数

roslaunch发现<param>和<rosparam>标签后会调用rosparam包来实现设置

<arg>标签给launch文件内部设置参数

通过<arg>标签设置的参数仅在launch文件内有效

<arg>标签有三种设置参数的方式:

  1、直接用此标签设置

  2、用此标签声明,用roslaunch命令确定其值

  3、用此标签声明,在include本launch文件的父launch文件中确定其值

只有一种使用方式:通过launch文件内部的substitution args来使用:$(arg foo)

arg的整个设置到解析仅在roslaunch解析launch文件过程中使用

完成整个启动过程后即刻失效

<env>标签用于设置环境变量

此处“环境变量”是指linux系统的进程环境变量

设置了<env>的node对应的进程可观察到此环境变量

可以通过getenv函数读取

ros也提供了跨平台函数ros::get_environment_variable来读取环境变量

需要注意的是此法设置的环境变量是进程的环境变量,在运行roslaunch的shell上是echo不出来的

可以先rosnode info查看节点进程的pid,例如是12345

1

cat /proc/12345/evniron | tr ‘\0’ ‘\n’

来查看进程的环境变量

注意:launch文件的substitution args: $(env ENVIRONMENT_VARIABLE)

用于查询当前shell环境变量是无法查询<env>设置的进程环境变量的

故<env>无法改变launch的行为,只能通过getenv或ros::get_environment_variable来改变节点的行为

 

参考链接

http://wiki.ros.org/roscore

http://wiki.ros.org/Parameter%20Server

http://wiki.ros.org/roslaunch

http://wiki.ros.org/roslaunch/XML

http://wiki.ros.org/roslaunch/XML/param

http://wiki.ros.org/roslaunch/XML/rosparam

http://wiki.ros.org/rosparam

http://wiki.ros.org/roslaunch/XML/env

### 编写ROS中的Param参数文件 在ROS中,`param` 参数文件通常用来配置节点的行为。这些文件可以是YAML格式或XML格式。为了更好地理解如何创建和使用这些文件,在此提供一些指导。 #### YAML格式的参数文件 对于大多数应用而言,推荐使用YAML格式来定义参数,因为其语法更加简洁易读。下面展示了一个简单的例子: ```yaml # 文件名: example.yaml frequency: 30.0 sensor_timeout: 1.0 odom_used: true imu_used: true vo_used: false ``` 上述代码片段展示了如何设置频率、传感器超时时间以及其他布尔类型的标志位[^4]。 #### XML格式的参数文件 虽然YAML更为常用,但在某些情况下也可能遇到基于XML格式的参数文件。这里给出一段类似的配置作为对比: ```xml <launch> <!-- Robot pose ekf --> <node pkg="robot_pose_ekf" type="robot_pose_ekf" name="robot_pose_ekf" output="screen"> <param name="freq" value="30.0"/> <param name="sensor_timeout" value="1.0"/> <param name="odom_used" value="true"/> <param name="imu_used" value="true"/> <param name="vo_used" value="false"/> <remap from="/imu_data" to="/mobile_base/sensors/imu_data" /> </node> </launch> ``` 这段XML不仅包含了参数设定还涉及到了节点启动的相关指令。 #### 加载参数到ROS Master 无论是哪种格式,都可以通过命令行工具如 `rosparam load` 或者是在 `.launch` 文件里指定 `<rosparam>` 标签的方式加载参数至ROS Master数据库中以便各个节点访问它们。 例如,如果有一个名为 `example.yaml` 的YAML文件,则可以通过以下方式将其内容上传给ROS: ```bash rosparam load /path/to/example.yaml ``` 或者在一个`.launch`文件内这样操作: ```xml <launch> ... <rosparam file="$(find your_package_name)/config/example.yaml" command="load"/> ... </launch> ``` 这使得可以在不修改源码的情况下灵活调整运行时行为[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值