主要内容

使用基本ROS消息

消息是ROS中交换数据的主要容器。主题和服务使用消息在节点之间传输数据。(请参阅与ROS发布者和订阅者交换数据致电并提供ROS服务有关主题和服务的更多信息)

为了确定其数据结构,每条消息都有一个消息类型例如,来自激光扫描仪的传感器数据通常以类型为的信息发送传感器\u msgs/激光扫描。每种消息类型标识消息中包含的数据元素。每种消息类型名称都是包名称(后跟正斜杠/)和类型名称的组合:

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

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

查找消息类型

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

松香
正在启动ROS核心…在1.8227秒内完成。正在启动ROS主控http://192.168.0.10:60141. 使用NodeURI初始化全局节点/matlab_全局_节点_78612http://dcc420950glnxa64:45161/

使用示例帮助错误创建SampleNetwork用三个额外的节点以及示例发布者和订阅者填充ROS网络。

示例帮助错误创建SampleNetwork

网络上有各种各样的节点,有一些主题和附属的发布者和订阅者。

您可以通过拨打电话查看可用主题的完整列表罗斯托普列表.

罗斯托普列表
/姿势/旋转/扫描/tf

如果您想了解有关通过发送的数据类型的更多信息/扫描主题,使用吻视信息命令来检查它。/扫描消息类型为传感器\u msgs/激光扫描.

罗斯托普信息/扫描
类型:传感器\ msgs/激光扫描发布服务器:*/节点\ 3(http://dcc420950glnxa64:33313/)订阅服务器:*/node_1(http://dcc420950glnxa64:32889/)*/node_2(http://dcc420950glnxa64:34623/)

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

要了解有关主题消息类型的更多信息,请使用罗斯梅瑟作用罗斯梅瑟万博1manbetx支持消息类型的制表符填写。若要填写消息类型名称,请键入要填写的名称的前几个字符,然后按标签钥匙

为了在创建消息或通信时提高效率,请使用结构化格式的消息。

斯堪的纳维亚语(“传感器\u msgs/激光扫描”,“数据格式”,“结构”)
斯堪的纳达=带字段的结构:MessageType:'sensor_msgs/LaserScan'标头:[1x1结构]角度最小值:0角度最大值:0角度增量:0时间增量:0扫描时间:0范围最小值:0范围最大值:0范围:[0x1单一]强度:[0x1单一]

创建的消息斯堪的纳达具有许多与通常从激光扫描仪接收的数据相关的属性。例如,最小传感距离存储在兰明字段,最大感应距离为英寸兰格马克斯.

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

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

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

  • 如果你订阅/摆姿势主题,您可以接收和检查发送的消息。

posesub=rossubscriber(“/姿势”,“数据格式”,“结构”)
posesub=具有以下属性的订阅服务器:TopicName:“/pose”LatestMessage:[]消息类型:“geometry_msgs/Twist”缓冲区大小:1 NewMessageFcn:[]数据格式:“struct”

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

posedata=接收(posesub,10)
波塞达塔=带字段的结构:MessageType:“几何体/扭曲”线性:[1x1结构]角度:[1x1结构]

消息的类型为几何图形\u msgs/Twist。消息中还有两个其他字段:线性的有棱角的。您可以通过直接访问这些消息字段来查看其值:

线性的
ans=带字段的结构:消息类型:'geometry_msgs/Vector3'X:0.0315 Y:0.0406 Z:-0.0373
角形
ans=带字段的结构:消息类型:'geometry_msgs/Vector3'X:0.0413 Y:0.0132 Z:-0.0402

这些消息字段的每个值实际上本身就是一条消息几何图形/矢量3.几何图形\u msgs/Twist是由两条消息组成的复合消息几何图形/矢量3信息。

这些嵌套消息的数据访问与访问其他消息中的数据的工作方式完全相同X组成部分线性的使用此命令的消息:

xpos=posedata.Linear.X
xpos=0.0315

如果要快速汇总消息中包含的所有数据,请调用罗肖细节作用罗肖细节处理任何类型的消息,并递归显示所有消息数据字段。

Rosshow详细信息(posedata)
ans='MessageType:geometry_msgs/Twist Linear MessageType:geometry_msgs/Vector3 X:0.03147236863931789 Y:0.04057919370756193 Z:-0.03730131837064939角度MessageType:geometry_msgs/Vector3 X:0.041337585856139194 Y:0.01323592462254095 Z:-0.040445950005905'

罗肖细节在调试期间以及希望快速浏览消息内容时提供帮助。

设置消息数据

您还可以设置消息字段值。创建类型为的消息几何图形\u msgs/Twist.

twist=rosmessage(“几何图形\u msgs/Twist”,“数据格式”,“结构”)
扭曲=带字段的结构:MessageType:“几何体/扭曲”线性:[1x1结构]角度:[1x1结构]

此消息的数字字段初始化为0默认情况下。您可以修改此邮件的任何属性。设定线性条目等于5..

扭转。线性。Y=5;

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

扭曲,线性
ans=带字段的结构:消息类型:“几何体/矢量3”X:0 Y:5 Z:0

使用数据填充邮件后,您可以将其用于发布者、订阅者和服务。见与ROS发布者和订阅者交换数据致电并提供ROS服务例子。

保存和加载消息

您可以保存邮件并存储内容以供以后使用。

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

posedata=接收(posesub,10)
波塞达塔=带字段的结构:MessageType:“几何体/扭曲”线性:[1x1结构]角度:[1x1结构]

使用MATLAB的拯救作用

拯救(“posedata.mat”,“波塞达塔”)

在将文件加载回工作区之前,请清除波塞达塔变量

清楚的波塞达塔

现在,您可以通过调用负载作用这将加载波塞达塔从上到下消息数据结构波塞达塔是结构的数据字段。

messageData=load(“posedata.mat”)
消息数据=带字段的结构:posedata:[1x1结构]

检查messageData.posedata查看消息内容。

messageData.posedata
ans=带字段的结构:MessageType:“几何体/扭曲”线性:[1x1结构]角度:[1x1结构]

现在可以删除MAT文件。

删除(“posedata.mat”)

消息中的数组

来自ROS的一些消息存储在或包含其他消息的数组中。

在您的工作区中,变量tf包含一个示例消息示例帮助错误创建SampleNetwork脚本创建了变量。)在本例中,它是类型为的消息tf/tf信息用于坐标变换。

