主要内容

readMessages

阅读来自rosbag的信息

描述

例子

公司= readMessages (控件中的所有消息返回数据BagSelectionrosbagreader对象.消息在消息的单元格数组中返回。得到一个BagSelection对象,使用rosbag

例子

公司= readMessages (从指定行的消息返回数据.行的范围是[1,袋里。NumMessages]。

例子

公司= readMessages (___“DataFormat”格式)使用前面的输入参数集,以结构的单元格数组或消息对象的单元格数组的形式返回数据。指定格式作为“结构”“对象”

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

请注意

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

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

例子

全部折叠

阅读rosbag和过滤器的主题和时间。

bagselect = rosbag (“ex_multiple_topics.bag”);bagselect2 =选择(bagselect,“时间”...[bagselect。StartTime bagselect。开始时间+ 1),“主题”' /奥多姆');

以单元格数组的形式返回所有消息。

allMsgs = readMessages (bagselect2);

返回前十个消息作为单元格数组。

firstMsgs = readMessages (bagselect2 1:10);

加载rosbag。

袋= rosbag (“ros_turtlesim.bag”);

选择一个特定的主题。

bSel =选择(包,“主题”“turtle1 /姿势”);

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

msgStructs = readMessages (bSel,“DataFormat”“结构”);msgStructs {1}
ans =结构体字段:MessageType: 'turtlesim/Pose' X: 5.5016 Y: 6.3965 Theta: 4.5377线性速度:1 AngularVelocity: 0

提取xy从信息中点出机器人的轨迹。

使用cellfun提取所有的X而且Y结构中的字段。这些字段表示xy机器人在rosbag录音时的位置。

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

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

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

创建一个rosbagreader对象的所有消息。

bagMsgs = rosbagreader (“ros_multi_topics.bag”
FilePath: ` /mathworks/dev /bat/Bdoc22b/build/matlab/toolbox/robotics/robotexamples/ros/data/bags/ros_multi_topics. bagMsgs = rosbagreader。袋子的开始时间:201.3400结束时间:321.3400 NumMessages: 36963 AvailableTopics: [4x3表]AvailableFrames: {0x1 cell} MessageList: [36963x4表]

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

bagMsgs2 =选择(bagMsgs,...时间= [bagMsgs。StartTime bagMsgs。开始时间+ 1),...主题=' /奥多姆'
FilePath: '/mathworks/dev /bat/Bdoc22b/build/matlab/toolbox/robotics/robotexamples/ros/data/bags/ros_multi_topics. `' StartTime: 201.3400 EndTime: 202.3200 NumMessages: 99 AvailableTopics: [1x3 table] AvailableFrames: {0x1 cell} MessageList: [99x4 table]

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

公司= readMessages (bagMsgs2)
公司=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包含重复的时间。常用属性:名称:'/odom Properties'时间:[99x1 double] TimeInfo: tsdata. Propertiestimemetadata数据:[99x2 double] DataInfo: tsdata.datametadata . DataInfo: [99x2 double

输入参数

全部折叠

rosbag中消息的索引,指定为BagSelectionrosbagreader对象。

的行BagSelectionrosbagreader对象,指定为n元向量,n要从中检索消息的行数。向量中的每个条目都对应于包中的一个编号消息。行的范围是[1,袋里。NumMessage]。

输出参数

全部折叠

ROS消息数据,作为对象、消息对象的单元格数组或结构的单元格数组返回。数据来自BagSelection对象创建使用rosbag或者是rosbagreader对象。

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

版本历史

介绍了R2019b

全部展开

Baidu
map