RMVL  2.4.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
消息模块使用教程

上一篇教程:参数模块使用教程
下一篇教程:扩展模块使用教程


此模块主要为 轻量发布订阅服务 提供支持,详细使用说明请参考 轻量发布订阅服务 —— LPSS

1 概述

RMVL 消息描述文件(*.msg)用于定义消息的数据结构和字段类型,类似于 ROS 消息定义文件。通过定义消息描述文件,用户可以方便地在 RMVL 中进行数据传输,这在分布式系统、网络通信中尤为重要。 RMVL 提供了一套简洁的消息定义语法,与 ROS/ROS 2 的定义语法大致兼容,同样支持多种数据类型和较为复杂的数据结构。

2 内置消息类型

以下是一些常用的内置消息类型,分为三个主要分组:stdgeometrysensor。用户可以根据需要在自定义的 *.msg 文件中引用这些内置消息类型。

  • std 消息分组

    std 消息包含了一些基本的数据类型,包含 Headerstring 以及其他基本的数据类型,嵌套使用时无需使用 std/ 前缀,除 HeaderColorRGBA 存储多值的消息类型外,其他均为单值存储。

    类型*.msg 定义描述
    Bool
    bool data
    表示布尔值数据
    Char
    char data
    表示字符数据
    ColorRGBA
    float32 r
    float32 g
    float32 b
    float32 a
    表示颜色的红、绿、蓝和透明度分量
    Float32
    float32 data
    表示 32 位单精度浮点数数据,采用 float 存储
    Float64
    float64 data
    表示 64 位双精度浮点数数据,采用 double 存储
    Header
    uint32 seq
    float64 stamp
    string frame_id
    包含序列号、时间戳和坐标系 ID 的标准消息头
    Int8
    int8 data
    表示 8 位有符号整数数据
    Int16
    int16 data
    表示 16 位有符号整数数据
    Int32
    int32 data
    表示 32 位有符号整数数据
    Int64
    int64 data
    表示 64 位有符号整数数据
    String
    string data
    表示字符串数据,底层采用 std::string 存储
    UInt8
    uint8 data
    表示 8 位无符号整数数据
    UInt16
    uint16 data
    表示 16 位无符号整数数据
    UInt32
    uint32 data
    表示 32 位无符号整数数据
    UInt64
    uint64 data
    表示 64 位无符号整数数据
  • geometry 消息分组

    geometry 消息用于表示空间中的几何概念,如点、向量、姿态和变换,嵌套使用时需要使用 geometry/ 前缀。

    类型*.msg 定义描述
    Point
    float64 x
    float64 y
    float64 z
    表示空间中的一个点,采用双精度浮点数存储
    Point32
    float32 x
    float32 y
    float32 z
    表示空间中的一个点,采用单精度浮点数存储
    Polygon
    geometry/Point32[] points
    表示空间中的一个多边形,由多个点组成,采用单精度浮点数存储
    Pose
    geometry/Point position
    geometry/Quaternion orientation
    表示空间中的位姿(位置 + 姿态)
    Quaternion
    float64 x
    float64 y
    float64 z
    float64 w
    表示空间中的旋转姿态(四元数)
    Transform
    geometry/Vector3 translation
    geometry/Quaternion rotation
    表示两个坐标系之间的变换关系(平移 + 旋转)
    Twist
    geometry/Vector3 linear
    geometry/Vector3 angular
    表示物体的线速度和角速度
    Vector3
    float64 x
    float64 y
    float64 z
    表示空间中的一个 3D 向量
    Wrench
    geometry/Vector3 force
    geometry/Vector3 torque
    表示作用在物体上的力和力矩

    在自定义 *.msg 文件中使用 geometry 分组的消息时,需要手动指定分组前缀,即要手动添加 geometry/ 前缀,例如:

    # 自定义消息类型 PoseX.msg
    Header header
    geometry/Pose pose
    string pose_name
  • sensor 消息分组

    sensor 消息用于表示来自传感器的原始数据,例如惯性测量单元(IMU)和相机,嵌套使用时需要使用 sensor/ 前缀。

    类型*.msg 定义描述
    CameraInfo
    Header header
    uint32 height
    uint32 width
    float64[5] D
    float64[9] K
    表示相机的校准和配置参数
    Image
    Header header
    uint32 height
    uint32 width
    string encoding
    uint8 is_bigendian
    uint32 step
    uint8[] data
    表示图像数据
    Imu
    Header header
    geometry/Quaternion orientation
    float64[9] orientation_covariance
    geometry/Vector3 angular_velocity
    float64[9] angular_velocity_covariance
    geometry/Vector3 linear_acceleration
    float64[9] linear_acceleration_covariance
    表示来自 IMU 的数据,包括姿态、角速度和线加速度
    JointState
    Header header
    string[] name
    float64[] position
    float64[] velocity
    float64[] effort
    表示单自由度关节的状态信息,例如机械臂、机器人的关节角度、速度和力矩
    MultiDOFJointState
    Header header
    string[] joint_names
    geometry/Transform[] transforms
    geometry/Twist[] twist
    geometry/Wrench[] wrench
    表示多自由度关节的状态信息,例如包含球形关节、飞行器的6自由度基座关节的位姿、速度和力矩

    geometry 分组的消息类似,在自定义 *.msg 文件中使用 sensor 分组的消息时,需要手动指定分组前缀,即要手动添加 sensor/ 前缀,例如:

    # 自定义消息类型 SCARA.msg
    Header header
    string robot_name
    uint8[4] ip
    sensor/JointState joint_state

3 自动代码生成

RMVL 提供了 rmvl_generate_msg 的 CMake 函数,用于生成消息类型的 C++ 代码文件,用于生成独立模块的消息类型。用户只需在模块的 CMakeLists.txt 文件中调用该函数,并提供消息类型的名称和路径,RMVL 将自动生成相应的 C++ 代码文件。

# 根据 msg/test.msg 文件生成消息类型代码
# 将生成 rmvlmsg/test.hpp 头文件
rmvl_generate_msg(test)
# 根据 msg/dir/test.msg 文件生成消息类型代码
# 将生成 rmvlmsg/dir/test.hpp 头文件
rmvl_generate_msg(dir/test)
# 根据 msg/test2.msg 文件生成消息类型代码,并指定其绑定的子模块 sub
# 将生成 rmvlmsg/test2.hpp 头文件
rmvl_generate_msg(
  test2
  MODULE sub
)
# 根据 msg/dir/test2.msg 文件生成消息类型代码,并指定其绑定的子模块 sub
# 将生成 rmvlmsg/dir/test2.hpp 头文件
rmvl_generate_msg(
  dir/test2
  MODULE sub
)