> 文章列表 > 【ROS2指南-8】入门Launch启动脚本

【ROS2指南-8】入门Launch启动脚本

【ROS2指南-8】入门Launch启动脚本

目标:创建launch文件以运行复杂的 ROS 2 系统

教程级别:初学者

时间: 10分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 设置

    • 2 编写启动文件

    • 3 ros2发射

    • 4 使用 rqt_graph 反省系统

  • 概括

  • 下一步

背景

在到目前为止的教程中,您一直在为您运行的每个新节点打开新终端。随着越来越多的节点同时运行,创建更复杂的系统,打开终端和重新输入配置细节变得乏味。

launch文件允许您同时启动和配置多个包含 ROS 2 节点的可执行文件。

使用该命令运行单个launch文件将立即启动整个系统——所有节点及其配置。

ros2 launch

先决条件

本教程使用rqt_graph 和 turtlesim包。

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

任务

1 设置

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

mkdir launch

通过在终端中输入以下命令来创建一个名为 launch 的文件:

touch launch/turtlesim_mimic_launch.py

您还可以使用 GUI 进入系统的文件目录,并以此方式创建一个新文件。

在您喜欢的文本编辑器中打开新文件。

2 编写启动文件

turtlesim让我们使用包及其可执行文件将 ROS 2 启动文件放在一起。

将完整代码复制并粘贴到turtlesim_mimic_launch.py文件中:

from launch import LaunchDescription
from launch_ros.actions import Nodedef generate_launch_description():return LaunchDescription([Node(package='turtlesim',node_namespace='turtlesim1',node_executable='turtlesim_node',node_name='sim'),Node(package='turtlesim',node_namespace='turtlesim2',node_executable='turtlesim_node',node_name='sim'),Node(package='turtlesim',node_executable='mimic',node_name='mimic',remappings=[('/input/pose', '/turtlesim1/turtle1/pose'),('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),])])

2.1 检查launch文件

这些 import 语句引入了一些 Python launch模块。

from launch import LaunchDescription
from launch_ros.actions import Node

接下来,启动描述本身开始:

def generate_launch_description():return LaunchDescription([])

内部LaunchDescription是一个由三个节点组成的系统,全部来自turtlesim包。该系统的目标是启动两个 turtlesim 窗口,让一只乌龟模仿另一只乌龟的动作。

启动描述中的前两个操作启动两个 turtlesim 窗口:

Node(package='turtlesim',node_namespace='turtlesim1',node_executable='turtlesim_node',node_name='sim'
),
Node(package='turtlesim',node_namespace='turtlesim2',node_executable='turtlesim_node',node_name='sim'
),

请注意,这两个节点之间的唯一区别是它们的名称空间值。独特的命名空间允许系统在没有节点名称或主题名称冲突的情况下启动两个模拟器。

该系统中的两只海龟都接收关于同一主题的命令,并在同一主题上发布它们的姿势。如果没有唯一的命名空间,就无法区分发送给一只乌龟或另一只乌龟的消息。

最后一个节点也来自turtlesim包,但是不同的可执行文件:mimic.

Node(package='turtlesim',node_executable='mimic',node_name='mimic',remappings=[('/input/pose', '/turtlesim1/turtle1/pose'),('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),]
)

此节点以重新映射的形式添加了配置详细信息。

mimic/input/pose主题被重新映射到/turtlesim1/turtle1/pose,并且它的/output/cmd_vel主题是/turtlesim2/turtle1/cmd_vel。这意味着mimic将订阅/turtlesim1/simpose 主题,并将其重新发布为/turtlesim2/sim要订阅的 velocity command 主题。换句话说,turtlesim2会模仿turtlesim1的动作。

3 ros2发射

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

cd launch
ros2 launch turtlesim_mimic_launch.py

PS:可以直接启动一个launch文件(就像我们上面所做的那样),或者由一个包提供。当它由包提供时,语法是:

ros2 launch <package_name> <launch_file_name>

您将在后面的教程中了解有关创建包的更多信息。

将打开两个 turtlesim 窗口,您将看到以下[INFO]消息,告诉您启动文件启动了哪些节点:

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [turtlesim_node-1]: process started with pid [11714]
[INFO] [turtlesim_node-2]: process started with pid [11715]
[INFO] [mimic-3]: process started with pid [11716]

要查看系统的运行情况,请打开一个新终端并运行有关主题的命令以使第一只乌龟移动:

ros2 topic pub/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}}"

你会看到两只海龟都走同一条路。

4 使用 rqt_graph 反省系统

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

运行命令:

rqt_graph

隐藏节点(您运行的命令)正在向节点订阅的左侧主题发布数据。图表的其余部分显示了之前描述的内容:订阅了 的pose话题,并发布了速度命令话题。

ros2 topic pub /turtlesim1/turtle1/cmd_vel /turtlesim1/simmimic/turtlesim1/sim/turtlesim2/sim

概括

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

下一步

在下一个教程“记录和回放数据”中,您将了解另一个有用的工具ros2bag