文档帮助中心文档
罗斯巴格
从ROSBAG阅读消息
msgs = ReadMessages(袋)
msgs = ReadMessages(包,行)
msgs = ReadMessages(___“DataFormat”格式)
例子
味精= ReadMessages(袋)从所有消息中返回数据袋式选择或者罗斯巴格对象袋.消息以消息单元格数组的形式返回。得到一个袋式选择对象,使用rosbag.
味精= ReadMessages(袋)
味精
袋
袋式选择
rosbag
味精= ReadMessages(袋,行)指定的行中的消息返回数据行.行的范围是[1,bag.nummessages]。
味精= ReadMessages(袋,行)
行
bag.nummessages
味精= ReadMessages(___“DataFormat”格式)使用先前输入参数的任何一组将数据返回为消息对象的单元格或单元格数组数组。指定格式as“结构”或者“对象”.
味精= ReadMessages(___“DataFormat”格式)
格式
“结构”
“对象”
使用结构可以比使用消息对象快得多,并且可以直接读取自定义消息数据,而无需使用Rosgenmsg..
Rosgenmsg.
请注意
在未来的释放中,ROS工具箱将使用消息结构而不是ROS消息的对象。
现在使用消息结构,设置“DataFormat”名称 - 值参数“结构”.有关更多信息,请参见ROS消息结构.
“DataFormat”
全部收缩
通过主题和时间读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读取消息时的名称-值对。检查返回的结构单元格数组中的第一个结构。
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.提取所有X和Y来自结构的字段。这些字段代表xy机器人在ROSBAG录制期间的位置。
Cellfun.
X
Y
xPoints = cellfun(@(m) double(m.X),msgStructs);yPoints = cellfun(@(m) double(m.Y),msgStructs);情节(xPoints yPoints)
加载一个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.]。
bag.nummessage.
ROS消息数据,返回为对象,消息对象或结构单元格数组。数据来自任何一种袋式选择对象创建使用rosbag或者罗斯巴格目的。
您必须指定“DataFormat”、“结构”在函数中以结构单元数组的形式获取消息。使用结构可以比使用消息对象快得多,并且可以直接读取自定义消息数据,而无需使用Rosgenmsg..
“DataFormat”、“结构”
全部展开
未来发布的行为变化
现在可以将消息创建为具有与消息对象属性匹配的字段的结构。使用结构通常会提高创建、更新和使用ROS消息的性能,但是设置消息字段时不再验证消息字段。消息类型和来自结构的相应字段值在通过网络发送时进行验证。
要使用ROS消息作为结构,请使用“DataFormat”在创建发布者、订阅者或其他ROS对象时使用name-value参数。从这些对象生成的任何消息都将利用结构。
Pub = Rospublisher(“/扫描”,“sensor_msgs /提升”,“DataFormat”,“结构”MSG = rosmessage(pub)
您也可以直接将消息作为结构创建,但要确保将数据格式指定为“结构”对于发布者,订阅者或其他ROS对象也是如此。ros对象默认仍然使用消息对象。
msg = rosmessage(“/扫描”,“sensor_msgs /提升”,“DataFormat”,“结构”)...Pub = Rospublisher(“/扫描”,“sensor_msgs /提升”,“DataFormat”,“结构”)
在未来的版本中,ROS消息将默认使用结构,并且将删除ROS消息对象。
有关更多信息,请参见使用消息结构提高ROS的性能.
选择|rosbag|timeseries|罗斯巴格
选择
timeseries
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
联系您当地的办公室