Skip to content

迁移接口

在 ROS 2 中,消息(messages)、服务(services)和动作(actions)统称为「接口」(interfaces)。

消息文件必须以 .msg 结尾,并且必须位于 msg 子文件夹中。 服务文件必须以 .srv 结尾,并且必须位于 srv 子文件夹中。 动作文件必须以 .action 结尾,并且必须位于 action 子文件夹中。

这些文件可能需要更新以符合 ROS 接口定义。 一些基本类型已被移除,ROS 1 中的内建类型 duration 和 time 已被替换为普通的消息定义,必须从 builtin_interfaces 软件包中使用。 此外,一些命名约定比 ROS 1 更严格。 有关更多信息,请参阅 接口概念文章。

ROS 2 中接口的构建方式与 ROS 1 有很大不同。 接口只能从包含 CMakeLists.txt 的软件包中构建。 如果你正在开发纯 Python 软件包,则接口应放在一个仅包含接口的不同软件包中(这也是最佳实践)。 有关更多信息,请参阅 自定义接口教程。

在你的 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 中:

  • 启用 C++20
set(CMAKE_CXX_STANDARD 20)
  • 添加 find_package(rosidl_default_generators REQUIRED)
  • 对于每个依赖的消息软件包,添加 find_package(message_package REQUIRED),并将 CMake 函数调用 generate_messages 替换为 rosidl_generate_interfaces。

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