原文: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可以加前缀作为命名空间构成多级参数
参数的访问有三种方式:
命令行:
rosparam set / rosparam get
launch文件:
param / rosparam
API:
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
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