内置消息支持

news/2025/1/16 0:57:44/

内置消息支持

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 点。

matlab">pointMsg = rosmessage('geometry_msgs/Point','Dataformat','struct')
pointMsg = struct with fields:MessageType: 'geometry_msgs/Point'X: 0Y: 0Z: 0

您可以使用 pointMsg 结构访问和修改每个字段。

matlab">pointMsg.Y = 2
pointMsg = struct with fields:MessageType: 'geometry_msgs/Point'X: 0Y: 2Z: 0

ROS 消息对象

对于 ROS 消息对象,所有的 handle 对象规则均适用,包括复制、修改和其他性能考虑因素。有关 handle 对象的更多信息,请参见 Handle Object Behavior。每个 handle 指向特定消息的对象,其中包含与该消息类型相关的信息。消息类型为其包含的数据构建了一个内置结构。

ROS 消息以类似于结构数组的方式存储与该消息类型相关的数据。每种消息类型都有一组特定的属性及其对应的值,这些属性单独存储和访问。您可以专门指向并修改每个属性。每个消息的 MessageType 属性包含消息类型,作为字符向量。您还可以使用 showdetails 函数查看消息的内容。

下面是使用 rosmessage 在 MATLAB 中创建的一个 geometry_msgs/Point 示例。它包含 3 个属性,分别对应 XYZ 坐标中的 3D 点。

matlab">pointMsg = rosmessage('geometry_msgs/Point')
pointMsg = ROS Point message with properties:MessageType: 'geometry_msgs/Point'X: 0Y: 0Z: 0Use showdetails to show the contents of the message

您可以使用 pointMsg handle 访问和修改每个属性。

matlab">pointMsg.Y = 2
pointMsg = ROS Point message with properties:MessageType: 'geometry_msgs/Point'X: 0Y: 2Z: 0Use 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 消息,并为在实际应用中正确使用这些消息提供指导。


http://www.ppmy.cn/news/1520658.html

相关文章

uniapp布局

一. 如何让元素吸顶? position: sticky;top: 0; 注意:暂时仅支持作为list-view、sticky-section的子节点, sticky-header不支持css样式!当一个容器视图设置多个sticky-header时,后一个sticky-header会停靠在前一个sticky-header的末尾处。

chrome 插件开发入门

1. 介绍 Chrome 插件可用于在谷歌浏览器上控制当前页面的一些操作,可自主控制网页,提升效率。 平常我们可在谷歌应用商店中下载谷歌插件来增强浏览器功能,作为开发者,我们也可以自己开发一个浏览器插件来配合我们的日常学习工作…

2-78 基于matlab-GUI的DTW算法语音识别

基于matlab-GUI的DTW算法语音识别,具有16页分析报告。能识别0-9数字,正确率90。预处理过程包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。经过预处理的语音数据进行特征参数提取。在训练阶段,将特征参数处理之后,每个…

算法题汇总

算法汇总 环形链表 https://leetcode.cn/problems/linked-list-cycle/ 反转链表 https://leetcode.cn/problems/reverse-linked-list/28 环形链表 II https://leetcode.cn/problems/linked-list-cycle-ii/ 快乐数 https://leetcode.cn/problems/happy-number/ 反转链表 II …

掌握SQL的“删除艺术”:如何使用DROP TABLE命令

掌握SQL的“删除艺术”:如何使用DROP TABLE命令 在数据库管理中,有时候我们需要彻底删除一个表,这可能是为了重新设计数据库结构,或者因为某些表不再需要。SQL 提供了 DROP TABLE 语句来实现这一功能。本文将详细介绍 DROP TABLE…

react 中three.js 模型渲染

npm install three import * as THREE from "three"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; const mountRef useRef(null); useEffect(() > {// 创建渲染器 const renderer new THREE.WebGLRenderer(); const wi…

“解决MySQL容器启动后无法编辑文件的问题:实用指南“

前段时间拉取了个MySQL的容器节点,但是拉起之后发现居然编辑不了MySQL的配置文件,这是我的启动命令 docker run -itd -p 3310:3306 -e MYSQL_ROOT_PASSWORD12345678 --name slave2 f5f171121fa3 bash 下面总结下解决方法: 编辑docker file…

MES基于C#开发计划管理组件集成WinCC中使用

MES系统通常都会与SCADA系统集成使用,尤其具备中控管理需求的工厂,集控SCADA需要集成MES系统的计划工单数据实现工单数据、工艺配方数据、SN数据、打码数据等下发,执行状态、关键参数反馈等上传。本文介绍在WinCC画面集成基于C#开发的计划管理…