参考:
- http://wiki.ros.org/ROS/Tutorials/Roslaunch tips for larger projects
- http://wiki.ros.org/roslaunch
- http://wiki.ros.org/roslaunch/Commandline Tools
- http://wiki.ros.org/roslaunch/XML
配置文件
格式
XML格式
加载顺序
包括各节点、子节点以及include内容在内,以深度有限遍历顺序加载,同一个配置项最后出现的生效。
命令替换
形式:$(cmd args),可用于launch文件中的各tag的属性赋值中
支持以下命令替换:
- $(env ENVIRONMENT_VARIABLE): 取环境变量值,如果环境变量不存在,launch失败
- $(optenv ENVIRONMENT_VARIABLE default_value): 如果设置了环境变量,取环境变量值,如果没有,取缺省值,如果没有指定缺省值,取空字符串
- $(find pkg): 查找包路径,通常用于通过包路径指定文件的相对路径
- $(anon name): 生成基于name的匿名node名
- $(arg foo): 去arg值,foo必须通过<arg>定义过
- $(eval ): 执行python表达式
Note: As a limitation, $(eval) expressions need to span the whole attribute string. A mixture of other substitution args with eval within a single string is not possible:
为了补救这种限制,其他替换命令可以作为eval的一个函数使用,例如:<param name="foo" value="$(arg foo)$(eval 6*7)bar"/>
其中,arg可以隐私使用,即以下两种方式是等价的:"$(eval arg('foo') + env('PATH') + 'bar' + find('pkg')"
"$(eval arg('foo'))" "$(eval foo)"
- $(dirname): 当前luanch文件所在的目录
if和unless属性
所有 tag 都支持 if 和 unless 属性
如果包含 if 属性,当 if 属性的值为 1 或 true 时,该 tag 生效
如果包含 unless 属性,当 unless 属性的值不为 1 或 true 时,该 tag 生效
Tag说明:
<launch>: 顶层标签
可以包含其他Tag,仅支持一个属性:
- deprecated=“deprecation message”
可包含Tag:
- <node>
- <param>
- <remap>
- <machine>
- <rosparam>
- <include>
- <env>
- <test>
- <arg>
- <group>
<node>: 节点
支持以下属性:
- pkg=“mypackage”: 指定节点可执行文件所属的ROS包名
- type=“nodetype”: 指定节点的可执行文件名
- args=“arg1 arg2 arg3”(optional): 节点的命令行参数
- machine=“machine-name”(optional): 在远程主机上运行节点
- respawn=“true”(optional, default: False): 节点退出后自动重启
- respawn_delay=“30” (optional, default 0) : 节点重启的时间间隔,单位s
- required=“true”(optional): 如果node标记为required,这个node结束时,会结束整个launch启动的所有node
- ns=“foo”(optional): 节点所属的名字空间
- clear_params=“true”(optional): 启动时清除之前设置的所有参数,这在想删除之前设置过的某个参数,使其恢复默认值时很有用。
- output=“log|screen”(optional): 默认值:‘log’。即使指定了log,输出到stderr的内容也会输出到屏幕。
- cwd=“ROS_HOME|node”(optional): 节点的工作目录,默认值:‘ROS_HOME’,node表示节点可执行文件所在目录
- launch-prefix=“prefix arguments”(optional): 执行node命令的前缀,主要用于调试,例如:gdb或者valgrind
- if/unlsess
node节点可以包含以下节点:
- <env>
- <remap>
- <rosparam>
- <param>
<machine>: 配置远程主机
支持以下属性:
- name=“machine-name”:
- address=“blah.willowgarage.com”
- env-loader=“/opt/ros/fuerte/env.sh”: 指定初始化远程主机环境变量的脚本
- default=“true|false|never” (optional): 如果指定为true,则后续定义的node默认使用此主机,没有指定为default的machine时,node默认在本地执行,如果指定为never,需要在node中使用machine属性明确指出使用此主机,如果指定为false,此主机不是默认主机,但可参与自动选择机制?
- user=“username” (optional): ssh user
- password=“passwhat”: ssh password,为了安全,不建议使用,建议使用ssh免密登录机制
- timeout=“10.0” (optional): 登录运行超时,单位s,默认值为10
可包含Tag:
- : 为该主机运行的所有node设置环境变量
<include>: 包含其他文件
支持的属性:
- file=“$(find pkg-name)/path/filename.xml”
- ns=“foo” (optional),包含文件中的所有内容相对于此名字空间
- clear_params=“true|false” (optional Default: false): 删除名字空间下的所有参数(必须指定ns)
- pass_all_args=“true|false” (optional Default: false): 向include文件中传递所有参数
可包含Tag:
- <env>:
- <arg>:
<remap>: 名字映射
支持的属性:
- from=“original-name”
- to=“new-name”
<env>: 定义环境变量
支持的属性:
- name=“environment-variable-name”
- value=“environment-variable-value”
<param>: 单个参数配置
即可以在luanch下定义全局的参数,也可以在node中定义node的私有参数,还可以在group中使用~param方式定义一组node共用的私有参数
支持的属性:
- name=“namespace/name”
- value=“value”(optional): If this attribute is omitted, binfile, textfile or command must be specified.
- type=“str|int|double|bool|yaml”(optional)
- textfile=“$(find pkg-name)/path/file.txt”(optional): 用文本文件内容作为参数值,注意回车换行符
- binfile=“$(find pkg-name)/path/file”(optional): 用二进制文件内容作为参数值
- command=“ ( f i n d p k g − n a m e ) / e x e ′ (find pkg-name)/exe ' (findpkg−name)/exe′(find pkg-name)/arg.txt’”(optional): 用命令的输出做为参数值
<rosparam>: 多个参数批量配置
支持的属性:
- command=“load|dump|delete” (optional, default=load):
注意:所有的dump/delele命令的rosparam会在load命令的rosparam和param之前执行;dump/delele命令按照定义的顺序执行 - file=“$(find pkg-name)/path/foo.yaml” (load or dump commands)
- param=“param-name”
- ns=“namespace” (optional)
- subst_value=true|false (optional)
说明:除了使用yaml文件外,还可以使用Tag的Element的Text部分直接写出:
<rosparam param="a_list">[1, 2, 3, 4]</rosparam>
<rosparam>
a: 1
b: 2
</rosparam>
<arg name="whitelist" default="[3, 2]"/>
<rosparam param="whitelist" subst_value="True">$(arg whitelist)</rosparam>
<group>: 分组与名字空间
group常与if或ns属性联合使用,为一组node设置独立的环境,包括env,remap,machine等
支持的属性:
- ns=“namespace” (optional)
- clear_params=“true|false” (optional): 危险,必须与ns属性配合使用
可包含Tag:
- <node>
- <param>
- <remap>
- <machine>
- <rosparam>
- <include>
- <env>
- <test>
- <arg>
<arg>: roslaunch 命令行参数
三种用法:
- <arg name=“foo” />: 必须通过命令行或include的指定参数值
- <arg name=“foo” default=“1” />: 带默认值,可以不通过命令行或include的指定参数值
- <arg name=“foo” value=“bar” />: 固定值,不能通过命令行或include的指定值,只能在launch文件内部使用,方便统一定义参数值,后面用$(arg xxx)替换使用。
支持的属性:
- name=“arg_name”
- default=“default value” (optional)
- value=“value” (optional)
doc=“description for this arg” (optional)
注意:default和value只能出现一个