迁移接口
在 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 软件包,则接口应放在一个仅包含接口的不同软件包中(这也是最佳实践)。
有关更多信息,请参阅 自定义接口教程。
将接口软件包迁移到 ROS 2
Section titled “将接口软件包迁移到 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++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 中对所有消息和服务文件的列举,这些列举可以被删除。