警告

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

创建启动文件

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

辅导水平: 初学者

时间 10 分钟

背景介绍

在迄今为止的教程中,每运行一个新节点,都要打开新的终端。随着您创建的系统越来越复杂,同时运行的节点越来越多,打开终端和重新输入配置细节就会变得繁琐。

通过启动文件,可以同时启动和配置多个包含 ROS 2 节点的可执行文件。

使用 玫瑰2 启动 命令将一次性启动整个系统,包括所有节点及其配置。

先决条件

本教程使用 rqt_graph 和 turtlesim 打包。

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

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

任务

1 设置

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

mkdir launch

创建一个名为 turtlesim_mimic_launch.py 在终端中输入以下命令:

touch launch/turtlesim_mimic_launch.py

您也可以使用图形用户界面进入系统的文件目录,创建一个新文件。

用你喜欢的文本编辑器打开新文件。

2 编写启动文件

让我们使用 海龟 软件包及其可执行文件。

将完整的代码复制并粘贴到 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 检查启动文件

这些导入语句将一些 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';),
    ]
)

该节点以重置的形式添加了配置细节。

模仿's /input/pose 主题重新映射为 /turtlesim1/turtle1/pose 和它的 /output/cmd_vel 议题 /turtlesim2/turtle1/cmd_vel.这意味着 模仿 将订阅 /turtlesim1/sim的姿势主题,并将其重新发布为 /turtlesim2/sim的速度指令主题进行订阅。换句话说 turtlesim2 将模仿 turtlesim1的动作。

3 ros2 发射

启动 turtlesim_mimic_launch.py进入之前创建的目录,运行以下命令:

cd 启动
ros2 launch turtlesim_mimic_launch.py

备注

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

ros2 启动 <package_name> <launch_file_name>;

您将进一步了解 创建软件包 将在后面的教程中介绍。

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

[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 创建启动文件,并使用 玫瑰2 启动 指挥。

下一步工作

在下一个教程中 记录和播放数据您将了解到另一个有用的工具、 ros2bag.