Launch文件是通过.xml文件来实现多节点的配置与启动的文件,可以自动启动ROS master,不需要使用roscore命令启动ROS master。一个launch文件里也可以引用其他.launch文件。
launch 文件中的根元素采用<launch>标签定义。一般包含以下几个部分:
(1)<node>标签
功能:启动节点,取消节点(取消??)。所以启动的节点以任意顺序启动。
<node name="node-name" pkg="package-name" type="executable-name" />
- pkg:节点所在的功能包的名称
- type:节点的可执行文件
- name:节点运行的名称
其他可选的配置项:
- output:如果'screen',stdout / stderr会从节点发送到屏幕。 如果'log',stdout / stderr输出将被发送到$ ROS_HOME / log中的日志文件,并且stderr将继续发送到屏幕。 缺省值是'log'。
- respawn:为'true'的时候,退出后自动重新启动节点。
- required:为'true’时,如果节点死亡,则杀死整个roslaunch.
- ns:为'foo'时,在'foo'命名空间中启动节点。
- args:将参数传递给节点。
- machine:在指定机器上启动节点。
- 参考:roslaunch/Tutorials/node
(2)<machine>标签
笔者很少用,具体可以参考:roslaunch/XML/machine
(3)<include>标签
包含其他launch文件。
<include file="$(dirname)/other.launch"> <arg name="arg-name)" default="arg-value"/> .... </include>
dirname:launch文件路径
name:参数名
value:参数值
具体参考:标签详情
(4)<remap>标签
重映射ROS计算图资源的命名。 <remap>标签适用于其范围(<launch>,<node>或<group>)中的所有后续声明。
<remap from="chatter" to="hello"/>
from:原命名
to:映射之后的命名
参考:remap详情
(5)<env>标签
允许您在启动的节点上设置环境变量。
参考详情:env标签详情
(6)<param>标签
设置ROS系统运行中的参数,存储在参数服务器中
<param name="publish_frequency" type="double" value="10.0" />
name:参数名
value:参数值
type:指定参数类型,,有str|int|double|bool|yaml选项
<param name="publish_frequency" type="double" value="50.0" />
command:该命令的输出将被读取并存储为一个字符串(???)
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_laser_gazebo.xacro'" />
参考:param详情
(7)<rosparam>标签
加载参数文件中的多个参数。
<rosparam file=”params.yama" command="load" ns="params"/>
<rosparam>标签允许使用rosparam YAML文件从ROS参数服务器加载和转储参数。 它也可以用来删除参数。 <rosparam>标签可以放在<node>标签中,在这种情况下,参数被视为一个私有名称。
<rosparam command="load" file="$(find rosparam)/example.yaml" /> <rosparam command="delete" param="my/param" />
<rosparam param="a_list">[1, 2, 3, 4]</rosparam>
<rosparam> a: 1 b: 2 </rosparam>详情参考: rosparam详情
(8)<group>标签
笔者很少用,详情参考:group详情
(9)<test>标签
与<node>标签相似。 它们都指定要运行的ROS节点,但<test>标记指示该节点实际上是要运行的测试节点。
详情参考:test详情
(10)<arg>标签
Launch文件内部的局部变量,仅限于Launch文件使用
<arg name="arg-name" default="arg-value"/>
name:参数名
value:参数值
参考:arg详情
调用:
<param name="foo" value="$(arg arg-name)"/> <node name="node" pkg="package" type="type" args="$(arg arg-name)"/>
参考网站:大型项目roslaunch