迁移接口
在 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”中所有消息和服务文件的列表,这些文件可以删除。