您正在阅读的是开发版本的文档。有关最新发布的版本,请访问 Jazzy.

创建启动文件

目标 创建启动文件,运行复杂的 ROS 2 系统。

辅导水平: 中级

时间 10 分钟

先决条件

本教程使用 rqt_graph 和 turtlesim 打包。

您还需要使用自己喜欢的文本编辑器。

与往常一样,别忘了在 您打开的每个新终端.

背景介绍

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

用 Python、XML 或 YAML 编写的启动文件可以启动和停止不同的节点,并触发和执行各种事件。参见 使用 Python、XML 和 YAML 编写 ROS 2 启动文件 了解不同格式的说明。提供这一框架的软件包是 发射,它使用非 ROS 专用的 启动 下面的框架。

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

任务

1 设置

创建一个新目录来存储启动文件:

mkdir launch

2 编写启动文件

让我们使用 海龟 包及其可执行文件。如上所述,这可以是 Python、XML 或 YAML 格式。

将完整的代码复制并粘贴到 launch/turtlesim_mimic_launch.py 锉刀

 启动 舶来品 启动说明
 launch_ros.actions 舶来品 节点

捍卫 生成发射描述():
    返回 启动说明([
        节点(
            包装='turtlesim';,
            命名空间='turtlesim1';,
            可执行='turtlesim_node',
            名字='sim';
        ),
        节点(
            包装='turtlesim';,
            命名空间='turtlesim2';,
            可执行='turtlesim_node',
            名字='sim';
        ),
        节点(
            包装='turtlesim';,
            可执行='模仿';,
            名字='模仿';,
            重置=[
                ('/input/pose';, '/turtlesim1/turtle1/pose';),
                ('/output/cmd_vel';, '/turtlesim2/turtle1/cmd_vel';),
            ]
        )
    ])

2.1 检查启动文件

上述所有启动文件都是在启动一个由三个节点组成的系统,它们都来自 海龟 软件包。该系统的目标是启动两个海龟模拟窗口,让一只海龟模仿另一只海龟的动作。

在启动两个 turtlesim 节点时,它们之间唯一的区别就是它们的命名空间值。独特的命名空间允许系统启动两个节点,而不会出现节点名称或主题名称冲突。该系统中的两只海龟通过相同的主题接收指令,并通过相同的主题发布它们的姿势。有了独特的命名空间,为不同海龟发送的信息就可以区分开来。

最后一个节点也来自 海龟 软件包,但可执行文件不同: 模仿.该节点以重置的形式添加了配置细节。 模仿's /input/pose 主题重新映射为 /turtlesim1/turtle1/pose 和它的 /output/cmd_vel 议题 /turtlesim2/turtle1/cmd_vel.这意味着 模仿 将订阅 /turtlesim1/sim的姿势主题,并将其重新发布为 /turtlesim2/sim的速度指令主题进行订阅。换句话说 turtlesim2 将模仿 turtlesim1的动作。

这些导入语句将一些 Python 启动 模块。

 启动 舶来品 启动说明
 launch_ros.actions 舶来品 节点

接下来,开始进行发射说明:

捍卫 生成发射描述():
   返回 启动说明([

   ])

启动说明中的前两个操作将启动两个 turtlesim 窗口:

节点(
    包装='turtlesim';,
    命名空间='turtlesim1';,
    可执行='turtlesim_node',
    名字='sim';
),
节点(
    包装='turtlesim';,
    命名空间='turtlesim2';,
    可执行='turtlesim_node',
    名字='sim';
),

最后一个操作是启动带有重映射的模仿节点:

节点(
    包装='turtlesim';,
    可执行='模仿';,
    名字='模仿';,
    重置=[
      ('/input/pose';, '/turtlesim1/turtle1/pose';),
      ('/output/cmd_vel';, '/turtlesim2/turtle1/cmd_vel';),
    ]
)

3 ros2 发射

要运行上文创建的启动文件,请进入之前创建的目录并运行以下命令:

cd 启动
ros2 launch turtlesim_mimic_launch.py

备注

可以直接启动启动文件(如上所述),也可以由软件包提供启动文件。当启动文件由软件包提供时,语法为

ros2 启动 <package_name> <launch_file_name>;

您在 创建软件包.

备注

对于有启动文件的软件包,最好添加一个 执行依赖 依赖于 ros2launch 软件包的 package.xml:

执行依赖关系;ros2launch</exec_depend>;

这有助于确保 玫瑰2 启动 命令在构建软件包后可用。它还能确保所有 启动文件格式 得到承认。

将打开两个图标窗口,您将看到以下内容 [信息] 消息,告诉你启动文件启动了哪些节点:

[INFO] [启动]:默认日志冗余度设置为 INFO
[INFO] [turtlesim_node-1]: 进程以 pid [11714] 启动
[INFO] [turtlesim_node-2]: 进程以 pid [11715] 启动
[INFO] [mimic-3]:进程以 pid [11716] 启动

要查看系统运行情况,请打开一个新终端并运行 玫瑰2 主题 酒吧 上的 /turtlesim1/turtle1/cmd_vel 话题,让第一只乌龟动起来:

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}}";

你会看到两只乌龟沿着相同的路径前进。

././././_images/mimic.png

4 使用 rqt_graph 对系统进行自省

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

运行该命令:

rqt_graph
././././_images/mimic_graph.png

一个隐藏节点(即 玫瑰2 主题 酒吧 命令)将数据发布到 /turtlesim1/turtle1/cmd_vel 左边的主题 /turtlesim1/sim 节点被订阅。图表的其余部分显示了前面所描述的内容: 模仿 已订阅 /turtlesim1/sim的姿势主题,并发布到 /turtlesim2/sim的速度命令主题。

摘要

启动文件可简化运行具有许多节点和特定配置细节的复杂系统。您可以使用 Python、XML 或 YAML 创建启动文件,并使用 玫瑰2 启动 指挥。