创建launch文件 [待校准@7562]

Goal目标: Create创建一个launch文件以运行复杂的ROS 2系统。 [待校准@7563]

教程级别: 初学者 [Alyssa@7088]

时间: 10分钟 [Alyssa@7452]

先决条件

本教程使用 rqt_graph and turtlesim 包。 [待校准@7564]

您还需要使用您喜欢的文本编辑器。 [待校准@7565]

和往常一样,不要忘记在 every new terminal you open 中源文件ROS 2。 [待校准@7566]

任务

1设置 [待校准@7567]

创建一个新目录来存储您的launch文件: [待校准@7568]

mkdir launch

创建launch文件 turtlesim_mimic_launch.py 输入以下命令在终端: [待校准@7569]

touch launch/turtlesim_mimic_launch.py

您也可以使用GUI进入系统的文件目录,并以这种方式创建一个新文件。 [待校准@7570]

在首选文本编辑器中打开新文件。 [待校准@7571]

2写launch文件 [待校准@7572]

让我们使用 turtlesim 包及其可执行文件来整理一个ROS 2launch文件。 [待校准@7573]

将完整的代码复制并粘贴到 turtlesim_mimic_launch.py 文件中: [待校准@7574]

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

2.1检查launch档案 [待校准@7575]

这些导入语句引入了一些Python launch 模块。 [待校准@7576]

from launch import LaunchDescription
from launch_ros.actions import Node

接下来,launch的描述开始于: [待校准@7577]

def generate_launch_description():
   return LaunchDescription([

   ])

LaunchDescription 中是一个由三个节点组成的系统,全部来自 turtlesim 包。该系统的目标是让两只乌龟的窗口launch,让一只乌龟模仿另一只乌龟的运动。 [待校准@7578]

前两个动作在launch描述launch两个turtlesim windows: [待校准@7579]

Node(
    package='turtlesim',
    namespace='turtlesim1',
    executable='turtlesim_node',
    name='sim'
),
Node(
    package='turtlesim',
    namespace='turtlesim2',
    executable='turtlesim_node',
    name='sim'
),

请注意,两个节点之间的唯一区别是它们的命名空间值。唯一命名空间允许系统启动两个模拟器,没有节点名称或话题名称冲突。 [待校准@7580]

这个系统中的两只海龟接收对同一话题的命令,并在同一话题上发布它们的姿势。如果没有唯一的命名空间,就无法区分针对一只乌龟或另一只乌龟的消息。 [待校准@7581]

最后一个节点也来自 turtlesim 包,但有一个不同的可执行文件: mimic[待校准@7582]

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

此节点以重映射的形式添加了配置详细信息。 [待校准@7583]

mimic's /input/pose topic is remapped to /turtlesim1/turtle1/pose and it's /output/cmd_vel topic to /turtlesim2/turtle1/cmd_vel. This means mimic will subscribe to /turtlesim1/sim's pose topic and republish it for /turtlesim2/sim's velocity command topic to subscribe to. In other words, turtlesim2 will mimic turtlesim1's运动。 [待校准@7584]

3 ros2launch [待校准@7585]

转launch turtlesim_mimic_launch.py ,进入目录更早运行以下命令: [待校准@7586]

cd launch
ros2 launch turtlesim_mimic_launch.py

注解

可以launchalaunch文件直接 (我们),或提供包。由包提供时,语法为: [待校准@7587]

ros2 launch <package_name> <launch_file_name>

你将在稍后的教程中了解更多关于 creating packages 的知识。 [待校准@7588]

注解

用包带launch文件,最好添加 exec_depend 依赖 ros2launch 包的 package.xml : [待校准@7589]

<exec_depend>ros2launch</exec_depend>

这有助于确保在构建包后 ros2 launch 命令可用。它也确保所有的 launch file formats 都被识别。 [待校准@7590]

两个turtlesim窗口将打开,您将看到以下 [INFO] 消息,告诉您您的launch文件已启动的节点: [待校准@7591]

[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]

要查看系统的动作,打开一个新的终端,在 /turtlesim1/turtle1/cmd_vel 话题上运行 ros2 topic pub 命令,让第一只乌龟移动: [待校准@7592]

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

你会看到两只海龟沿着同一条路走。 [待校准@7593]

../../_images/mimic.png

4使用rqt_graph自检系统 [待校准@7594]

当系统仍在运行时,打开一个新的终端并运行 rqt_graph ,以更好地了解launch文件中节点之间的关系。 [待校准@7595]

运行命令: [待校准@7596]

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

一个隐藏节点 (您运行的 ros2 topic pub 命令) 正在将数据发布到左侧的 /turtlesim1/turtle1/cmd_vel 话题, /turtlesim1/sim 节点已订阅该话题。图表的其余部分显示了之前描述的内容: mimic 订阅了 /turtlesim1/sim 的姿势话题,并出版了 /turtlesim2/sim 的速度命令话题。 [待校准@7597]

总结

[需手动修复的语法]Launch文件简化了运行具有许多节点和特定配置细节的复杂系统。您可以使用Python创建launch文件,并使用 ros2 launch 命令运行它们。 [待校准@7598]

注解

有关ROS 2launch文件的更多教程,请参见 main launch file tutorial page[待校准@7560]

注解

您也可以使用XML和YAML创建launch文件。您可以在以下文档中看到这些不同的ROS 2launch格式的比较: doc:'/操作指南/Launch文件不同格式'。 [待校准@7599]