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
						
					
					
				
			
		
		
	
	
							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])
 | 
						|
 |