罗斯消息是用于在ROS 2中交换数据的主容器。发布者和订户使用指定的消息交换数据话题携带节点之间的数据。有关发送和接收消息的更多信息,请参阅与ROS 2发布商和订阅者的交换数据.
要识别其数据结构,则每个消息都有一个消息类型例如,来自激光扫描仪的传感器数据通常以类型为的信息发送传感器\u msgs/激光扫描
。每种消息类型标识消息中包含的数据元素。每种消息类型名称都是包名称(后跟正斜杠/)和类型名称的组合:
MATLAB®支万博1manbetx持许多ROS 2消息类型,通常遇到在机器人应用程序中。此示例检查了在MATLAB中创建,检查和填充ROS 2消息的一些方法。
先决条件:从ROS 2开始,连接到ROS 2网络
用examplehelperros2createsamplenetwork
填充ROS 2网络,使用三个节点和设置示例发布者和订阅者在特定主题上。
examplehelperros2createsamplenetwork
用ros2主题列表-t
找到可用的主题及其关联的消息类型。
ROS2.话题列表-T.
主题消息类型
要了解有关主题消息类型的更多信息,请使用Ros2消息
创建相同类型的空邮件。Ros2消息
万博1manbetx支持消息类型的制表符完成。要快速填写信息类型名称,请键入要填写的名称的前几个字符,然后按标签钥匙。
Scanda=Ros2消息(“传感器\u msgs/激光扫描”)
斯堪的纳达=结构与字段:MessageType:'sensor_msgs / laserscan'标题:[1x1 struct] Angle_min:0 Angle_max:0 Angle_Increment:0 Time_Increment:0 Scan_time:0 Range_min:0 Range_max:0范围:0强度:0
创建的消息,斯堪的纳达
,有许多字段与您通常从激光扫描仪接收的数据相关联。例如,最小感测距离存储在Range_min.
特性和最大感应距离最大射程
所有物
您现在可以删除创建的消息。
清除斯堪的纳达
要查看可用于主题和服务的所有消息类型的完整列表,请使用ros2消息列表
.
ROS 2消息表示为结构,消息数据存储在字段中。Matlab提供了方便的方法来查找和探索消息内容。
用ros2味精秀
查看消息类型的定义。
ROS2.味精显示geometry_msgs / twist.
#这表示自由空间中的速度,分为线性部分和角度部分
如果您订阅了/姿势
主题,您可以收到并检查已发送的消息。
controlNode=ros2node(“/基站”); poseSub=ros2subscriber(控制节点,“/姿势”,“几何图形\u msgs/Twist”)
poseSub=Ros2订阅者,属性:TopicName:“/pose”最新消息:[]消息类型:'geometry_msgs/Twist'新消息FCN:[]历史记录:'keeplast'深度:10可靠性:'reliable'耐久性:'volatile'
用接收
从订户获取数据。一旦收到新消息,该函数就会返回它并将其存储在其中postata.
变量。指定接收消息的超时时间为10秒。
poseData=接收(poseSub,10)
posedata =结构与字段:MessageType:'geometry_msgs / twist'linear:[1x1 struct] Angular:[1x1 struct]
消息的类型为geometry_msgs / twist.
.消息中有其他两个字段:线性
和棱角
. 您可以通过直接访问这些消息字段来查看它们的值。
线性的
ans=结构与字段:消息类型:'geometry_msgs/Vector3'x:0.0315 y:0.0406 z:-0.0373
角形
ans=结构与字段:MessageType:'Geometry_msgs / Vector3'X:0.0413 Y:0.0132 Z:-0.0402
您可以看到,这些消息字段的每个值实际上本身就是一条消息。geometry_msgs / twist.
是由两条消息组成的复合消息Geometry_msgs / Vector3.
信息。
这些嵌套消息的数据访问与访问其他消息中的数据完全相同。进入x
组成部分线性
使用此命令的消息:
xose = posedata.linear.x.
x波纹= 0.0315.
您还可以设置消息属性值。创建类型为的消息geometry_msgs / twist.
.
twist = ros2message(“几何图形\u msgs/Twist”)
扭曲=结构与字段:MessageType:'geometry_msgs / twist'linear:[1x1 struct] Angular:[1x1 struct]
此消息的数值初始化为0
默认情况下。您可以修改此消息的任何属性。设置L.非线性
字段到5。
twist.linear.y = 5;
您可以查看消息数据以确保更改生效。
扭曲、线性
ans=结构与字段:消息类型:“几何体/矢量3”x:0 y:5 z:0
填充数据后,您可以使用发布者和订阅者使用它。
ROS 2消息是结构。它们可以直接复制以制作新消息。副本和原始邮件每个都有自己的数据。
制作一个新的空信来传达温度数据,然后制作修改副本。
tempmsgblank = ros2message(“传感器\u msgs/温度”);tempmsgcopy = tempmsgblank.
tempMsgCopy=结构与字段:消息类型:“传感器/温度”标题:[1x1结构]温度:0差异:0
修改温度
TEMPMSG的财产,并注意到内容tempmsgblank.
保持不变。
tempmsgcopy.temperature = 100.
tempMsgCopy=结构与字段:消息类型:“传感器/温度”标题:[1x1结构]温度:100变化:0
tempmsgblank.
tempMsgBlank=结构与字段:消息类型:“传感器/温度”标题:[1x1结构]温度:0差异:0
保持空白消息结构可能很有用,并且在发送消息之前只有数据时,只设置特定字段。
温度计节点=ros2node(“/温度计”);tempPub=ros2publisher(温度计节点,“/温度”,“传感器\u msgs/温度”); tempMsgs(10)=tempMsgBlank;%预分配消息结构数组对于Imeasure = 1:10%复制空白消息字段tempmsgs(imeasure)= tempmsgblank;%记录样品温度tempmsgs(imeasure).temperature = 20 + Randn * 3;只有在观察到足够的数据一次时才计算变化如果iMeasure>=5 tempMsgs(iMeasure).variance=var([tempMsgs(1:iMeasure).temperature]);终止%将数据传递给订阅者发送(tempPub、tempMsgs(iMeasure))终止错误栏([tempmsgs.temperature],[tempmsgs.variance])
您可以保存邮件并存储内容以供以后使用。
从订阅服务器获取新消息。
poseData=接收(poseSub,10)
posedata =结构与字段:MessageType:'geometry_msgs / twist'linear:[1x1 struct] Angular:[1x1 struct]
使用介绍将构成数据保存到垫文件节省
作用
拯救(“posefile.mat”,“postata”)
在将文件加载回工作区之前,请清除postata.
变量
清除postata.
现在,您可以通过调用负载
函数。这将加载postata.
从上到下Messageata.
结构postata.
是结构的数据字段。
messageata = load(“posefile.mat”)
消息数据=结构与字段:poseData:[1x1结构]
检查Messageata.Postata.
查看消息内容。
Messageata.Postata.
ans=结构与字段:MessageType:'geometry_msgs / twist'linear:[1x1 struct] Angular:[1x1 struct]
您现在可以删除垫文件。
删除(“posefile.mat”)
从ROS 2网络中删除示例节点、发布服务器和订阅服务器。
示例帮助错误2关闭采样网络