ROS2(Galactic) Launch系统

发射

创建启动文件

背景

ROS 2中的启动系统负责帮助用户描述其系统的配置,然后按所述执行。系统的配置包括要运行什么程序、在哪里运行它们、传递它们的参数,以及ROS特定的约定,这些约定通过为每个组件提供不同的配置,使得在整个系统中重用组件变得容易。它还负责监测启动的进程的状态,并报告和/或对这些进程的状态变化作出反应。
用Python、XML或YAML编写的启动文件可以启动和停止不同的节点,也可以触发和处理各种事件。有关不同格式的描述,请参见使用Python、XML和YAML for ROS 2启动文件。提供此框架的包是launch_ros,它使用下面的非ros特定的启动框架。
设计文件详细说明了ROS 2发射系统的设计目标(目前并非所有功能都可用)。

任务

  1. 设置
    创建新目录以存储启动文件:

  2. 编写启动文件
    让我们使用turtlesim包及其可执行文件组合一个ROS2启动文件。
    如上所述,这可以是PythonXMLYAML
    将完整的代码复制并粘贴到launch/turlsim_mimic_launch.py文件中:

    • 检查启动文件
      上面启动文件的所有都在启动一个由三个节点组成的系统,所有这些节点都来自于turtlesim包。
      该系统的目标是启动两个海龟窗口,让一只海龟模仿另一只的动作。
      当启动两个turtlesim节点时,它们之间唯一的区别是命名空间。
      唯一的命名空间允许系统启动两个节点,而不会出现节点名或主题名冲突。
      这个系统中的两个乌龟都接收同一主题的命令,并在同一主题上发布它们的姿势。
      通过唯一的命名空间,可以区分针对不同乌龟的消息。
      最后一个节点也来自于turtlesim包,但有一个不同的可执行文件:mimic
      此节点以重新映射的形式添加了配置详细信息。
      mimic/input/pose主题被重新映射到/turtlesim1/turtle1/pose,它的/output/cmd_vel主题被映射到/turtlesim2/turtle1/cmd_vel
      这意味着mimic将订阅/turtlesim1/sim的姿势主题,并将其重新发布给/turtlesim2/sim的速度命令主题以供订阅。
      换句话说,turtlesim2将模仿turtlesim1的动作。

      这些导入语句引入了一些Python启动模块。
      接下来,启动说明本身开始:
      启动说明中的前两个操作将启动两个turtlesim窗口:
      最后一个动作将启动带有重映射的模拟节点:
  3. ros2 launch
    要运行上面创建的启动文件,请进入前面创建的目录并运行以下命令:
    cd launch
    ros2 launch turtlesim_mimic_launch.py

可以直接启动启动文件(如上所述),也可以由包提供。
当它由包提供时,语法为:ros2 launch <package_name> <launch_file_name>
对于带有启动文件的包,最好在包的package.xml中添加对ros2launch包的exec_depend依赖:<exec_depend>ros2launch</exec_depend>
这有助于确保在构建包后ros2 launch命令可用。
它还确保识别所有启动文件格式。
将打开两个turtlesim窗口,您将看到以下[INFO]消息,告诉您启动文件已启动的节点:

要查看运行中的系统,请打开一个新终端并在/turtlesim1/turtle1/cmd_vel主题上运行ros2 topic pub命令,以使第一只乌龟移动:
ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"
你会看到两只乌龟沿着同一条路走。

  1. rqt_graph自省系统
    当系统仍在运行时,打开一个新终端并运行rqt_graph以更好地了解启动文件中节点之间的关系。
    运行命令:
    rqt_graph

    一个隐藏节点(您运行的ros2 topic pub命令)正在将数据发布到左侧的/turtlesim1/turtle1/cmd_vel主题,/turtlesim1/sim节点订阅了该主题。
    图的其余部分显示了前面所述的内容:mimic订阅了/turtlesim1/sim的姿势主题,并发布到/turtlesim2/sim的速度命令主题。

总结

启动文件简化了运行具有许多节点和特定配置细节的复杂系统。
您可以使用PythonXMLYAML创建启动文件,并使用ros2 launch命令运行它们。

将启动文件集成到ROS2包中

背景

在上一个教程中,我们看到了如何编写独立的启动文件。
本教程将展示如何将启动文件添加到现有包中,以及通常使用的约定。

任务

  1. 创建包
    创建包所在的工作区:
    mkdir -p launch_ws/src
    cd launch_ws/src
    ros2 pkg create py_launch_example --build-type ament_python

  2. 创建用于保存启动文件的结构
    按照惯例,包的所有launch文件都存储在包内部的launch目录中。
    确保在上面创建的包的顶层创建一个启动目录。
    对于Python包,包含包的目录应如下所示:
    为了让colcon找到启动文件,我们需要使用setup的data_files参数将启动文件通知Python的安装工具。
    setup.py文件中:

  3. 编写启动文件
    在启动目录中,创建一个名为my_script_launch.py的新启动文件。
    建议使用_launch.py作为Python启动文件的文件后缀,但不是必需的。
    启动文件应定义generate_launch_description()函数,该函数返回启动。
    ros2 launch动词使用的LaunchDescription()

  4. 构建和运行启动文件
    转到工作区的顶层并构建它:
    colcon build
    colcon构建成功并获得工作空间源之后,您应该能够按如下方式运行启动文件:
    ros2 launch py_launch_example my_script_launch.py

