迁移接口 [15802]
在ROS 2中,消息、服务和动作统称为``接口(interfaces)``。 [15803]
接口定义 [15804]
消息文件必须以``.msg``结尾,并且必须位于子文件夹``msg``中。服务文件必须以``.srv``结尾,并且必须位于子文件夹``srv``中。动作文件必须以``.action``结尾,并且必须位于子文件夹``action``中。 [15805]
这些文件可能需要更新,以符合 ROS接口定义。某些原始类型已被移除,而在ROS 1中作为内置类型的 duration
和 time
类型已被替换为普通消息定义,必须从 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]
启用 C++17 [15816]
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]