MATLAB® 支持大量的 ROS 消息类型。本主题介绍了 MATLAB 如何通过描述消息结构、ROS 消息的限制以及支持的 ROS 数据类型来处理 ROS 消息。有关内置消息类型的完整列表,请参见本文末尾。
有关 ROS 2 消息的信息,请参见“使用基础 ROS 2 消息”。
在 MATLAB 中,ROS 消息以消息结构或消息对象的形式存储。建议使用消息结构格式,因为在执行初始创建、从 rosbag 文件读取、访问嵌套属性以及通过 ROS 网络执行通信操作时,它们的性能优于对象。此外,在通过 MATLAB Coder™ 生成代码时,仅支持消息结构格式。有关 MATLAB 中 ROS 消息的更多信息,请参见“使用基础 ROS 消息”。
ROS 消息结构以 MATLAB 结构数据类型存储,字段基于消息类型。每种消息类型都有一组特定的字段及其对应的值,这些字段单独存储和访问。您可以专门指向并修改每个字段。每个消息的 MessageType
字段包含消息类型,作为字符向量。您还可以使用 rosShowDetails
函数查看消息的内容。
下面是使用 rosmessage
在 MATLAB 中创建的一个 geometry_msgs/Point
示例。它包含 3 个字段,分别对应 XYZ 坐标中的 3D 点。
pointMsg = rosmessage('geometry_msgs/Point','Dataformat','struct')
pointMsg =
struct with fields:
MessageType: 'geometry_msgs/Point'
X: 0
Y: 0
Z: 0
您可以使用 pointMsg
结构访问和修改每个字段。
pointMsg.Y = 2
pointMsg =
struct with fields:
MessageType: 'geometry_msgs/Point'
X: 0
Y: 2
Z: 0
对于 ROS 消息对象,所有的 handle 对象规则均适用,包括复制、修改和其他性能考虑因素。有关 handle 对象的更多信息,请参见 Handle Object Behavior
。每个 handle 指向特定消息的对象,其中包含与该消息类型相关的信息。消息类型为其包含的数据构建了一个内置结构。
ROS 消息以类似于结构数组的方式存储与该消息类型相关的数据。每种消息类型都有一组特定的属性及其对应的值,这些属性单独存储和访问。您可以专门指向并修改每个属性。每个消息的 MessageType
属性包含消息类型,作为字符向量。您还可以使用 showdetails
函数查看消息的内容。
下面是使用 rosmessage
在 MATLAB 中创建的一个 geometry_msgs/Point
示例。它包含 3 个属性,分别对应 XYZ 坐标中的 3D 点。
pointMsg = rosmessage('geometry_msgs/Point')
pointMsg =
ROS Point message with properties:
MessageType: 'geometry_msgs/Point'
X: 0
Y: 0
Z: 0
Use showdetails to show the contents of the message
您可以使用 pointMsg
handle 访问和修改每个属性。
pointMsg.Y = 2
pointMsg =
ROS Point message with properties:
MessageType: 'geometry_msgs/Point'
X: 0
Y: 2
Z: 0
Use showdetails to show the contents of the message
由于 ROS 消息使用独立的属性,因此不能验证某些具有多个值的消息。因为每个值都可以单独设置,所以消息不会将属性作为一个整体进行验证。例如,四元数消息包含 w
, x
, y
和 z
属性,但消息不会强制执行四元数整体的有效性。在修改属性时,您应确保遵循消息所需的规则。
消息属性也可以具有多种数据类型。MATLAB 使用 ROS 设置的规则来确定这些数据类型是什么。然而,如果要在计算中使用它们,您可能需要将数据类型转换为另一种值。ROS 数据类型不能直接转换为 MATLAB 数据类型。有关 ROS 数据类型及其 MATLAB 等效值的详细列表,请参见 ROS 数据类型转换
。
注意:
不建议更新任何内置消息。
ROS 消息类型为这些属性的值预定了属性和数据类型。这些数据类型必须映射到 MATLAB 数据类型才能在 MATLAB 中使用。下表总结了 ROS 数据类型如何转换为 MATLAB 数据类型。
ROS 数据类型 | 描述 | MATLAB |
---|---|---|
bool | 布尔/无符号 8 位整数 | logical |
int8 | 有符号 8 位整数 | int8 |
uint8 | 无符号 8 位整数 | uint8 |
int16 | 有符号 16 位整数 | int16 |
uint16 | 无符号 16 位整数 | uint16 |
int32 | 有符号 32 位整数 | int32 |
uint32 | 无符号 32 位整数 | uint32 |
int64 | 有符号 64 位整数 | int64 |
uint64 | 无符号 64 位整数 | uint64 |
float32 | 32 位 IEEE® 浮点数 | single |
float64 | 64 位 IEEE 浮点数 | double |
string | ASCII 字符串 (仅限 utf-8) | char |
time | 以有符号 32 位整数表示的秒和纳秒 | Time 对象 (参见 rostime ) |
duration | 以有符号 32 位整数表示的秒和纳秒 | Duration 对象 (参见 rosduration ) |
下面是按字母顺序排列的支持 ROS 包列表。一个包可以包含消息类型、服务类型或动作类型。
要获取支持的消息类型的完整列表,请在 MATLAB 命令窗口中调用 rosmsg list
。
ROS 工具箱支持 Recommended ROS and ROS 2 Distributions
中指定的不同 ROS 和 ROS 2 版本,但您的 ROS 安装可能有不同的消息版本。要覆盖当前的消息目录,可以使用自定义消息支持来生成新的消息定义。
在指定消息类型时,输入的字符向量必须与 rosmsg list
中列出的字符向量完全匹配。要使用自定义消息类型,MATLAB 还提供了自定义消息支持包。有关更多信息,请参见 ROS Custom Message Support
。
支持的消息包列表(省略部分,详见原文)
参见
rosmsg
| rosmessage
| showdetails
相关主题
该文档解释了 MATLAB 中对 ROS 消息的内置支持,包括消息结构、对象的处理方式以及在 MATLAB 中使用 ROS 消息时的限制。文档详细介绍了不同 ROS 数据类型与 MATLAB 数据类型之间的转换规则,以及支持的消息包列表。这些信息有助于用户了解如何在 MATLAB 中处理 ROS 消息,并为在实际应用中正确使用这些消息提供指导。