文档

启动文档提供了有关launch_ros中也使用的概念的更多详细信息。
启动能力的其他文件/示例即将发布。
在这期间,查看源代码

使用替换

背景

启动文件用于启动节点、服务和执行流程。
这组操作可能有参数,这些参数会影响它们的行为。
可以在参数中使用替换,以在描述可重用启动文件时提供更大的灵活性。
替换是仅在执行启动描述期间计算的变量,可用于获取特定信息,如启动配置、环境变量或计算任意Python表达式。
本教程显示了ROS2启动文件中替换的使用示例。

使用替换

  1. 创建并设置包
    创建一个名为launch_tutorial, build_typeament_python的新包:
    ros2 pkg create launch_tutorial --build-type ament_python
    在该包中,创建一个名为launch的目录:
    mkdir launch_tutorial/launch
    最后,确保添加对setup.py的更改,以便安装启动文件:

  2. 父启动文件
    让我们创建一个启动文件,该文件将调用并向另一启动文件传递参数。
    为此,请创建一个example_main.launch.py文件。

  3. 替换示例启动文件
    现在创建一个example_substitutions.launch.py文件。

  4. 构建包
    转到工作区的根目录,并构建包:
    colcon build

启动示例

现在可以启动example_main.launch.py文件。
ros2 launch launch_tutorial example_main.launch.py
这将执行以下操作:

  • 启动一个蓝色背景的turtlesim节点
  • 生第二只海龟
  • 将颜色更改为紫色
  • 如果提供的background_r参数为200use_provided_red参数为True,则在两秒钟后将颜色更改为粉红色

修改启动参数

如果要更改提供的启动参数,可以在example_main.launch中的launch_arguments字典中更新它们。py或启动example_substitions.launch。py和首选参数。要查看可能提供给启动文件的参数,请运行以下命令:
ros2 launch launch_tutorial example_substitutions.launch.py --show-args

文档

发布文档提供了有关可用替代品的详细信息。

总结

在本教程中,您了解了如何在启动文件中使用替换。
您了解了它们创建可重用启动文件的可能性和能力。
现在,您可以了解有关在启动文件中使用事件处理程序的更多信息,这些文件用于定义一组复杂的规则,这些规则可用于动态修改启动文件。

使用事件处理程序

背景

ROS2中的启动是一个执行和管理用户定义的进程的系统。
它负责监测其启动的进程的状态,并报告这些进程的状态变化并作出反应。
这些更改称为事件,可以通过向启动系统注册事件处理程序来处理。
可以为特定事件注册事件处理程序,并可用于监视进程的状态。
此外,它们还可以用于定义一组复杂的规则,这些规则可以用于动态修改启动文件。
本教程显示了ROS2启动文件中事件处理程序的使用示例。

使用事件处理程序

  • 事件处理程序示例启动文件
    创建一个名为example_event_handlers.launch.py的新文件。

构建包

转到工作区的根目录,并构建包:
colcon build

启动示例

现在可以启动example_event_handlers.launch.py文件。
ros2 launch launch_tutorial example_event_handlers.launch.py turtlesim_ns:='turtlesim3' use_provided_red:='True' new_background_r:=200
这将执行以下操作:

  1. 启动一个蓝色背景的turtlesim节点
  2. 生第二只海龟
  3. 将颜色更改为紫色
  4. 如果提供的background_r参数为200use_provided_red参数为True,则在两秒钟后将颜色更改为粉红色
  5. 关闭turtlesim窗口时关闭启动文件

此外,在以下情况下,它会将消息记录到控制台:

  1. turtlesim节点启动
  2. 执行生成操作
  3. 执行change_background_r操作
  4. 执行change_background_r_conditioned操作
  5. 龟节点退出
  6. 启动过程被要求关闭。

总结

在本教程中,您了解了如何在启动文件中使用事件处理程序。
您了解了它们的语法和用法示例,以定义一组复杂的规则来动态修改启动文件。

管理大型项目

背景

本教程介绍了为大型项目编写启动文件的一些技巧。
重点是如何构造启动文件,以便在不同的情况下尽可能地重用它们。
此外,它还介绍了不同ROS2启动工具的使用示例,如参数、YAML文件、重映射、名称空间、默认参数和RViz配置。

介绍

机器人上的大型应用通常涉及多个互连节点,每个节点可以有许多参数。
在海龟模拟器中模拟多只海龟可以作为一个很好的例子。
乌龟模拟由多个乌龟节点、世界配置、TF广播和收听节点组成。
在所有节点之间,存在大量影响这些节点行为和外观的ROS参数。
ROS 2启动文件允许我们启动所有节点并在一个位置设置相应的参数。
教程结束时,您将构建launch_turtlesim.launch。py启动文件。
这个启动文件将启动不同的节点,负责模拟两个turesim模拟,启动TF广播和侦听器,加载参数,并启动RViz配置。
在本教程中,我们将介绍此启动文件以及使用的所有相关功能。

posted @ 2022-10-30 19:36  杨孝乾  阅读(586)  评论(0编辑  收藏  举报