Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 from __future__ import print_function
00035
00036 import sys
00037 import rosbag.migration
00038
00039 if __name__ == '__main__':
00040 if len(sys.argv) != 3:
00041 print('usage: fix_msg_defs.py <inbag> <outbag>')
00042 exit(2)
00043
00044 mm = rosbag.migration.MessageMigrator()
00045
00046 checked = set()
00047 migrations = []
00048
00049 inbag = rosbag.Bag(sys.argv[1], 'r')
00050 outbag = rosbag.Bag(sys.argv[2], 'w')
00051 lookup_cache = {}
00052
00053
00054 for topic, msg, t in inbag.read_messages(raw=True):
00055 if msg[4]._md5sum != msg[2]:
00056 k = (msg[0], msg[2])
00057 if k in lookup_cache:
00058 real_msg_type = lookup_cache[k]
00059 else:
00060 real_msg_type = mm.lookup_type(k)
00061 if real_msg_type != None:
00062 print("FOUND: %s [%s] was defined in migration system\n"%(msg[0], msg[2]), file=sys.stderr)
00063 else:
00064 systype = roslib.message.get_message_class(msg[0])
00065 if systype != None and systype._md5sum == msg[2]:
00066 real_msg_type = systype
00067 print("FOUND: %s [%s] was defined on your package path\n"%(msg[0], msg[2]), file=sys.stderr)
00068 if real_msg_type == None:
00069 real_msg_type = msg[4]
00070 print("WARNING: Type [%s] with md5sum [%s] has an unknown definition.\n"%(msg[0], msg[2]), file=sys.stderr)
00071 lookup_cache[k] = real_msg_type
00072 outbag.write(topic, (msg[0], msg[1], msg[2], msg[3], real_msg_type), t, raw=True)
00073 else:
00074 outbag.write(topic, msg, t, raw=True)
00075
00076 inbag.close()
00077 outbag.close()
00078
00079 exit(0)