- 通过
launch
文件以及roslaunch
命令可以一次性启动多个节点,并且可以设置丰富的参数- 通常存放路径:工作空间目录 / launch /
xxx.launch
- launch 文件本质是一个
xml
类型的文件,基本格式如下<launch> <node .../> ## 最重要的标签 <param .../> <rosparam .../> <include .../> <remap .../> <arg .../> <group> </group> </launch>
- 通常存放路径:工作空间目录 / launch /
- _________________
<node>
标签:指定一个准备运行的ROS节点<node pkg="package_name" type="executable_node" name="node_name" args="$()" respawn="true" output="sceen">
pkg
:节点所在功能包名称type
:可执行文件的名称name
:节点运行时的名称args
:传递命令行设置的参数respawn
:异常关闭后是否自动重启output
:是否将节点信息输出到屏幕
- _________________
<param>
标签:实现传递参数的功能,运行
时的参数,参数会存储在参数服务器中<param name="param_name" type="param_type" value="param_value" /> <!-- param 标签可以嵌入到 node 标签中,以此来作为该 node 的私有参数 --> <node><param name="param_name" type="param_type" value="param_value" /> </node>
name
:参数名称type
:参数类型 double,str,int,bool,yamlvalue
:需要设置的参数值
- _________________
<rosparam>
标签:从参数服务器上加载(load)、导出(dump)和删除(delete)YAML文件<!-- 加载package_name功能包下的example.yaml文件 --> <rosparam command="load" file="$(find package_name)/example.yaml"> <!-- 导出example_out.yaml文件到package_name功能包下 --> <rosparam command="dump" file="$(find package_name)/example_out.yaml" /> <!-- 删除参数 --> <rosparam command="delete" param="xxx/param">
command
:功能类型(load、dump、delete)file
:参数文件路径param
:参数名称
- _________________
<include>
标签:和编程语言中的include预处理类似,导入其他launch文件<include file="$(find package_name)/launch_file_name">
file
:文件路径
- _________________
<remap>
标签:实现节点名称的重映射<remap from="turtle1/cmd_vel" to="/cmd_vel" /> <!-- remap 标签同样可以嵌入到 node 标签中,以此来作为该 node 的私有重映射 --> <node><remap from="turtle1/cmd_vel" to="/cmd_vel" /> </node>
- _________________
<arg>
标签:局部参数,启动
时的参数,只在launch文件中有意义<arg name="arg_name" default="arg_default" /> <arg name="arg_name" value="arg_value" /> <!-- 命令行传递的 arg 参数可以覆盖 default,但不能覆盖 value。 -->
- _________________
<group>
标签:可以将不同的节点放入不同的 namespace<!-- 用法1 --> <group ns="namespace_1"><node pkg="pkg_name1" .../><node pkg="pkg_name2" .../>... </group><group ns="namespace_2"><node pkg="pkg_name3" .../><node pkg="pkg_name4" .../>... </group> <!-- 用法2 --> <!-- if = value:value 为 true 则包含内部信息 --> <group if="$(arg foo1)"><node pkg="pkg_name1" .../> </group><!-- unless = value:value 为 false 则包含内部信息 --> <group unless="$(arg foo2)"><node pkg="pkg_name2" .../> </group> <!--当 foo1 == true 时包含其标签内部当 foo2 == false 时包含其标签内部 -->
博客参考链接