添加自定义 ROS 消息#
概述#
在 Autoware 开发过程中,您可能需要定义自己的消息.在添加自定义消息之前,请阅读以下说明.
-
autoware_msgs 中的消息定义了
Autoware Core的接口.- 如果贡献者希望对
autoware_msgs进行更改或添加新消息,他们应该首先在 设计类别 下创建一个新的讨论帖子.
- 如果贡献者希望对
-
用于组件内部通信(例如 planning)的任何其他次要消息或提案消息应在另一个存储库中定义.
- tier4_autoware_msgs 就是一个例子.
以下是向 autoware_msgs 添加消息包的简单教程.有关一般的 ROS 2 教程,请参阅 创建自定义 msg 和 srv 文件.
如何创建自定义消息#
确保您位于 Autoware 工作区中,然后运行以下命令以创建新包. 例如,让我们创建一个包来定义传感器消息.
-
创建包
cd ./src/core/autoware_msgs ros2 pkg create --build-type ament_cmake autoware_sensing_msgs -
创建自定义消息
您应该创建
.msg文件并将它们放在msg目录中.注意:
.msg和.srv文件的首字母必须大写.例如,让我们将
.msg文件设为GnssInsOrientation.msg和GnssInsOrientationStamped.msg来定义 GNSS/INS 方向消息:mkdir msg cd msg touch GnssInsOrientation.msg touch GnssInsOrientationStamped.msg使用编辑器编辑
GnssInsOrientation.msg为以下内容:geometry_msgs/Quaternion orientation float32 rmse_rotation_x float32 rmse_rotation_y float32 rmse_rotation_z在这种情况下,自定义消息使用来自另一个消息包
geometry_msgs/Quaternion的消息.使用编辑器编辑
GnssInsOrientationStamped.msg为以下内容:std_msgs/Header header GnssInsOrientation orientation在这种情况下,自定义消息使用来自另一个消息包
std_msgs/Header的消息. -
编辑CMakeLists.txt
为了在
C++或Python语言中使用此自定义消息,我们需要将以下行添加到CMakeList.txt:rosidl_generate_interfaces(${PROJECT_NAME} "msg/GnssInsOrientation.msg" "msg/GnssInsOrientationStamped.msg" DEPENDENCIES geometry_msgs std_msgs ADD_LINTER_TESTS ):speech_balloon:
ament_cmake_auto工具非常有用,在 Autoware 中使用得更广泛,因此我们建议使用ament_cmake_auto而不是ament_cmake.我们需要替换
find_package(ament_cmake REQUIRED) ament_package()跟
find_package(ament_cmake_auto REQUIRED) ament_auto_package() -
编辑 package.xml
我们需要在
package.xml中声明相关的依赖项.对于上面的例子,我们需要添加以下内容:<buildtool_depend>rosidl_default_generators</buildtool_depend> <exec_depend>rosidl_default_runtime</exec_depend> <depend>geometry_msgs</depend> <depend>std_msgs</depend> <member_of_group>rosidl_interface_packages</member_of_group>我们需要将
package.xml文件中的<buildtool_depend>ament_cmake</buildtool_depend>替换为<buildtool_depend>ament_cmake_auto</buildtool_depend>. -
构建自定义消息包
您可以在工作区的根目录中构建包,例如,通过运行以下命令:
colcon build --packages-select autoware_sensing_msgs现在,Autoware 中的其他程序包将可发现
GnssInsOrientationStamped消息.
如何在 Autoware 中使用自定义消息#
您可以按照以下步骤在 Autoware 中使用自定义消息:
- 在
package.xml中添加依赖项.- 例如,
<depend>autoware_sensing_msgs</depend>.
- 例如,
- 在代码中包含相关消息的
.hpp文件.- 例如,
#include <autoware_sensing_msgs/msg/gnss_ins_orientation_stamped.hpp>.
- 例如,