Matlab与ROS(1/2)---Message(三)

news2024/12/23 9:52:17

0. 简介

消息是ROS中交换数据的主要容器。主题和服务使用消息在节点之间传输数据。为了标识其数据结构,每条消息都有一个消息类型。例如,来自激光扫描仪的传感器数据通常以sensor_msgs/LaserScan类型的消息发送。每种消息类型标识消息中包含的数据元素。每个消息类型名称都是一个包名称。

MATLAB支持在机器人应用程序中经常遇到的许多ROS消息类型。这个例子展示了在MATLAB中创建、探索和填充ROS消息的一些方法。

1. 查找消息类型

初始化ROS主节点和全局节点

rosinit

Launching ROS Core…
Done in 0.37599 seconds.
Initializing ROS master on http://172.29.217.11:53161.
Initializing global node /matlab_global_node_29455 with NodeURI http://dcc083455glnxa64:37683/ and MasterURI http://localhost:53161.

使用exampleHelperROSCreateSampleNetwork使用另外三个节点以及示例发布者和订阅者填充ROS网络。

网络上有各种节点,它们都有一些主题和关联的发布者和订阅者。

您可以通过调用rostopic list查看可用主题的完整列表。

rostopic list

/pose
/rosout
/scan
/tf

如果您想了解更多关于通过/scan主题发送的数据类型的信息,请使用rostopic info命令来检查它。/scan的消息类型为sensor_msgs/LaserScan

rostopic info /scan

