openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

98 lines
2.7 KiB

#!/usr/bin/env python
from common.kalman.ned import ecef2geodetic
import csv
import numpy as np
import webbrowser
import os
import sys
import json
import numpy.linalg as LA
import gmplot
from dateutil.parser import parse
from common.numpy_helpers import deep_interp
# import cvxpy as cvx
MPH_TO_MS = 0.44704
def downsample(positions, speeds, start_idx, end_idx, dist):
# TODO: save headings too
track = []
last_position = positions[start_idx]
valid_indeces = []
track_speeds = []
for pi in range(start_idx, end_idx):
# only save points that are at least 10 cm far away
if LA.norm(positions[pi] - last_position) >= dist:
#print LA.norm(positions[pi] - last_position)
last_position = positions[pi]
track.append(positions[pi])
valid_indeces.append(pi)
track_speeds.append(speeds[pi])
print(-start_idx + end_idx, len(valid_indeces))
# this compare the original point count vs the filtered count
track = np.array(track)
track_speeds = np.array(track_speeds)
return track, track_speeds
def converter(date):
filename = "/home/batman/one/selfdrive/locationd/liveloc_dumps/" + date + "/canonical.csv" # Point one (OK!)
c = csv.DictReader(open(filename, 'rb'), delimiter=',')
start_time = None
t = []
ll_positions = []
positions = []
sats = []
flag = []
speeds = []
for row in c:
t.append(float(row['pctime']))
x = float(row['ecefX'])
y = float(row['ecefY'])
z = float(row['ecefZ'])
ecef = np.array((x, y, z))
speeds.append(float(row['velSpeed']))
pos = ecef2geodetic(ecef)
ll_positions.append(pos)
positions.append(ecef)
t = np.array(t)
ll_positions = np.array(ll_positions)
positions = np.array(positions)
#distances = ll_positions[:,0:2] - START_POS[:2]
#i_start = np.argmin(LA.norm(distances, axis=1))
#for i in range(i_start + 500):
# distances[i] += np.array([100, 100])
#i_end = np.argmin(LA.norm(distances, axis=1))
i_start = 0
i_end = len(positions)
print(i_start, i_end)
track, track_speeds = downsample(positions, speeds, i_start, i_end, 0.2)
ll_track = np.array([ecef2geodetic(pos) for pos in track])
track_struct = {}
print(track_speeds.shape)
print(track.shape)
track_struct['race'] = np.hstack((track,
np.expand_dims(track_speeds, axis=1),
np.zeros((len(track_speeds), 1))))
f = open('/home/batman/one/selfdrive/controls/tracks/loop_city.npy', 'w')
np.save(f, track_struct)
f.close()
print("SAVED!")
if __name__ == "__main__":
converter(sys.argv[1])