Skip to content

添加自定义 ROS 消息#

概述#

在 Autoware 开发过程中,您可能需要定义自己的消息.在添加自定义消息之前,请阅读以下说明.

  1. autoware_msgs 中的消息定义了 Autoware Core 的接口.

    • 如果贡献者希望对 autoware_msgs 进行更改或添加新消息,他们应该首先在 设计类别 下创建一个新的讨论帖子.
  2. 用于组件内部通信(例如 planning)的任何其他次要消息或提案消息应在另一个存储库中定义.

以下是向 autoware_msgs 添加消息包的简单教程.有关一般的 ROS 2 教程,请参阅 创建自定义 msg 和 srv 文件.

如何创建自定义消息#

确保您位于 Autoware 工作区中,然后运行以下命令以创建新包. 例如,让我们创建一个包来定义传感器消息.

  1. 创建包

    cd ./src/core/autoware_msgs
    ros2 pkg create --build-type ament_cmake autoware_sensing_msgs
    
  2. 创建自定义消息

    您应该创建 .msg 文件并将它们放在 msg 目录中.

    注意.msg.srv 文件的首字母必须大写.

    例如,让我们将 .msg 文件设为 GnssInsOrientation.msgGnssInsOrientationStamped.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 的消息.

  3. 编辑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()
    
  4. 编辑 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>.

  5. 构建自定义消息包

    您可以在工作区的根目录中构建包,例如,通过运行以下命令:

    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>.