由 rosbag play(和 rqt_bag)和 rosbag 拍摄的时间戳。包的read_messages()不同



我的一些rosbags发生了一些非常奇怪的事情。在其他主题中,这些包包含sensor_msgs/Image类型的消息。

所以我做了:

<<p>

第一场景/strong>在一个终端上,我运行rostopic echo /the_image/header,因为我对实际数据不感兴趣,只是头信息。在另一个终端输入rosbag play --clock the_bag.bag

我得到

seq: 7814
stamp: 
secs: 1625151029
nsecs: 882629359
frame_id: ''
---
seq: 7815
stamp: 
secs: 1625151029
nsecs: 934761166
frame_id: ''
---
seq: 7816
stamp: 
secs: 1625151029
nsecs: 986241550
frame_id: ''
---
seq: 7817
stamp: 
secs: 1625151030
nsecs:  82884301
frame_id: ''
---
<<p>第二场景/strong>我做的与前面的场景相同,但不是rosbag play,而是运行rqt_bag the_bag.bag,一旦在那里,我右键单击消息以发布

它们。这样我得到了类似的值,但是(我以前报告过这个问题)第一个消息被跳过。(这不是这个问题的问题) 第三场景

奇怪的部分来了。我有一个python脚本来执行

timestamps=[]
for topic, msg, t in  rosbag.Bag("the_bag.bag").read_messages():
if topic == '/the_image':
timestamps.append((image_idx, t))
with open("timestamps.txt",'w') as f:
for idx, t in timestamps:
f.write('{0},{1},{2}n'.format(str(idx).zfill(8), t.secs, t.nsecs))

因此,正如您所看到的,我打开包并获得时间戳列表,并将其记录在文本文件中。这使:

00000000,1625151029,987577614
00000001,1625151030,33818541
00000002,1625151030,88932237
00000003,1625151030,170311084
00000004,1625151030,232427083
00000005,1625151030,279726253
00000006,1625151030,363255375
00000007,1625151030,463079346
00000008,1625151030,501315763
00000009,1625151030,566104245
00000010,1625151030,586694806

可以看到值是完全不同的!!

这里会发生什么?

这是一个已知的"问题"rostopic echo和包文件。我把问题放在引号里,因为它不一定是一个问题,但只是rostopic工作方式的产物。为了避免一些模糊的实现细节,这个问题本质上是因为rospy.rostime在播放包文件并回显时没有被正确初始化;即使您将/use_sim_time设置为true。

为了让您更清楚地了解所看到的内容,Python脚本中的时间戳是正确的,而rostopic的时间戳则不是。如果你需要时间戳100%正确,你可以使用-b标志,如:rostoic echo -b the_bag.bag /my_image_topic

最新更新