> 文章列表 > 【ROS2指南-19】使用Launch启动/监控多个节点

【ROS2指南-19】使用Launch启动/监控多个节点

【ROS2指南-19】使用Launch启动/监控多个节点

ROS 2 启动系统

ROS 2 中的启动系统负责帮助用户描述他们系统的配置,然后按照描述执行。系统的配置包括要运行的程序、运行它们的位置、传递给它们的参数以及 ROS 特定约定,这些约定通过为它们提供不同的配置,使得在整个系统中重用组件变得容易。它还负责监视已启动流程的状态,并报告和/或响应这些流程状态的变化。

用 Python 编写的启动文件可以启动和停止不同的节点以及触发和处理各种事件。提供此框架的包是launch_ros,它使用下面的非 ROS 特定launch框架。

设计文档详细说明了 ROS 2 的启动系统的设计目标(目前并非所有功能都可用)。

编写 ROS 2 启动文件

如果您还没有,请务必阅读有关如何创建 ROS 2 程序包的快速入门教程。在 ROS 2 中创建启动文件的一种方法是使用 Python 文件,该文件由 ROS 2 CLI 工具执行,. 我们首先在我们的工作区中使用创建一个 ROS 2 包并创建一个新目录。ros2 launchros2 pkg create <pkg-name> --dependencies [deps]launch

Python 包

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

src/my_package/launch/setup.pysetup.cfgpackage.xml

为了让 colcon 找到启动文件,我们需要data_files使用setup.

在我们的setup.py文件中:

import os
from glob import glob
from setuptools import setuppackage_name = 'my_package'setup(# Other parameters ...data_files=[# ... Other data files# Include all launch files. This is the most important line here!(os.path.join('share', package_name), glob('launch/*.launch.py'))]
)

C++ 包

如果您正在创建 C++ 包,我们只会CMakeLists.txt通过添加以下内容来调整文件:

# Install launch files.
install(DIRECTORYlaunchDESTINATION share/${PROJECT_NAME}/
)

到文件末尾(但在 ament_package() 之前)。

编写启动文件

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

.launch.py不是特别要求作为启动文件的文件后缀。另一个流行的选项是_launch.py,用于初学者级别的启动文件教程。如果您确实更改了后缀,请确保相应地调整文件glob()中的参数setup.py

您的启动文件应该定义generate_launch_description()which returns alaunch.LaunchDescription()以供动词使用。ros2 launch

import launch
import launch.actions
import launch.substitutions
import launch_ros.actionsdef generate_launch_description():return launch.LaunchDescription([launch.actions.DeclareLaunchArgument('node_prefix',default_value=[launch.substitutions.EnvironmentVariable('USER'), '_'],description='Prefix for node names'),launch_ros.actions.Node(package='demo_nodes_cpp', node_executable='talker', output='screen',node_name=[launch.substitutions.LaunchConfiguration('node_prefix'), 'talker']),])

用法

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

运行并采购您的工作区后,您应该能够按如下方式启动启动文件:colcon build

ros2 launch my_package script.launch.py

ROS 2 启动概念示例

此示例中的启动文件启动两个节点,其中一个是具有托管生命周期的节点(“生命周期节点”)。通过启动的生命周期节点在状态之间转换时launch_ros自动发出事件。然后可以通过启动框架对事件采取行动。例如,通过发出其他事件(例如请求另一个状态转换,通过其启动的生命周期节点launch_ros自动具有事件处理程序)或触发其他操作(例如启动另一个节点)。

在上述示例中,向生命周期节点请求各种转换请求talker,并且其转换事件通过例如listener在生命周期谈话者达到适当状态时启动节点来响应。

文档

启动文档提供了有关launch_ros.

其他文档/功能示例即将推出。同时查看三源代码。