警告

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

使用替换

目标 了解 ROS 2 启动文件中的替换。

辅导水平: 中级

时间 15 分钟

背景介绍

启动文件用于启动节点、服务和执行进程。这组操作可能有参数,参数会影响它们的行为。在描述可重复使用的启动文件时,可以在参数中使用替代变量,以提供更大的灵活性。替换变量仅在执行启动描述时进行评估,可用于获取特定信息,如启动配置、环境变量或评估任意 Python 表达式。

本教程展示了在 ROS 2 启动文件中使用替换的示例。

先决条件

本教程使用 海龟 软件包。本教程还假设您熟悉 创建软件包.

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

使用替换

1 创建和设置软件包

创建一个 build_type 的新软件包 ament_python 人称 启动教程:

ros2 pkg create launch_tutorial --build-type ament_python

在该软件包中,创建一个名为 启动:

mkdir launch_tutorial/launch

最后,确保将更改添加到 setup.py 的文件,以便安装启动文件:

舶来品 os
 水珠 舶来品 水珠
 设置工具 舶来品 设置

包名 = 'launch_tutorial';

设置(
    # 其他参数 ...
    数据文件=[
        # ...其他数据文件
        # 包括所有启动文件。
        (os..加入('分享';, 包名, 'launch';), 水珠(os..加入('launch';, '*launch.[pxy][yma]*')))
    ]
)

2 父启动文件

让我们创建一个启动文件,它将调用另一个启动文件并向其传递参数。为此,请创建一个 example_main.launch.py 文件中的 启动 文件夹中的 启动教程 包装

 launch_ros.substitutions 舶来品 查找软件包共享

 启动 舶来品 启动说明
 launch.actions 舶来品 包含启动描述
 launch.launch_description_sources 舶来品 PythonLaunchDescriptionSource
 launch.substitutions 舶来品 路径连接替换, 文本替换


捍卫 生成发射描述():
    颜色 = {
        'background_r': '200'
    }

    返回 启动说明([
        包含启动描述(
            PythonLaunchDescriptionSource([
                路径连接替换([
                    查找软件包共享('launch_tutorial';),
                    'launch';,
                    'example_substitutions.launch.py';
                ])
            ]),
            启动参数={
                'turtlesim_ns': 'turtlesim2';,
                'use_provided_red': '真实';,
                'new_background_r': 文本替换(文本=字符串(颜色['background_r']))
            }.项目()
        )
    ])

example_main.launch.py 文件中的 查找软件包共享 的路径。 启动教程 一揽子计划该 路径连接替换 替换,然后使用 example_substitutions.launch.py 文件名。

路径连接替换([
    查找软件包共享('launch_tutorial';),
    'launch';,
    'example_substitutions.launch.py';
])

"(《世界人权宣言》) 启动参数 词典 turtlesim_ns使用提供的红色 参数传递给 包含启动描述 行动。行动 文本替换 替换用于定义 new_background_r 参数的值。 背景_r 键中的 颜色 字典

启动参数={
    'turtlesim_ns': 'turtlesim2';,
    'use_provided_red': '真实';,
    'new_background_r': 文本替换(文本=字符串(颜色['background_r']))
}.项目()

3 替换示例启动文件

现在创建一个 example_substitutions.launch.py 文件在同一文件夹中。

 launch_ros.actions 舶来品 节点

 启动 舶来品 启动说明
 launch.actions 舶来品 声明启动参数, 执行进程, 计时器动作
 启动条件 舶来品 如果条件
 launch.substitutions 舶来品 启动配置, PythonExpression


捍卫 生成发射描述():
    turtlesim_ns = 启动配置('turtlesim_ns')
    使用提供的红色 = 启动配置('use_provided_red')
    new_background_r = 启动配置('new_background_r')

    turtlesim_ns_launch_arg = 声明启动参数(
        'turtlesim_ns',
        默认值='turtlesim1';
    )
    使用提供的红色启动参数 = 声明启动参数(
        'use_provided_red',
        默认值='假';
    )
    new_background_r_launch_arg = 声明启动参数(
        'new_background_r',
        默认值='200'
    )

    海龟模拟节点 = 节点(
        包装='turtlesim';,
        命名空间=turtlesim_ns,
        可执行='turtlesim_node',
        名字='sim';
    )
    海龟产卵 = 执行进程(
        cmd=[[
            ROS2服务呼叫';,
            turtlesim_ns,
            '/spawn ';,
            'turtlesim/srv/Spawn';,
            '"{x:2,y:2,θ:0.2}"';
        ]],
        外壳=正确
    )
    更改背景 = 执行进程(
        cmd=[[
            'ros2 param set ';,
            turtlesim_ns,
            '/sim background_r ';,
            '120'
        ]],
        外壳=正确
    )
    改变背景_r_conditioned = 执行进程(
        条件=如果条件(
            PythonExpression([
                new_background_r,
                ' == 200',
                ' and ';,
                使用提供的红色
            ])
        ),
        cmd=[[
            'ros2 param set ';,
            turtlesim_ns,
            '/sim background_r ';,
            new_background_r
        ]],
        外壳=正确
    )

    返回 启动说明([
        turtlesim_ns_launch_arg,
        使用提供的红色启动参数,
        new_background_r_launch_arg,
        海龟模拟节点,
        海龟产卵,
        更改背景,
        计时器动作(
            时间=2.0,
            行动=[改变背景_r_conditioned],
        )
    ])

