内置消息支持

内置消息支持

MATLAB® 支持大量的 ROS 消息类型。本主题介绍了 MATLAB 如何通过描述消息结构、ROS 消息的限制以及支持的 ROS 数据类型来处理 ROS 消息。有关内置消息类型的完整列表,请参见本文末尾。

有关 ROS 2 消息的信息,请参见“使用基础 ROS 2 消息”。

ROS 消息

在 MATLAB 中,ROS 消息以消息结构或消息对象的形式存储。建议使用消息结构格式,因为在执行初始创建、从 rosbag 文件读取、访问嵌套属性以及通过 ROS 网络执行通信操作时,它们的性能优于对象。此外,在通过 MATLAB Coder™ 生成代码时,仅支持消息结构格式。有关 MATLAB 中 ROS 消息的更多信息,请参见“使用基础 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 消息对象

对于 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

MATLAB 中 ROS 消息的限制

由于 ROS 消息使用独立的属性,因此不能验证某些具有多个值的消息。因为每个值都可以单独设置,所以消息不会将属性作为一个整体进行验证。例如,四元数消息包含 w, x, yz 属性,但消息不会强制执行四元数整体的有效性。在修改属性时,您应确保遵循消息所需的规则。

消息属性也可以具有多种数据类型。MATLAB 使用 ROS 设置的规则来确定这些数据类型是什么。然而,如果要在计算中使用它们,您可能需要将数据类型转换为另一种值。ROS 数据类型不能直接转换为 MATLAB 数据类型。有关 ROS 数据类型及其 MATLAB 等效值的详细列表,请参见 ROS 数据类型转换

注意:

不建议更新任何内置消息。

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

相关主题

  • 使用基础 ROS 消息
  • 与 ROS 发布者和订阅者交换数据
  • 使用专用 ROS 消息

功能解释:

该文档解释了 MATLAB 中对 ROS 消息的内置支持,包括消息结构、对象的处理方式以及在 MATLAB 中使用 ROS 消息时的限制。文档详细介绍了不同 ROS 数据类型与 MATLAB 数据类型之间的转换规则,以及支持的消息包列表。这些信息有助于用户了解如何在 MATLAB 中处理 ROS 消息,并为在实际应用中正确使用这些消息提供指导。

你可能感兴趣的:(ROS,Toolbox,matlab)