内置消息支持

内置消息支持

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
float3232 位 IEEE® 浮点数single
float6464 位 IEEE 浮点数double
stringASCII 字符串 (仅限 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 消息,并为在实际应用中正确使用这些消息提供指导。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值