欢迎光临散文网 会员登陆 & 注册

4.1 启动文件 launch 简介

2023-10-13 10:22 作者:猛狮集训营  | 我要投稿

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节点。

实现步骤如下:

  1. 编写launch文件;

  2. 编辑配置文件;

  3. 编译;

  4. 执行。

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理论与实践

更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站。

4.1 启动文件 launch 简介的评论 (共 条)

分享到微博请遵守国家法律