01 launch文件启动
launch文件:通过XML文件实现多节点的配置和启动
-
launch文件可自动启动ROS Master,所以不用
roscore
了 -
编写或修改launch文件后不需要再
catkin_make
编译 -
启动launch文件:
roslaunch pkg_name launchfile_name.launch
也可以使用绝对路径启动launch文件:
roslaunch path_to_launchfile
-
添加参数的launch文件启动如下
roslaunch pkg_name launchfile_name model:=urdf/myfile.urdf # launch file 中有参数 “model” 需要赋值 # 或 roslaunch pkg_name launchfile_name model:='$(find urdf_pkg)/urdf/myfile.urdf' # 用 find 命令提供路径
常见参数:
screen
: 令 ros node 的信息(如果有的话)输出到屏幕上,而不是保存在某个 log 文件中,这样比较方便调试arg:=value
: 如果 launch 文件中有待赋值的变量,可以通过这种方式赋值
02 launch文件基本语法
<launch>
:launch文件中的根元素采用标签定义
launch文件语法与xml相同,其常用标签如下:
<launch> <!--根标签-->
<node> <!--需要启动的node及其参数-->
<include> <!--包含其他launch-->
<machine> <!--指定运行的机器-->
<env-loader> <!--设置环境变量-->
<param> <!--定义参数到参数服务器-->
<rosparam> <!--加载yaml文件中的参数到参数服务器-->
<arg> <!--定义变量-->
<remap> <!--设定 topic 映射-->
<group> <!--设定分组-->
</launch> <!--根标签-->
2.1 node标签
<node>
标签是launch文件最常使用的标签之一
<launch>
<node pkg="package_name" type="executable_file" name="node_name1"/>
<node pkg="another_package" type="another_executable" name="another_node"></node>
</launch>
pkg
:是节点所在的 package 名称type
:是 package 中的可执行文件,如果是 python编写的,就需要写出.py
后缀;如果是 c++ 编写的,则直接写可执行文件的名字就可以,不需要.cpp
后缀。name
:是节点启动之后的名字, 每一个节点都要有自己独一无二的名字。如果想启动两个相同的文件,可以在这里写两个不同的名字,这样就可以启动两个原名字相同的节点了(比如启动两个小乌龟),这也是使用launch文件的优势之一。
注意: roslaunch 不能保证 node 的启动顺序,因此 launch 文件中所有的 node 都应该对启动顺序有鲁棒性。
所以这也是手眼标定时,很多博主都说最好不要在一个launch文件中启动,分开启动的原因。
<node>
中除了 pkg
、 type
、name
之外还可以设置更多参数,如下:
<launch>
<node</