![]() |
RMVL
2.4.0-dev
Robotic Manipulation and Vision Library
|
此模块主要为 轻量发布订阅服务 提供支持,详细使用说明请参考 轻量发布订阅服务 —— LPSS 。
RMVL 消息描述文件(*.msg)用于定义消息的数据结构和字段类型,类似于 ROS 消息定义文件。通过定义消息描述文件,用户可以方便地在 RMVL 中进行数据传输,这在分布式系统、网络通信中尤为重要。 RMVL 提供了一套简洁的消息定义语法,与 ROS/ROS 2 的定义语法大致兼容,同样支持多种数据类型和较为复杂的数据结构。
以下是一些常用的内置消息类型,分为三个主要分组:std、geometry 和 sensor。用户可以根据需要在自定义的 *.msg 文件中引用这些内置消息类型。
std 消息分组
std 消息包含了一些基本的数据类型,包含 Header、string 以及其他基本的数据类型,嵌套使用时无需使用 std/ 前缀,除 Header 和 ColorRGBA 存储多值的消息类型外,其他均为单值存储。
| 类型 | *.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/ 前缀,例如:
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/ 前缀,例如:
RMVL 提供了 rmvl_generate_msg 的 CMake 函数,用于生成消息类型的 C++ 代码文件,用于生成独立模块的消息类型。用户只需在模块的 CMakeLists.txt 文件中调用该函数,并提供消息类型的名称和路径,RMVL 将自动生成相应的 C++ 代码文件。