主要内容

使用基本ROS 2消息

罗斯消息是用于在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网络的连接

从ROS 2网络中删除示例节点、发布服务器和订阅服务器。

示例帮助错误2关闭采样网络

下一步