迁移接口

在 ROS 2 中,消息、服务和操作统称为“接口”。

接口定义

消息文件必须以“.msg”结尾,并且必须位于子文件夹“msg”中。

服务文件必须以“.srv”结尾,并且必须位于子文件夹“srv”中。

操作文件必须以“.action”结尾,并且必须位于子文件夹“action”中。

这些文件可能需要更新以符合“ROS 接口定义 <http://design.ros2.org/articles/legacy_interface_definition.html>”__。 一些原始类型已被删除,ROS 1 中的内置类型“duration”和“time”已被替换为普通消息定义,并且必须从“builtin_interfaces <https://github.com/ros2/rcl_interfaces/tree/rolling/builtin_interfaces>”包中使用。 此外,一些命名约定比 ROS 1 更严格。 在 :doc:“概念文章 <../../Concepts/Basic/About-Interfaces>”中有更多信息。

构建接口

ROS 2 中构建接口的方式与 ROS 1 有很大不同。 只能从包含“CMakeLists.txt”的包中构建接口。 如果您正在开发纯 Python 包,则应将接口放在仅包含接口的不同包中(无论如何,这是最佳做法)。 有关详细信息,请参阅:doc:自定义接口教程

将接口包迁移到 ROS 2

在您的 package.xml 中:

  • 添加 <buildtool_depend>rosidl_default_generators</buildtool_depend>

  • 添加 <exec_depend>rosidl_default_runtime</exec_depend>

  • 添加 <member_of_group>rosidl_interface_packages</member_of_group>

  • 对于每个依赖消息包,添加 <depend>message_package</depend>

在您的 CMakeLists.txt 中:

  • Enable C++17

set(CMAKE_CXX_STANDARD 17)
  • 添加“find_package(rosidl_default_generators REQUIRED)”

  • 对于每个依赖消息包,添加“find_package(message_package REQUIRED)”并将 CMake 函数调用“generate_messages”替换为“rosidl_generate_interfaces”。

这将替换“add_message_files”和“add_service_files”中所有消息和服务文件的列表,这些文件可以删除。