迁移包

有两种不同类型的包迁移:

  • 将现有包的源代码从ROS 1迁移到ROS 2,意味着源代码的重要部分将保持相同或至少相似。一个示例是 pluginlib,其中源代码在同一个存储库的不同分支中维护,通用补丁可以在必要时在这些分支之间进行移植。

  • 在ROS 2中实现与ROS 1包相同或类似的功能,但假设源代码将会有明显的不同。一个示例是ROS 1中的 roscpp 和ROS 2中的 rclcpp,它们是分开的存储库,没有共享任何代码。

先决条件

在将ROS 1软件包迁移到ROS 2之前,必须在ROS 2中提供所有依赖项。

包格式版本

ROS 2不支持软件包规范的格式1,而仅支持更新的格式版本(2及更高)。因此,如果软件包使用格式1,则必须将``package.xml``文件更新至至少格式2。由于ROS 1支持所有格式,因此在ROS 1软件包中执行此转换是安全的。

从包格式1迁移到2+

格式1和格式2之间的区别仅影响 package.xml 及其依赖关系。REP-0140 定义了这些差异并提供了它们的基本原理。

有关各种标签的更多信息,请参阅 rosdep 文档

<package>

<package> 标签确定要使用的格式,可按以下方式更改它:

<package format="2">

<depend>

这是一个新标签,旨在减少不必要的重复。如果您的格式1包含以下内容:

<build_depend>foo</build_depend>
<run_depend>foo</run_depend>

应该替换为:

<depend>foo</depend>

在格式2中,这相当于:

<build_depend>foo</build_depend>
<build_export_depend>foo</build_export_depend>
<exec_depend>foo</exec_depend>

<run_depend>

不再允许使用此标签。无论在何处找到,都必须替换为:

<run_depend>foo</run_depend>

在格式2中,这相当于这两个新标签:

<build_export_depend>foo</build_export_depend>
<exec_depend>foo</exec_depend>

如果依赖项仅在运行时使用,只需使用 <exec_depend>。如果它仅用于导出以满足其他软件包的构建依赖关系,请使用 <build_export_depend>。如果两者都需要,这可能是更好的选择:

<depend>foo</depend>

<test_depend>

在格式2中,此标签可以满足构建依赖关系,不仅仅是执行测试所需的依赖关系。与格式1不同,<test_depend> 现在可以指代一个同时声明为其他类型依赖项的包。

以前需要 <build_depend> 的某些仅测试依赖项,现在应使用 <test_depend> 表示。例如:

<build_depend>testfoo</build_depend>

变成了:

<test_depend>testfoo</test_depend>

在您的 CMakeLists.txt 中,请确保您的测试依赖项只在条件测试块内引用:

if (BUILD_TESTING)
  find_package(testfoo REQUIRED)
endif()

<doc_depend>

此标签定义了构建文档所需的依赖项:

<doc_depend>doxygen</doc_depend>
<doc_depend>python3-sphinx</doc_depend>

这不会创建二进制包依赖关系,除非它们还使用其他依赖标签声明。

依赖项名称

来自 rosdep 的依赖项名称不应该需要更改,因为它们在ROS 1和ROS 2之间是共享的。

在ROS 2中,一些发布到ROS的软件包可能在ROS 2中具有不同的名称,因此依赖关系可能需要相应更新。

元软件包

ROS 2没有用于元包的特殊包类型。元包仍然可以存在为仅包含运行时依赖项的常规包。从ROS 1迁移元包时,只需在包清单中删除 <metapackage /> 标签。有关元包/变体的更多信息,请参阅 使用变体

许可

在ROS 1中,我们推荐的许可证是 3-Clause BSD 许可证。在ROS 2中,我们推荐的许可证是 Apache 2.0 许可证

对于任何新项目,我们建议无论是ROS 1还是ROS 2都使用Apache 2.0 License。

然而,当将代码从ROS 1迁移到ROS 2时,我们不能简单地更改许可证。必须保留现有许可证以供任何已有贡献使用。

为此,如果正在迁移某个软件包,我们建议保留现有许可证,并继续在现有的OSI许可证下为该软件包做出贡献,我们预计核心元素的许可证将是BSD许可证。

这将使事情清晰易懂。

更改许可证

更改许可证是可能的,但您需要联系所有贡献者并获得许可。对于大多数软件包来说,这可能是一个很大的工作量,并且不值得考虑。如果软件包只有一小部分贡献者,那么这可能是可行的。