主要内容

阅读者

从ROSBAG阅读消息

描述

例子

味精= ReadMessages(从所有消息中返回数据袋式选择或者罗斯巴格对象.消息以消息单元格数组的形式返回。得到一个袋式选择对象,使用rosbag

例子

味精= ReadMessages(指定的行中的消息返回数据.行的范围是[1,bag.nummessages]。

例子

味精= ReadMessages(___“DataFormat”格式)使用先前输入参数的任何一组将数据返回为消息对象的单元格或单元格数组数组。指定格式as“结构”或者“对象”

使用结构可以比使用消息对象快得多,并且可以直接读取自定义消息数据,而无需使用Rosgenmsg.

请注意

在未来的释放中,ROS工具箱将使用消息结构而不是ROS消息的对象。

现在使用消息结构,设置“DataFormat”名称 - 值参数“结构”.有关更多信息,请参见ROS消息结构

例子

全部收缩

通过主题和时间读ROSBAG和过滤。

bagselect = rosbag('ex_multiple_topics.bag');BAGSELECT2 = SELECT(BAGSELECT,“时间”...[bagselect.startTime bagselect.starttime + 1],'话题''/ odom');

将所有邮件作为单元格数组返回。

allMsgs = readMessages (bagselect2);

以单元格数组的形式返回前10条消息。

firstmsgs = ReadMessages(BAGSELECT2,1:10);

加载ROSBAG。

袋= rosbag ('ros_turtlesim.bag');

选择特定主题。

bSel =选择(包,'话题''/ turtle1 / pose');

将消息作为结构。指定DataFormat读取消息时的名称-值对。检查返回的结构单元格数组中的第一个结构。

msgStructs = readMessages (bSel,'dataformat''struct');msgStructs {1}
ans =结构与字段:MessageType:'turtlesim / pose'x:5.5016 y:6.3965 theta:4.5377线性透视:1 Angularvelocity:0

提取xy点从信息和绘制机器人的轨迹。

Cellfun.提取所有XY来自结构的字段。这些字段代表xy机器人在ROSBAG录制期间的位置。

xPoints = cellfun(@(m) double(m.X),msgStructs);yPoints = cellfun(@(m) double(m.Y),msgStructs);情节(xPoints yPoints)

图中包含一个轴对象。axis对象包含一个类型为line的对象。

加载一个rosbag日志文件,并根据所选的条件解析出特定的消息。

创建一个罗斯巴格对象的所有消息在rosbag日志文件。

bagMsgs = rosbagreader (“ros_multi_topics.bag”
'/mathworks/devel/bat/Bdoc21b/build/matlab/toolbox/robotics/robotexamples/ros/data/bags/ros_multi_topics. txt '。包' StartTime: 201.3400 EndTime: 321.3400 NumMessages: 36963 availabletopic: [4x3 table] AvailableFrames: {0x1 cell} MessageList: [36963x4 table]

根据消息的时间戳和主题选择消息的子集。

bagMsgs2 =选择(bagMsgs,...时间= [bagMsgs。StartTime bagMsgs。开始时间+ 1),...主题='/ odom'
BAGMSGS2 = ROSBAGREADER1x3表]可用框架:{0x1 Cell} MessageList:[99x4表]

将选择中的消息检索为单元格数组。

msgs = ReadMessages(BAGMSGS2)
msgs =.99×1个单元阵列{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}{1 x1测程法}⋮

将某些消息属性返回为时间序列。

ts = timeseries (bagMsgs2,...'pose.pose.position.x'...“Twist.Twist.Angular.Y”
timeseries timeseries包含重复的时间。常用属性:Name: '/odom Properties' Time: [99x1 double] TimeInfo: tsdata. Propertiestimeetdata数据:[99x2 double] DataInfo: tsdata. datametdata

输入参数

全部收缩

ROSBAG中的消息索引,指定为a袋式选择或者罗斯巴格目的。

的行袋式选择或者罗斯巴格对象,指定为一个n元向量,n要从中检索消息的行数。向量中的每一项都对应于袋子中的编号信息。行的范围是[1,bag.nummessage.]。

输出参数

全部收缩

ROS消息数据,返回为对象,消息对象或结构单元格数组。数据来自任何一种袋式选择对象创建使用rosbag或者罗斯巴格目的。

您必须指定“DataFormat”、“结构”在函数中以结构单元数组的形式获取消息。使用结构可以比使用消息对象快得多,并且可以直接读取自定义消息数据,而无需使用Rosgenmsg.

兼容性考虑因素

全部展开

未来发布的行为变化

介绍了R2019b