ROS中的roslaunch命令和launch文件(ROS入门学习笔记四)

ROS中的基本对象和概念学习笔记(ROS入门学习笔记一)

ROS中创建工作区和包(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

发布了72 篇原创文章 · 获赞 190 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/moyu123456789/article/details/95007381
今日推荐