4.1 启动文件 launch 简介
4.1 启动文件 launch 简介
场景
如前所述,在机器人操作系统中,节点是程序的基本构成单元,一个完整的、系统性的功能模块是由若干节点组成的,启动某个功能模块时可能需要依次启动这些节点,比如:
以机器人的导航功能为例,涉及的节点主要有:
底盘驱动;
雷达驱动;
摄像头驱动;
imu驱动;
地图服务;
路径规划;
运动控制;
环境感知;
定位;
......
并且不同节点启动时,可以还会涉及到各种参数的导入、节点间执行逻辑的处理等。
如果使用 ros2 run
指令逐一执行节点的话,显然效率低下,基于此,ROS2中提供了launch模块用于实现节点的批量启动。
概念
launch 字面意为“启动”、“发射”,在ROS2中主要用于启动程序。launch模块由launch文件与 ros2 launch
命令组成,前者用于打包并配置节点,后者用于执行launch文件。
作用
简化节点的配置与启动,提高程序的启动效率。
准备工作
1.新建工作空间ws02_tools
,本章后续编码实现都基于此工作空间;
2.终端下进入工作空间的src目录,调用如下两条命令分别创建C++功能包和Python功能包。
ros2 pkg create cpp01_launch --build-type ament_cmake --dependencies rclcpp
ros2 pkg create py01_launch --build-type ament_python --dependencies rclpy
3.在使用Python版的launch文件时,涉及的API众多,为了提高编码效率,可以在VScode中设置launch文件的代码模板,将VScode的配置文件python.json修改为为如下内容:

4.1.1 launch 基本使用流程
在 ROS2 中,launch 文件可以使用Python、XML或YAML编写,不同格式的 launch 文件基本使用流程一致。接下来我们通过一个案例演示 launch 文件的基本编写编译流程,案例需求:编写并执行 launch 文件,可以启动两个turtlesim_node
节点。
实现步骤如下:
编写launch文件;
编辑配置文件;
编译;
执行。
1.C++实现
1.编写launch文件
功能包cpp01_launch下,创建launch目录。launch文件可以是python文件、xml文件或yaml文件,不同类型的launch文件可以直接存储在launch目录下,或者为了方便管理,我们也可以在launch目录下新建py、xml和yaml三个文件夹分别存储对应类型的launch文件,并且建议不同格式的launch文件命名时分别使用_launch.py
、_launch.xml
、_launch.yaml
或.launch.py
、.launch.xml
、.launch.yaml
作为后缀名。
不同类型的 launch 文件示例如下:
Python文件:py00_base.launch.py

XML文件:xml00_base.launch.xml

YAML文件:yaml00_base.launch.yaml

launch 文件编写完毕后,其实已经可以直接使用 ros2 launch 文件路径
的方式执行了,终端中进入当前工作空间,输入如下指令:
ros2 launch src/cpp01_launch/launch/py/py00_base.launch.py
但是这种执行方式不建议。
2.编辑配置文件
CMakeLists.txt 中添加语句:
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})
无论该功能包的launch目录下有多少个launch文件,launch相关配置只需设置一次即可。
3.编译
终端中进入当前工作空间,编译功能包:
colcon build --packages-select cpp01_launch
4.执行
当前工作空间下,启动终端,输入如下指令:
. install/setup.bash
ros2 run cpp01_launch py00_base.launch.py
该指令运行的是 python 格式的 launch 文件,其他两个launch文件与之同理。最终,会启动两个 turtlesim_node 节点。
2.Python实现
1.编写launch文件
功能包py01_launch下,创建launch目录,launch目录下新建py、xml和yaml三个文件夹分别存储对应类型的launch文件,launch 文件实现与 rclcpp 完全一致。并且也可以使用ros2 launch 文件路径
的方式执行。
2.编辑配置文件
编辑 setup.py 文件,需要在 data_files 属性中,添加相关 launch 文件的路径,修改后的内容如下:

无论该功能包的launch目录下有多少个launch文件,launch相关配置只需设置一次即可。
3.编译
终端中进入当前工作空间,编译功能包:
colcon build --packages-select py01_launch
4.执行
当前工作空间下,启动终端,输入如下指令:
. install/setup.bash
ros2 run py01_launch py00_base.launch.py
该指令运行的是 python 格式的 launch 文件,其他两个launch文件与之同理。最终,会启动两个 turtlesim_node 节点。
建议:对于带有启动文件的功能包,最好在功能包的package.xml
中添加对包ros2launch
的执行时依赖:
<exec_depend>ros2launch</exec_depend>
这有助于确保在构建功能包后ros2 launch
命令可用。它还确保可以识别不同格式的 launch 文件。

B站有完整的ros系列教程视频,可以观看完整内容ros课程ROS2理论与实践
更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站。