迁移接口

在ROS 2中,消息、服务和动作统称为``接口(interfaces)``。

接口定义

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

这些文件可能需要更新,以符合 ROS接口定义。某些原始类型已被移除,而在ROS 1中作为内置类型的 durationtime 类型已被替换为普通消息定义,必须从 builtin_interfaces 包中使用。此外,一些命名约定比在ROS 1中更为严格。在 概念文章 中有更多信息。

构建接口

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

将接口包迁移到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 中:

  • 启用 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``列表,可以将它们删除。