ROS 2 中的 .launch.xml
文件用于定义一组节点、服务、参数等的启动配置。这些文件遵循 XML 语法,并使用 ROS 2 的特定标签和属性来定义启动时的行为和配置。随着 ROS 2 的发展,ROS 2 引入了 ros2 launch
系统,它使用 Python 脚本(通常是 .launch.py
文件)作为主要的启动文件格式,但 XML 格式仍然被支持,特别是在一些旧的项目或为了与 ROS 1 兼容的场合。
然而,值得注意的是,在 ROS 2 Foxy 及以后的版本中,XML 格式的启动文件(.launch.xml
)已经不再是官方推荐的方式。ROS 2 社区推荐使用 Python 编写的 .launch.py
文件,因为它们提供了更好的灵活性和可维护性。不过,为了回答您的问题,我将简要介绍 .launch.xml
文件的基本语法。
基本结构
一个 .launch.xml
文件的基本结构如下:
<launch>
<!-- 可以在这里添加节点、组、参数等 -->
</launch>
节点(Node)
在 .launch.xml
文件中,可以使用 <node>
标签来启动节点。例如:
<launch>
<node pkg="my_package" exec="my_node" name="my_node_name" output="screen"/>
</launch>
pkg
: 包含可执行文件的包名。exec
: 可执行文件的名称(不包括.py
扩展名,如果是 Python 节点的话)。name
: 在 ROS 图中使用的节点名称。output
: 指定节点输出的处理方式,如screen
(在终端中显示)或log
(仅记录到日志文件)。
组(Group)
组用于将多个节点组织在一起,并可以为它们设置共同的命名空间。例如:
<launch>
<group ns="my_namespace">
<node pkg="my_package" exec="node1" name="node1_name"/>
<node pkg="my_package" exec="node2" name="node2_name"/>
</group>
</launch>
参数(Parameter)
在 .launch.xml
文件中设置参数通常不是直接支持的,因为 ROS 2 的参数系统更加动态和灵活。然而,你可以通过启动参数文件或使用 Python 脚本中的 launch
API 来设置参数。但在纯 XML 文件中,这通常需要额外的机制或脚本支持。
注意
由于 .launch.xml
文件的限制和 ROS 2 对 .launch.py
文件的推广,建议在新项目或需要更好灵活性和控制的项目中使用 Python 脚本作为启动文件。.launch.py
文件提供了更丰富的 API 和更直观的语法来定义复杂的启动配置。
如果你正在维护一个使用 .launch.xml
文件的旧项目,并且没有迁移到 .launch.py
的需求,那么上述信息应该足够你理解其基本用法。但是,对于新项目或需要改进的项目,考虑迁移到 .launch.py
是一个值得考虑的选择。
<remap>
标签
在 ROS 2 的 .launch.xml
文件中,<remap>
标签用于重映射话题(topic)、服务(service)或动作(action)的名称。这在你需要改变节点发布或订阅的话题名称,或者调用的服务名称时非常有用,尤其是在不同的上下文或环境中重用节点时。
<remap>
标签通常与 <node>
标签一起使用,以指定哪些话题、服务或动作名称应该被重映射。
话题重映射
对于话题重映射,你可以在 <node>
标签内部使用多个 <remap>
标签,每个标签指定一个原始话题名称和一个新的目标话题名称。
<launch>
<node pkg="my_package" exec="my_node" name="my_node_name">
<remap from="original_topic" to="new_topic"/>
</node>
</launch>
在这个例子中,my_node
节点原本可能订阅或发布名为 original_topic
的话题,但通过使用 <remap>
标签,它被重映射为订阅或发布名为 new_topic
的话题。
服务和动作重映射
虽然服务和动作的重映射在 ROS 2 的 .launch.xml
文件中不如话题重映射那样直接支持(因为服务和动作通常涉及更复杂的客户端-服务器交互),但你可以通过类似的方式在 Python 的 .launch.py
文件中实现它们,或者使用其他机制(如环境变量或节点参数)来间接实现。
然而,对于 ROS 2 的 .launch.xml
文件,主要关注的是话题重映射。如果你需要重映射服务或动作,并且你的项目依赖于 .launch.xml
文件,你可能需要查找特定于你的 ROS 2 版本和设置的解决方案,或者考虑迁移到 .launch.py
文件,因为 Python 提供了更多的灵活性和控制。
注意
- 并不是所有的 ROS 2 节点都支持话题重映射。这取决于节点是如何编写的,特别是它是否使用了 ROS 2 的话题别名(alias)功能。
- 在 ROS 2 Foxy 及以后的版本中,
.launch.xml
文件的使用已经大大减少,取而代之的是.launch.py
文件。如果你正在使用较新的 ROS 2 版本,并且希望利用最新的功能和最佳实践,那么考虑迁移到 Python 启动文件可能是一个好主意。 - 如果你正在使用 ROS 1 并熟悉其
.launch
文件,请注意 ROS 2 的.launch.xml
文件在语法和功能上可能有所不同。ROS 2 引入了许多新的概念和工具,旨在提高系统的灵活性和可扩展性。