Python 读取bag包中gps数据
查找超过3sGPS数据丢失的时间点
-
先查看下bag的topic信息,代码如下:
#coding:utf-8
import rosbag
bag_file = ‘/home/ubuntu/01tools/draw_map/bags/20210129_170428.bag’ #bag包路径
bag = rosbag.Bag(bag_file, “r”)
info = bag.get_type_and_topic_info() #读取信息
print(info)
输出结果如下:
-
以topic = /pb/gps_data
bag_data = bag.read_messages(’/pb/gps_data’) #指定topic,如果不给定topic,则会遍历所有的topic
for topic, msg, t in bag_data:
data = msg.pb_serialized
print(data)
-
处理数据,并将数据以字符串形式放到list
k=[]
for topic, msg, t in bag_data:
data = msg.pb_serialized
# print(data)
result = data.strip("\n")
k.append([str(y) for y in result.replace(’\n’,’,’).replace(’:’,’,’).split(’,’)])
print(k)
-
可以看到,k 中数据是一组一组的list,依次取每个list的角标就能拿到数据了,如果要计算,我的方法是把取出的结果放到新的list,然后做数值运算
d = []
for item in k:
d.append(int(item[7])) #将字符串转换为int类型,后边做运算
print(d)
-
计算距上一次接收到数据的时间差,是否有数据中断
n =len(d)
for i in range(n-1):
dis = ((d[i+1])-(d[i]))
if dis >= 3000000: #计算接收传感器数据是否大于3s
print(d[i+1],d[i], dis)
很明显,有将近6分钟是没有接收到gps数据的 -
完整代码
-