迁移接口 [15802]

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

接口定义 [15804]

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

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

构建接口 [15807]

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

将接口包迁移到ROS 2 [15809]

在你的 package.xml 中: [15810]

  • 添加 <buildtool_depend>rosidl_default_generators</buildtool_depend>[15811]

  • 添加 <exec_depend>rosidl_default_runtime</exec_depend>[15812]

  • 添加 <member_of_group>rosidl_interface_packages</member_of_group> [15813]

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

在你的 CMakeLists.txt 中: [15815]

set(CMAKE_CXX_STANDARD 17)
  • 添加 find_package(rosidl_default_generators REQUIRED) [15817]

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

这将替代所有消息和服务文件的``add_message_files``和``add_service_files``列表,可以将它们删除。 [15819]