def bag_to_csv(options, fname):
try:
bag = rosbag.Bag(fname)
streamdict= dict()
stime = None
if options.start_time:
stime = rospy.Time(options.start_time)
etime = None
if options.end_time:
etime = rospy.Time(options.end_time)
except Exception as e:
rospy.logfatal('failed to load bag file: %s', e)
exit(1)
try:
for topic, msg, time in bag.read_messages(topics=options.topic_names,
start_time=stime,
end_time=etime):
if streamdict.has_key(topic):
stream = streamdict[topic]
else:
stream = open(format_csv_filename(options.output_file_format, fname[fname.rfind('/'):-4]+topic),'w')
streamdict[topic] = stream
# header
if options.header:
stream.write("time")
message_type_to_csv(stream, msg)
stream.write('\n')
stream.write(datetime.fromtimestamp(time.to_time()).strftime('%Y/%m/%d/%H:%M:%S.%f'))
message_to_csv(stream, msg, flatten=not options.header)
stream.write('\n')
[s.close for s in streamdict.values()]
except Exception as e:
rospy.logwarn("fail: %s", e)
finally:
bag.close()
评论列表
文章目录