example_substitutions.launch.py 锉刀 turtlesim_ns, 使用提供的红色new_background_r 定义了启动配置。它们用于在上述变量中存储启动参数值,并将其传递给所需的操作。这些 启动配置 替换可以让我们在发射描述的任何部分获取发射参数的值。

声明启动参数 用于定义启动参数,该参数可从上述启动文件或控制台传递。

turtlesim_ns = 启动配置('turtlesim_ns')
使用提供的红色 = 启动配置('use_provided_red')
new_background_r = 启动配置('new_background_r')

turtlesim_ns_launch_arg = 声明启动参数(
    'turtlesim_ns',
    默认值='turtlesim1';
)
使用提供的红色启动参数 = 声明启动参数(
    'use_provided_red',
    默认值='假';
)
new_background_r_launch_arg = 声明启动参数(
    'new_background_r',
    默认值='200'
)

"(《世界人权宣言》) 海龟模拟节点 节点的 命名空间 设为 turtlesim_ns 启动配置 替换的定义。

海龟模拟节点 = 节点(
    包装='turtlesim';,
    命名空间=turtlesim_ns,
    可执行='turtlesim_node',
    名字='sim';
)

之后 执行进程 行动称为 海龟产卵 与相应的 cmd 参数。该命令调用 turtlesim 节点的 spawn 服务。

此外 启动配置 的值。 turtlesim_ns 启动参数,用于构建命令字符串。

海龟产卵 = 执行进程(
    cmd=[[
        ROS2服务呼叫';,
        turtlesim_ns,
        '/spawn ';,
        'turtlesim/srv/Spawn';,
        '"{x:2,y:2,θ:0.2}"';
    ]],
    外壳=正确
)

同样的方法也用于 更改背景改变背景_r_conditioned 的操作,可更改海龟模拟背景的红色参数。不同之处在于 改变背景_r_conditioned 只有当所提供的 new_background_r 参数等于 200使用提供的红色 启动参数设置为 正确.内部评估 如果条件 是使用 PythonExpression 换人。

更改背景 = 执行进程(
    cmd=[[
        'ros2 param set ';,
        turtlesim_ns,
        '/sim background_r ';,
        '120'
    ]],
    外壳=正确
)
改变背景_r_conditioned = 执行进程(
    条件=如果条件(
        PythonExpression([
            new_background_r,
            ' == 200',
            ' and ';,
            使用提供的红色
        ])
    ),
    cmd=[[
        'ros2 param set ';,
        turtlesim_ns,
        '/sim background_r ';,
        new_background_r
    ]],
    外壳=正确
)

4 构建软件包

转到工作区的根目录,然后构建软件包:

Colcon build

此外,请记住在创建工作区后要为其添加源代码。

启动示例

现在您可以启动 example_main.launch.py 文件,使用 玫瑰2 启动 指挥。

ros2 launch launch_tutorial example_main.launch.py

这将起到以下作用:

  1. 启动一个蓝色背景的海龟模拟节点

  2. 生成第二只乌龟

  3. 将颜色改为紫色

  4. 两秒钟后将颜色更改为粉红色,如果提供的 背景_r 论点是 200使用提供的红色 论点是 正确

修改启动参数

如果要更改所提供的启动参数,可以在 启动参数 词典中的 example_main.launch.py 或启动 example_substitutions.launch.py 首选参数。要查看启动文件的参数,请运行以下命令:

ros2 launch launch_tutorial example_substitutions.launch.py --show-args

这将显示可以给启动文件提供的参数及其默认值。

参数(将参数传递为 '<name>:=<value>'):

    'turtlesim_ns':
        无描述
        (默认值:'turtlesim1')。

    'use_provided_red':
        无描述
        (默认值:'假')。

    'new_background_r':
        无描述
        (默认值:'200')。

现在,您可以向启动文件传递所需的参数,如下所示:

ros2 launch launch_tutorial example_substitutions.launch.py turtlesim_ns:='turtlesim3' use_provided_red:='True' new_background_r:=200

文件

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

摘要

在本教程中,你学习了在启动文件中使用替换。你还了解了创建可重复使用的启动文件的可能性和功能。

您现在可以进一步了解 在启动文件中使用事件处理程序 用于定义一组复杂的规则,这些规则可用于动态修改启动文件。