Type: sensor_msgs/LaserScan
Publishers:
/node_3 (http://dcc083455glnxa64:36623/)
Subscribers:
/node_1 (http://dcc083455glnxa64:42445/)
/node_2 (http://dcc083455glnxa64:39859/)

命令输出还告诉您哪些节点正在发布和订阅主题。要了解有关发布者和订阅者的信息,请参见调用和提供ROS服务。

若要了解有关主题消息类型,rosmessage支持消息类型的TAB补全。若要完成消息类型名称,请键入要完成的名称的前几个字符,然后按Tab键。

scandata = rosmessage("sensor_msgs/LaserScan","DataFormat","struct")

scandata = struct with fields:
MessageType: ‘sensor_msgs/LaserScan’
Header: [1x1 struct]
AngleMin: 0
AngleMax: 0
AngleIncrement: 0
TimeIncrement: 0
ScanTime: 0
RangeMin: 0
RangeMax: 0
Ranges: [0x1 single]
Intensities: [0x1 single]

要查看主题和服务可用的所有消息类型的完整列表,请使用rosmsg list

2. 消息结构获取

ROS消息是对象,消息数据存储在属性中。MATLAB具有方便的方法来查找和探索消息的内容。

如果订阅了/pose主题,则可以接收和检查发送的消息。

posesub = rossubscriber("/pose","DataFormat","struct")

posesub =
Subscriber with properties:
TopicName: ‘/pose’
LatestMessage: []
MessageType: ‘geometry_msgs/Twist’
BufferSize: 1
NewMessageFcn: []
DataFormat: ‘struct’

使用receive从订阅者获取数据。一旦接收到新消息,函数将返回该消息并将其存储在posedata变量中(第二个参数是以秒为单位的超时)。

posedata = receive(posesub,10)

posedata = struct with fields:
MessageType: ‘geometry_msgs/Twist’
Linear: [1x1 struct]
Angular: [1x1 struct]

该消息的类型为geometry_msgs/Twist。消息中还有另外两个字段:Linear和Angular。您可以通过直接访问这些消息字段来查看它们的值:

posedata.Linear

ans = struct with fields:
MessageType: ‘geometry_msgs/Vector3’
X: 0.0457
Y: -0.0015
Z: 0.0300

posedata.Angular

ans = struct with fields:
MessageType: ‘geometry_msgs/Vector3’
X: -0.0358
Y: -0.0078
Z: 0.0416

这些消息字段的每个值实际上都是一条消息。它们的消息类型是geometry_msgs/Vector3。geometry_msgs/Twist是由两条geometry_msgs/Vector3消息组成的复合消息。

xpos = posedata.Linear.X

xpos = 0.0457

如果希望快速总结消息中包含的所有数据,请调用rosShowDetails函数。rosShowDetails适用于任何类型的消息,并递归地显示所有消息数据字段。

rosShowDetails(posedata)

ans =

MessageType : geometry_msgs/Twist
Linear
MessageType : geometry_msgs/Vector3
X : 0.04571669482429456
Y : -0.001462435127715878
Z : 0.03002804688888001
Angular
MessageType : geometry_msgs/Vector3
X : -0.03581136613727846
Y : -0.007823871737372501
Z : 0.04157355251890671’

rosShowDetails在调试期间和希望快速查看消息内容时提供帮助。

3. 设置消息信息

ROS 消息是结构。可以直接复制它们以生成新的消息。副本和原始消息都有自己的数据。创建一条类型为geometry_msgs/Twist的消息。

twist = rosmessage("geometry_msgs/Twist","DataFormat","struct")

twist = struct with fields:
MessageType: ‘geometry_msgs/Twist’
Linear: [1x1 struct]
Angular: [1x1 struct]

缺省情况下,此消息的数字字段初始化为0。您可以修改此消息的任何属性。例如Y等于5。

twist.Linear.Y = 5;

查看消息数据以确保您的更改生效

twist.Linear

ans = struct with fields:
MessageType: ‘geometry_msgs/Vector3’
X: 0
Y: 5
Z: 0

一旦用您的数据填充了消息,您就可以将其用于发布者、订阅者和服务。参见“与ROS发布者和订阅者交换数据”和“调用和提供ROS服务”示例。然后就可以通过publish发布我们设置的消息信息了

thermometerNode = ros2node("/thermometer");
tempPub = ros2publisher(thermometerNode,"/twist","sensor_msgs/geometry_msgs/Twist");
tempMsgs(10) = twist;    % Pre-allocate message structure array
for iMeasure = 1:10
    % Copy blank message fields
    tempMsgs(iMeasure) = twist;

    % Record sample message
    tempMsgs(iMeasure).Linear.Y = 20+randn*3;

    % Only calculate the variation once sufficient data observed
    if iMeasure >= 5
        tempMsgs(iMeasure).Linear.X= var([tempMsgs(1:iMeasure).Linear.Y]);
    end

    % Pass the data to subscribers
    send(tempPub,tempMsgs(iMeasure))
end
errorbar([tempMsgs.Linear.Y],[tempMsgs.Linear.X])

 4. 保存和加载消息

您可以保存消息并存储内容以供以后使用。

例如从订阅者获取一条新消息。

posedata = receive(posesub,10)

然后使用MATLAB的保存函数将姿态数据保存到MAT文件中。

save('posedata.mat','posedata')

在将文件加载回工作空间之前,清除posedata变量。

clear posedata

现在可以通过调用load函数加载消息数据。这将从上面将posedata加载到messageData结构中。Posedata是结构的一个数据字段。

messageData = load('posedata.mat')

messageData = struct with fields:
posedata: [1x1 struct]

检查messageData。Posedata来查看消息内容。

messageData.posedata

ans = struct with fields:
MessageType: ‘geometry_msgs/Twist’
Linear: [1x1 struct]
Angular: [1x1 struct]

然后可以删除MAT文件

点击Matlab与ROS(1/2)---Message(三) - 古月居可查看全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1590338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车制造业PMC组态应用最佳实践

01案例及行业介绍 汽车制造工业是我国国民经济的重要支柱产业,汽车制造工厂一般包含冲压、焊装、涂装、总装四大车间。每辆汽车的生产过程被分解成很多加工任务下发给各个车间进行完成。车辆从冲压车间开始到总装车间结束一直进行不同类型的工序加工。 PMC即生产控…

docker 上达梦导入dump文件报错:本地编码:PG GBK,导入女件编码:PGGB18030

解决方案: 第一步进入达梦数据容器内部 docker exec -it fc316f88caff /bin/bash 第二步:在容器中 /opt/dmdbms/bin目录下 执行命令 cd /opt/dmdbms/bin./dimp USERIDSYSDBA/SYSDBA001 FILE/opt/dmdbms/ZFJG_LJ20240407.dmp SCHEMASZFJG_LJUSERIDSYSD…

ChatGPT基础(二) ChatGPT的使用和调优

文章目录 ChatGPT的特性采用关键词进行提问给ChatGPT指定身份提升问答质量的策略1.表述方式上的优化2.用"继续"输出长内容3.营造场景4.由浅入深,提升问题质量5.预设回答框架和风格 ChatGPT的特性 1.能够联系上下文进行回答 ChatGPT回答问题是有上下文的&…

微服务学习 Eureka注册中心

服务调用时候出现问题,当服务者很多时候,比如不同的端口。消费者如何找到服务者的地址?又如何判断服务者是否健康。 Eureka基本原理: 总结:如果有多个服务提供者,消费者该如何选择? 搭建Eureka注册中心: 1.…

django基于python的法院执法案件管理系统

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台,设计的基本思路是: 框架:django/flask 后端&#xff…

【YOLOv9改进[损失函数]】使用MPDIou回归损失函数帮助YOLOv9模型更优秀

本文中,第一部分概述了各种回归损失函数,当然也包括了今天的主角MPDIou。第二部分内容为在YOLOv9中使用MPDIou回归损失函数的方法。 1 回归损失函数(Bounding Box Regression Loss) 边界框回归损失计算的方法包括GIoU、DIoU、CI…

纯css实现switch开关

代码比较简单&#xff0c;有需要直接在下边粘贴使用吧~ html: <div class"switch-box"><input id"switch" type"checkbox"><label></label></div> css&#xff1a; .switch-box {position: relative;height: 25px…

全球媒体发稿:海外发稿数字期刊Digital Journal

全球媒体发稿&#xff1a;海外发稿数字期刊Digital Journal ​官网&#xff1a; digitaljournal.com 数字期刊&#xff0c;加拿大知名门户&#xff0c;月访量超过30万。 是一个全球媒体平台和内容合作伙伴&#xff0c;通过捕捉和报道第一&#xff0c;提升新闻周期中的声…

顶顶通呼叫中心中间件-SIP分机安全(mod_cti基于FreeSWITCH)

介绍 运行在公网的FreeSWITCH服务器&#xff0c;每天都会接收到很多恶意的呼叫请求和注册请求&#xff0c;尝试盗打电话。合理的配置可以防止电话给倒打&#xff0c;但是每天大量的攻击&#xff0c;会让FS产生很多日志&#xff0c;降低FreeSWITCH的处理能力&#xff0c;cti模块…

C语言--2048小游戏

需要用到EasyX图形库 #include <stdio.h> #include <stdlib.h> #include <time.h> #include<assert.h> #include <conio.h> #include <windows.h> #include<graphics.h> #include<string.h> #define ROW 4 /* 行数 */ #defin…

K-means和逻辑回归

逻辑回归 一个事件的几率是该事件发生的概率/该事件不发生的概率&#xff1a;P/&#xff08;1-P&#xff09; 对数几率是&#xff1a;log(P/&#xff08;1-P&#xff09;) **考虑对输入x分类的模型&#xff1a;**log(P/&#xff08;1-P&#xff09;)wx 则 Pexp(wx)/(exp(w*x)…

进口PFA容量瓶高纯透明聚四氟乙烯材质耐强酸碱PFA定容瓶

PFA容量瓶&#xff0c;也叫特氟龙容量瓶&#xff0c;是用于配制标准浓度溶液的实验室器皿&#xff0c;是有着细长颈、梨形肚的耐强腐蚀平底塑料瓶&#xff0c;颈上有标线&#xff0c;可直接配置标准溶液和准确稀释溶液以及制备样品溶液。 因其有着不易碎、材质纯净、化学稳定性…

应急响应-战前反制主机HIDSElkeid蜜罐系统HFish

知识点 战前-反制-平台部署其他更多项目&#xff1a; https://github.com/birdhan/SecurityProduct HIDS&#xff1a;主机入侵检测系统&#xff0c;通常会有一个服务器承担服务端角色&#xff0c;其他主机就是客户端角色&#xff0c;客户端加入到服务端的检测范围里&#xff…

ERA拓展之旅:2024香港Web3峰会聚焦全球Web3发展

2024年香港Web3大型峰会是一次令人难忘的体验。这次峰会吸引了来自世界各地的Web3爱好者和从业者齐聚一堂&#xff0c;共同探讨着Web3的未来发展方向与机遇。在这个热情洋溢的氛围中&#xff0c;展现了对Web3的热情&#xff0c;分享彼此的见解和理念&#xff0c;探讨了未来的行…

Vue3学习05 一些API

Vue3-API 其它 API【shallowRef 与 shallowReactive 】shallowRefshallowReactive总结 【readonly 与 shallowReadonly】readonlyshallowReadonly 【toRaw 与 markRaw】toRawmarkRaw 【customRef】 Vue3新组件【Teleport】【Suspense】【全局API转移到应用对象】【其他】 其它 …

Spark-Scala语言实战(15)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的学习键值对方法中的lookup&#xff0c;cogroup两种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#…

CLion 2024:为Mac与Win打造的卓越跨平台集成开发环境

CLion 2024作为一款跨平台IDE&#xff0c;CLion 2024不仅完美支持Mac和Windows两大操作系统&#xff0c;更在细节之处展现了其出色的跨平台兼容性。无论你是在Mac的优雅界面下工作&#xff0c;还是在Windows的实用环境中编程&#xff0c;CLion 2024都能为你提供一致且流畅的开发…

【STM32嵌入式系统设计与开发】——17STM32Temper(ADC内部温度传感器应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#…

大数据之ClickHouse

大数据之ClickHouse 简介 ClickHouse是一种列式数据库管理系统&#xff0c;专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统&#xff0c;最初由俄罗斯搜索引擎公司Yandex开发&#xff0c;用于满足大规模数据分析和报告的需求。 特点 开源的列式存储数据库…

计算机网络---第九天

以太网交换机的工作原理 以太网定义&#xff1a; 定义&#xff1a;输出标准Ethernet2类型帧的网络 以太网特征&#xff1a; 特征&#xff1a;多路访问&#xff0c;广播式的网络 mac地址: 每台设备都有一个唯一的物理地址&#xff0c;全球唯一 48位长度&#xff0c;16禁止…