迁移包 [15918]
目录 []
有两种不同类型的包迁移: [15919]
将现有包的源代码从ROS 1迁移到ROS 2,意味着源代码的重要部分将保持相同或至少相似。一个示例是 pluginlib,其中源代码在同一个存储库的不同分支中维护,通用补丁可以在必要时在这些分支之间进行移植。 [15920]
在ROS 2中实现与ROS 1包相同或类似的功能,但假设源代码将会有明显的不同。一个示例是ROS 1中的 roscpp 和ROS 2中的 rclcpp,它们是分开的存储库,没有共享任何代码。 [15921]
包格式版本 [15923]
ROS 2不支持软件包规范的格式1,而仅支持更新的格式版本(2及更高)。因此,如果软件包使用格式1,则必须将``package.xml``文件更新至至少格式2。由于ROS 1支持所有格式,因此在ROS 1软件包中执行此转换是安全的。 [15924]
从包格式1迁移到2+ [15925]
格式1和格式2之间的区别仅影响 package.xml 及其依赖关系。REP-0140 定义了这些差异并提供了它们的基本原理。 [15926]
有关各种标签的更多信息,请参阅 rosdep 文档。 [15927]
<depend> [15930]
这是一个新标签,旨在减少不必要的重复。如果您的格式1包含以下内容: [15931]
<build_depend>foo</build_depend>
<run_depend>foo</run_depend>
应该替换为: [15932]
<depend>foo</depend>
在格式2中,这相当于: [15933]
<build_depend>foo</build_depend>
<build_export_depend>foo</build_export_depend>
<exec_depend>foo</exec_depend>
<run_depend> [15934]
不再允许使用此标签。无论在何处找到,都必须替换为: [15935]
<run_depend>foo</run_depend>
在格式2中,这相当于这两个新标签: [15936]
<build_export_depend>foo</build_export_depend>
<exec_depend>foo</exec_depend>
如果依赖项仅在运行时使用,只需使用 <exec_depend>
。如果它仅用于导出以满足其他软件包的构建依赖关系,请使用 <build_export_depend>
。如果两者都需要,这可能是更好的选择: [15937]
<depend>foo</depend>
<test_depend> [15938]
在格式2中,此标签可以满足构建依赖关系,不仅仅是执行测试所需的依赖关系。与格式1不同,<test_depend>
现在可以指代一个同时声明为其他类型依赖项的包。 [15939]
以前需要 <build_depend>
的某些仅测试依赖项,现在应使用 <test_depend>
表示。例如: [15940]
<build_depend>testfoo</build_depend>
变成了: [15941]
<test_depend>testfoo</test_depend>
在您的 CMakeLists.txt 中,请确保您的测试依赖项只在条件测试块内引用: [15942]
if (BUILD_TESTING)
find_package(testfoo REQUIRED)
endif()
依赖项名称 [15946]
来自 rosdep 的依赖项名称不应该需要更改,因为它们在ROS 1和ROS 2之间是共享的。 [15947]
在ROS 2中,一些发布到ROS的软件包可能在ROS 2中具有不同的名称,因此依赖关系可能需要相应更新。 [15948]
元软件包 [15949]
ROS 2没有用于元包的特殊包类型。元包仍然可以存在为仅包含运行时依赖项的常规包。从ROS 1迁移元包时,只需在包清单中删除 <metapackage />
标签。有关元包/变体的更多信息,请参阅 使用变体。 [15950]
许可 [15951]
在ROS 1中,我们推荐的许可证是 3-Clause BSD 许可证。在ROS 2中,我们推荐的许可证是 Apache 2.0 许可证。 [15952]
对于任何新项目,我们建议无论是ROS 1还是ROS 2都使用Apache 2.0 License。 [15953]
然而,当将代码从ROS 1迁移到ROS 2时,我们不能简单地更改许可证。必须保留现有许可证以供任何已有贡献使用。 [15954]
为此,如果正在迁移某个软件包,我们建议保留现有许可证,并继续在现有的OSI许可证下为该软件包做出贡献,我们预计核心元素的许可证将是BSD许可证。 [15955]
这将使事情清晰易懂。 [15956]