BagSelection用于存储rosbag选择的对象描述BagSelection对象是rosbag中消息的索引。 您可以使用它从rosbag中提取消息数据,根据特定条件选择邮件,或创建消息属性的时间序列。使用rosbag加载rosbag并创建BagSelection对象。使用select按时间和主题等条件过滤rosbag。创建句法bag = rosbag(filename)bagsel = select(bag)描述bag = rosbag(filename)创建一个可索引的BagSelection对象bag,其中包含rosbag在输入路径filename下的所有消息索引。 要访问数据,可以调用readMessages或时间序列来提取相关数据。有关其他语法,请参见rosbag。bagel = select(bag)返回一个对象bagsel,其中包含BagSelection对象bag中的所有消息。此函数不会更改原始BagSelection对象的内容。 返回对象Bagsel是一个包含指定消息选择的新对象。请参阅select以获取其他语法,并按时间和主题等条件进行过滤。属性FilePath — rosbag文件的绝对路径(字符向量)此属性是只读的。rosbag文件的绝对路径,指定为字符向量。数据类型:charStartTime —选择中的第一条消息的时间戳(标量)此属性是只读的。所选内容中第一条消息的时间戳,以秒为单位指定为标量。数据类型:双精度EndTime-选择中最后一条消息的时间戳标量此属性是只读的。所选内容中最后一条消息的时间戳,以秒为单位指定为标量。数据类型:双精度NumMessages —选择标量中的消息数此属性是只读的。所选内容中的消息数,指定为标量。 首次加载rosbag时,此属性包含rosbag中的消息数。 使用select选择消息的子集后,该属性将显示该子集中的消息数。数据类型:双精度AvailableTopics —选择表中的主题表此属性是只读的。选择中的主题表,指定为表。 表中的每一行都列出一个主题,该主题的消息数,消息类型以及类型的定义。 例如:数据类型:表AvailableFrames —字符向量的可用坐标系单元列表此属性是只读的。可用坐标系列表,以字符向量的单元格数组形式返回。 使用canTransform检查帧之间的特定转换是否可用,或使用getTransform查询转换。数据类型:单元格数组MessageList —选择中的消息列表(表)此属性是只读的。所选内容中的消息列表,指定为表格。 表中的每一行列出了一条消息。数据类型:表对象功能canTransform 验证转换是否可用getTransform 检索两个坐标系之间的变换readMessages 阅读来自rosbag的消息select 在rosbag中选择消息子集timeseries 为所选消息属性创建时间序列对象示例使用BagSelection对象创建rosbag选择加载rosbag日志文件,并根据所选条件解析特定消息。在rosbag日志文件中为所有消息创建一个BagSelection对象。根据消息的时间戳和主题选择消息的子集。以单元格数组的形式检索选择中的消息。msgs = readMessages(bagMsgs2);返回某些消息属性作为时间序列。从rosbag检索信息从rosbag检索信息。如果rosbag在MATLAB路径上尚不可用,请指定它的完整路径。选择消息的子集,并按时间和主题过滤。从文件显示rosbag信息要查看有关rosbag日志文件的信息,请使用rosbag info文件名,其中filename是rosbag(.bag)文件。从rosbag文件获取转换通过加载rosbag并检查可用的帧,从rosbag(.bag)文件中获取转换。 从这些框架中,使用getTransform查询两个坐标框架之间的转换。加载rosbag。获取可用框架的列表。frames = bag.AvailableFrames;获取两个坐标系之间的最新变换。检查在特定时间可用的转换并检索该转换。 使用canTransform检查转换是否可用。 使用rostime指定时间。tfTime = rostime(bag.StartTime + 1);end从rosbag读取消息作为结构加载rosbag。选择一个特定的主题。阅读消息是一种结构。 阅读消息时,请指定“数据格式”名称/值对。 检查返回的单元格数组中的第一个结构。msgStructs{1}从消息中提取xy点,并绘制机器人轨迹。 使用cellfun从结构中提取所有X和Y字段。 这些字段表示在rosbag记录期间机器人的xy位置。xPoints = cellfun(@(m) double(m.X),msgStructs);yPoints = cellfun(@(m) double(m.Y),msgStructs);plot(xPoints,yPoints)