主要内容

处理基本的ROS 2信息

罗斯消息是用于在ROS 2中交换数据的主容器。发布者和订户使用指定的消息交换数据主题携带节点之间的数据。有关发送和接收消息的更多信息,请参阅与ROS 2发布商和订阅者的交换数据

要识别其数据结构,则每个消息都有一个消息类型。例如,来自激光扫描仪的传感器数据通常以类型信息的形式发送sensor_msgs /提升。每种消息类型都标识了消息中包含的数据元素。每个消息类型名称是包名称,后跟正斜杠/和类型名称的组合:

MATLAB®支金宝app持许多ROS 2消息类型,通常遇到在机器人应用程序中。此示例检查了在MATLAB中创建,检查和填充ROS 2消息的一些方法。

先决条件:从ROS 2开始,连接到ROS 2网络

查找消息类型

使用examplehelperros2createsamplenetwork填充ROS 2网络,使用三个节点和设置示例发布者和订阅者在特定主题上。

examplehelperros2createsamplenetwork

使用ros2主题列表-t找到可用的主题及其关联的消息类型。

ros2话题列表-T.
主题MessageType  _____________________ _________________________________ {'/ parameter_events’}{' rcl_interfaces / ParameterEvent '}

要了解有关主题消息类型的更多信息,请使用ros2message创建相同类型的空消息。ros2message金宝app支持消息类型的选项卡完成。要快速完成消息类型名称,请键入要完成名称的前几个字符,然后按标签钥匙。

scanData = ros2message (“sensor_msgs /提升”)
scanData =结构与字段:标题:[1x1 struct] Angle_min:0 Angl_max:0 Angle_Increment:0 Time_Increment:0 Scan_time:0 Range_min:0 Range_max:0范围:0强度:0

创建的消息,scanData,有许多字段与您通常从激光扫描仪接收的数据相关联。例如,最小感测距离存储在Range_min.特性和最大感知距离range_max财产。

您现在可以删除创建的消息。

清除scanData

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

探索消息结构并获取消息数据

ROS 2消息表示为结构,消息数据存储在字段中。Matlab提供了方便的方法来查找和探索消息内容。

使用ros2味精显示查看消息类型的定义。

ros2味精显示geometry_msgs / twist.
这表示自由空间中的速度分解成线性和角部分。线性的,角的

如果您订阅了/姿势主题,您可以收到并检查已发送的消息。

controlNode = ros2node (“/ base_station”);poseSub = ros2subscriber (controlNode,“/姿势”,“geometry_msgs /扭曲”)
poseSub = ros2subscriber with properties: TopicName: '/pose' LatestMessage: [] MessageType: '几何消息/扭转' NewMessageFcn: [] History: 'keeplast' Depth: 10 Reliability: 'reliable'耐久性:'volatile'

使用收到从订户获取数据。一旦收到新消息,该函数就会返回它并将其存储在其中postata.变量。指定接收消息的超时时间为10秒。

poseData =接收(poseSub, 10)
posedata =结构与字段:线性:[1x1结构]

消息的类型是geometry_msgs / twist.。消息中有其他两个字段:线性。您可以通过直接访问这些消息字段来查看它们的值。

poseData.linear
ans =结构与字段:x: 0.0457 y: -0.0015 z: 0.0300
poseData.angular
ans =结构与字段:x: -0.0358 y: -0.0078 z: 0.0416

您可以看到,这些消息字段的每个值实际上本身就是一条消息。geometry_msgs / twist.合成消息是由两个组成的吗Geometry_msgs / Vector3.消息。

这些嵌套消息的数据访问与访问其他消息中的数据完全相同。进入x组成部分线性使用此命令的消息:

xose = posedata.linear.x.
x波纹= 0.0457.

设置消息数据

您还可以设置消息属性值。创建带有类型的消息geometry_msgs / twist.

twist = ros2message(“geometry_msgs /扭曲”)
捻=结构与字段:线性:[1x1结构]

此消息的数字属性被初始化为0默认情况下。您可以修改此消息的任何属性。设置L.inear.y字段到5。

twist.linear.y = 5;

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

twist.linear
ans =结构与字段:X:0 Y:5 Z:0

填充数据后,您可以使用发布者和订阅者使用它。

复制信息

ROS 2消息是结构。它们可以直接复制以制作新消息。副本和原始邮件每个都有自己的数据。

制作一个新的空信来传达温度数据,然后制作修改副本。

tempmsgblank = ros2message(“sensor_msgs /温度”);tempmsgcopy = tempmsgblank.
tempMsgCopy =结构与字段:[1x1结构]温度:0方差:0

修改温度TEMPMSG的财产,并注意到内容tempmsgblank.维持不变。

tempmsgcopy.temperature = 100.
tempMsgCopy =结构与字段:[1x1结构]温度:100方差:0
tempmsgblank.
tempMsgBlank =结构与字段:[1x1结构]温度:0方差:0

保持空白消息结构可能很有用,并且在发送消息之前只有数据时,只设置特定字段。

thermometerNode = ros2node (“/温度计”);tempPub = ros2publisher (thermometerNode,“/温度”,“sensor_msgs /温度”);tempMsgs (10) = tempMsgBlank;%预分配消息结构数组Imeasure = 1:10%复制空白消息字段tempmsgs(imeasure)= tempmsgblank;%记录样品温度tempmsgs(imeasure).temperature = 20 + Randn * 3;只有在观察到足够的数据一次时才计算变化如果iMeasure >= 5 tempMsgs(iMeasure)。方差= var ([tempMsgs (1: iMeasure)均]);结束%将数据传递给订阅服务器发送(tempPub, tempMsgs (iMeasure))结束错误栏([tempmsgs.temperature],[tempmsgs.variance])

保存和加载消息

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

从订阅服务器获取一条新消息。

poseData =接收(poseSub, 10)
posedata =结构与字段:线性:[1x1结构]

使用介绍将构成数据保存到垫文件函数。

保存(“posefile.mat”,“postata”)

在将文件加载回工作区之前,清除postata.变量。

清除postata.

现在可以通过调用。来加载消息数据负载函数。这个加载postata.从上面进入Messageata.结构。postata.是该结构的数据字段。

messageata = load(“posefile.mat”)
messageData =结构与字段:poseData (1 x1结构):

检查Messageata.Postata.查看消息内容。

Messageata.Postata.
ans =结构与字段:线性:[1x1结构]

您现在可以删除垫文件。

删除(“posefile.mat”)

断开ros2网络

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

exampleHelperROS2ShutDownSampleNetwork

下一个步骤