Udacity 数据集下载
下载链接:https://github.com/udacity/self-driving-car/tree/master/datasets/CH2,注意到这里下载下来的文件是种子文件(种子文件就是BT文件,后缀是.torrent的那些。 这个种子文件是你要下载的文件的一小部分。 有了这个小部分,即种子,你才可能开始下载,并从别人那里下载到完整的文件),由于下载种子的完整资源耗时很久,为了方便大家,我把下载好的完整文件放置在百度网盘,链接:https://pan.baidu.com/s/1IdJQWE8uUUPWqFUYXabYWQ 提取码:gzdx
数据解析
下载下来的文件提供的是rosbag格式的数据,并不能直接使用,需要读取出jpg图像和csv文件,我看网上的读取过程很多都是安装rosbag软件或者docker软件,然后在linux终端下执行一系列的命令进行提取,这对于不熟悉Linux环境的小白们来说很费脑,还不如通过代码解析来的简单,所以我在这里把python解析rosbag数据的代码放在这里供大家参考(亲测可用):
'''
Generate images and steering angles from hmb3.bag
Modified from
https://github.com/udacity/self-driving-car/blob/master/steering-models/evaluation/generator.py
'''
import argparse
import rosbag
from io import StringIO, BytesIO
from keras_preprocessing import image
from rosbag import bag
from scipy import misc
import numpy as np
import csv
import os
KEY_NAME = {
'/vehicle/steering_report': 'steering',
'/center_camera/image_color/c': 'image',
}
def update(msg, d):
key = KEY_NAME.get(msg[0])
if key is None: return
d[key] = msg
def gen(bagpath):
print("Getting bag")
bag = rosbag.Bag(bagpath)
print('Got bag')
image = {}
total = bag.get_message_count()
count = 0
for e in bag.read_messages():
count += 1
if count % 10000 == 0:
print ( count / total)
if e[0] in ['/center_camera/image_color/compressed']:
#print(e)
if len({'steering'} - set(image.keys())):
continue
if image['steering'][1].speed < 5.: continue
s = BytesIO(e[1].data)
img = misc.imread(s)
yield img, np.copy(img), image['steering'][1].speed,\
image['steering'][1].steering_wheel_angle, e[2].to_nsec()
last_ts = e[2].to_nsec()
else:
update(e, image)
if __name__ == '__main__':
img_paths = image.list_pictures('hmb/testing/', ext='jpg') #解析出来的图片的保存路径
data_iter = gen('./testing/HMB_3.bag') # rosbag文件所在路径
next(data_iter)
with open('hmb/testing/hmb3_steering.csv', 'w') as hmb1csv: #保存解析出来的csv文件
writer = csv.writer(hmb1csv, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow([str.encode('timestamp'),str.encode('steering angle')])
for image_pred, image_disp, speed, steering, ts in data_iter:
misc.imsave('hmb/testing/'+ str(ts) + '.jpg', image_disp) #保存解析的图片
#print(ts)
csvcontent = []
csvcontent.append(ts)
csvcontent.append(steering)
writer.writerow(csvcontent)
*这里用到的环境是python 3.6,环境是python2的也是可以用的,具体需要根据运行的报错提示修改一下(so easy)。
*这里我解析的是HMB_3.bag,将文件路径修改一下,就可以依次把其他的bag文件都解析啦!