tf
tf=带字段的结构:MessageType:'tf/tfMessage'转换:[1x53结构]

tf有两个字段:消息类型包含标准数据数组,以及转变包含对象数组。中存储了53条消息转变,它们都具有相同的结构。

扩大tf在里面转变要查看结构,请执行以下操作:

tf.Transforms
ans=带字段的1×53结构数组:MessageType头ChildFrameId转换

中的每个对象转变有四个属性。可以展开以查看使改变领域转变.

tformFields=tf.Transforms.Transform

注:命令输出返回53个单独的答案,因为每个对象都被计算并返回其值使改变领域此格式并不总是有用的,因此可以使用以下命令将其转换为单元格数组:

cellTransforms={tf.Transforms.Transform}
细胞转化=1×53单元阵列列1到4{1x1结构}{1x1结构}{1x1结构}{1x1结构}列5到8{1x1结构}{1x1结构}{1x1结构}{1x1结构}{1x1结构}列9到12{1x1结构}{1x1结构}{1x1结构}{1x1结构}列13到16{1x1结构{1x1结构}1x1结构}{1x1结构}列17到1x1结构}{1x1 struct}{1x1 struct}列21至24{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}列25至28{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}列29至32{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}{列33至36{1x1 struct}x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}列41到44{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}列45到48{1x1 struct}{1x1 struct}{1x1 struct}{1x1 struct}列49到52{1x1 struct}{1x1 struct}1x1 struct}{1x1 struct}列53}

这会将所有53个对象条目放在一个单元格数组中,使您能够通过索引来访问它们。

此外,可以使用与访问标准MATLAB向量相同的方式访问数组元素:

tf.Transforms(5)
ans=带字段的结构:MessageType:'geometry_msgs/TransformStamped'头:[1x1 struct]ChildFrameId:'/imu link'转换:[1x1 struct]

访问列表53中第五个转换的翻译组件:

转换(5)转换
ans=带字段的结构:消息类型:“几何体/矢量3”X:0.0599 Y:0 Z:-0.0141

关闭ROS网络

从ROS网络中删除示例节点、发布者和订阅者。

示例帮助错误切换下采样网络

关闭ROS主机并删除全局节点。

罗斯赫顿
使用NodeURI关闭全局节点/matlab_全局节点_78612http://dcc420950glnxa64:45161/ 正在关闭上的ROS主机http://192.168.0.10:60141.

下一步