警告
您正在阅读的 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
mkdir launch_tutorial/launch
医学博士 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
这将起到以下作用:
启动一个蓝色背景的海龟模拟节点
生成第二只乌龟
将颜色改为紫色
两秒钟后将颜色更改为粉红色,如果提供的
背景_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
文件
发射文件 提供了有关可用替代品的详细信息。
摘要
在本教程中,你学习了在启动文件中使用替换。你还了解了创建可重复使用的启动文件的可能性和功能。
您现在可以进一步了解 在启动文件中使用事件处理程序 用于定义一组复杂的规则,这些规则可用于动态修改启动文件。