Bootstrap

Udacity CH2 数据集下载及python 解析

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文件都解析啦!

;