ROS中的roslaunch命令和launch文件(ROS入门学习笔记四)
ROS功能包中CMakeLists.txt的说明(ROS入门学习笔记三)
1.roslaunch命令
我们知道,rosrun命令用于运行一个ROS节点,这个在简单程序中使用比较方便。但是在规模比较大的程序中,常常有几个或者几十个节点,这些节点之间彼此互有联系,协同达到软件正确执行的目的。这时候再使用rosrun命令的话,就会比较麻烦。此时,roslaunch命令闪亮登场了,它可以运行多个节点。并且roslaunch命令在运行节点时,还可以附加一些ROS命令选项,比如修改参数或节点的名称,设置节点的命名空间,设置ROS_ROOT及ROS_PACKAGE_PATH,以及环境变量修改等选项的ROS命令。
roslaunch命令的使用,需要先创建一个XML格式的xxx.launch文件,将要运行的节点以及系统中相关参数设置信息写在这个launch文件中,然后执行这个launch文件就可以了。【这里可以理解为launch文件就是一个脚本文件,要执行的操作都写在脚本文件中,执行脚本文件就OK了。】
roslaunch命令执行格式:
roslaunch 功能包名称 launch文件 [参数设置]
这里roslaunch命令会在对应的功能包中找到名称匹配的launch文件,并执行这个launch文件。如果设置了参数的话,会将参数传入到launch文件中赋给对应的参数。
例如,执行vins_estimator功能包中的euroc.launch文件,命令如下。
roslaunch vins_estimator euroc.launch
如果在launch文件所在路径下执行该launch文件的话,就不需要加功能包名称了,因为此时是能直接找到launch文件的。
如果运行launch文件时需要设置参数,如下所示。arg为参数名称,value为给参数的赋值。
roslaunch my_file.launch arg:=value
注意:在执行roslaunch命令时,一定要先执行source命令:source ../devel/setup.bash命令,否则找不到对应的包名称。
2.launch文件
一般情况下,使用launch文件时,要在工程中创建一个launch目录,并在launch目录下创建xxx.launch文件。
先拿一个VINS-Mono中的euroc.launch文件看看launch文件长什么样子。
<launch>
<arg name="config_path" default = "$(find feature_tracker)/../config/euroc/euroc_config.yaml" />
<arg name="vins_path" default = "$(find feature_tracker)/../config/../" />
<node name="feature_tracker" pkg="feature_tracker" type="feature_tracker" output="log">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="vins_folder" type="string" value="$(arg vins_path)" />
</node>
<node name="vins_estimator" pkg="vins_estimator" type="vins_estimator" output="screen">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="vins_folder" type="string" value="$(arg vins_path)" />
</node>
<node name="pose_graph" pkg="pose_graph" type="pose_graph" output="screen">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="visualization_shift_x" type="int" value="0" />
<param name="visualization_shift_y" type="int" value="0" />
<param name="skip_cnt" type="int" value="0" />
<param name="skip_dis" type="double" value="0" />
</node>
</launch>
其实我们已经知道launch文件是个XML格式的文件,而XML格式文件是由各种标签标识组成的。因此,要理解并且熟练编写launch文件就需要熟悉launch文件中的各个标签所包含的意思以及其书写形式。
以上边的euroc.launch为例,在<launch>标签中,描述了使用roslaunch命令运行节点所需的标签。<arg>描述了系统运行中所需要的参数。<node>描述了roslaunch运行的节点,选项包括pkg、type和name。
这里的<arg>中的name表示参数的名称,default表示参数默认的值。如果需要设置别的值,可以在roslaunch命令中加入节点名。
<node>中pkg、type、name字段含义如下:
pkg 功能包名称。
type 实际运行的节点的名称(节点名)。
name 与上述type对应的节点被运行时,起的名称(运行名)。一般情况下使用与type相同的名称,但可以根据需要,在运行时更改名称。
launch文件中其他
<launch> 指roslaunch语句的开始和结束。
<node> 这是对于节点运行的标签。您可以更改功能包、节点名称和执行名称。
<machine> 可以设置运行该节点的PC的名称、address、ros-root和ros-package-path。
<include> 您可以加载属于同一个功能包或不同的功能包的另一个launch,并将其作为一个launch文件来运行。
<remap> 可以更改节点名称、话题名称等等,在节点中用到的ROS变量的名称。例如:<remap from="chatter" to="hello"/>
<env> 设置环境变量,如路径和IP(很少使用)。
<param> 设置参数名称、类型、值等。
<rosparam> 可以像rosparam命令一样,查看和修改load、dump和delete等参数信息。
<group> 用于分组正在运行的节点。
<test> 用于测试节点。类似于<node>,但是有可以用于测试的选项。
<arg> 可以在launch文件中定义一个变量,以便在像下面这样运行时更改参数。
参考文档:roslaunch/XML
更多推荐
所有评论(0)