警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

使用 Launch 启动/监控多个节点

ROS 2 发射系统

ROS 2 中的启动系统负责帮助用户描述系统配置,然后按描述执行。系统配置包括运行哪些程序、在哪里运行、传递哪些参数,以及 ROS 特有的约定,通过为每个组件提供不同的配置,可以方便地在整个系统中重复使用组件。它还负责监控已启动进程的状态,并对这些进程的状态变化做出报告和/或反应。

用 Python 编写的启动文件可以启动和停止不同的节点,并触发和执行各种事件。提供该框架的软件包是 发射,它使用非 ROS 专用的 启动 下面的框架。

"(《世界人权宣言》) 设计文件 详细介绍了 ROS 2 发射系统的设计目标(目前尚未提供所有功能)。

编写 ROS 2 启动文件

如果还没有,请务必阅读关于如何创建 ROS 2 软件包的快速入门教程。在 ROS 2 中创建启动文件的一种方法是使用 Python 文件,由 ROS 2 CLI 工具执行、 玫瑰2 启动.我们首先使用 玫瑰2 创建 <pkg-name>; --依赖 [文件] 在我们的工作区中创建一个新的 启动 目录。

Python 软件包

对于 Python 软件包,您的目录应如下所示:

源代码
    my_package/
        发射/
        setup.py
        setup.cfg
        package.xml

为了让 colcon 找到启动文件,我们需要使用 数据文件 的参数 设置.

我们的 setup.py 锉刀

舶来品 os
 水珠 舶来品 水珠
 设置工具 舶来品 设置

包名 = 'my_package';

设置(
    # 其他参数 ...
    数据文件=[
        # ...其他数据文件
        # 包括所有启动文件。这是最重要的一行!
        (os..加入('分享';, 包名), 水珠('launch/*.launch.py';))
    ]
)

C++ 软件包

如果您创建的是 C++ 软件包,我们将只调整 CMakeLists.txt 文件,添加

# 安装启动文件。
安装(目录
  启动
  目的地 分享/${项目名称}/
)

到文件末尾(但在 ament_package()).

编写启动文件

在启动目录下创建一个新的启动文件,文件名为 .launch.py 后缀。例如 my_script.launch.py.

.launch.py 作为启动文件的后缀并无特别要求。另一个常用的选项是 _launch.py用于 初级启动文件教程.如果要更改后缀,请确保调整 glob() 在你的 setup.py 文件。

启动文件应定义 generate_launch_description() 返回一个 launch.LaunchDescription() 将由 玫瑰2 启动 动词

舶来品 启动
舶来品 launch.actions
舶来品 launch.substitutions
舶来品 launch_ros.actions


捍卫 生成发射描述():
    返回 启动.启动说明([
        启动.行动.声明启动参数(
            'node_prefix',
            默认值=[启动.替换.环境变量('USER';), '_'],
            描述='节点名称前缀';),
        发射.行动.节点(
            包装='demo_nodes_cpp', 节点可执行='talker';, 产量='屏幕';,
            节点名=[启动.替换.启动配置('node_prefix'), 'talker';]),
    ])

使用方法

虽然启动文件可以作为独立脚本编写,但在 ROS 中的典型用法是由 ROS 2 工具调用启动文件。

运行后 胶管 构建 并为工作区提供源代码后,就可以按如下方式启动启动文件了:

玫瑰2 启动 我的包 script.launch.py

ROS 2 发射概念示例

中的启动文件 本例 启动了两个节点,其中一个节点带有 管理的生命周期 (生命周期节点")。生命周期节点通过 发射 自动发射 活动 当它们在不同状态之间转换时。然后可以通过启动框架对这些事件采取行动。例如,通过发出其他事件(如请求另一个状态转换,生命周期节点通过 发射 事件处理程序)或触发其他 行动 (例如,启动另一个节点)。

在上述示例中,各种过渡请求被要求 话匣子 生命周期节点,其过渡事件的反应方式包括启动一个 听众 节点。

文件

发射文件 中也使用的概念提供了更多详细信息。 发射.

有关功能的其他文档/示例即将发布。参见 源代码 与此同时