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.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							54 lines
						
					
					
						
							1.6 KiB
						
					
					
				#!/usr/bin/env python3
 | 
						|
import argparse
 | 
						|
 | 
						|
import numpy as np
 | 
						|
import matplotlib.pyplot as plt
 | 
						|
 | 
						|
from openpilot.tools.lib.logreader import LogReader
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
  parser = argparse.ArgumentParser()
 | 
						|
  parser.add_argument('--width', default=2160, type=int)
 | 
						|
  parser.add_argument('--height', default=1080, type=int)
 | 
						|
  parser.add_argument('--route', default='rlog', type=str)
 | 
						|
  args = parser.parse_args()
 | 
						|
 | 
						|
  w = args.width
 | 
						|
  h = args.height
 | 
						|
  route = args.route
 | 
						|
 | 
						|
  fingers = [[-1, -1]] * 5
 | 
						|
  touch_points = []
 | 
						|
  current_slot = 0
 | 
						|
 | 
						|
  lr = list(LogReader(route))
 | 
						|
  for msg in lr:
 | 
						|
    if msg.which() == 'touch':
 | 
						|
      for event in msg.touch:
 | 
						|
        if event.type == 3 and event.code == 47:
 | 
						|
          current_slot = event.value
 | 
						|
        elif event.type == 3 and event.code == 57 and event.value == -1:
 | 
						|
          fingers[current_slot] = [-1, -1]
 | 
						|
        elif event.type == 3 and event.code == 53:
 | 
						|
          fingers[current_slot][1] = event.value
 | 
						|
          if fingers[current_slot][0] != -1:
 | 
						|
            touch_points.append(fingers[current_slot].copy())
 | 
						|
        elif event.type == 3 and event.code == 54:
 | 
						|
          fingers[current_slot][0] = w - event.value
 | 
						|
          if fingers[current_slot][1] != -1:
 | 
						|
            touch_points.append(fingers[current_slot].copy())
 | 
						|
 | 
						|
  if not touch_points:
 | 
						|
    print(f'No touch events found for {route}')
 | 
						|
    quit()
 | 
						|
 | 
						|
  unique_points, counts = np.unique(touch_points, axis=0, return_counts=True)
 | 
						|
 | 
						|
  plt.figure(figsize=(10, 3))
 | 
						|
  plt.scatter(unique_points[:, 0], unique_points[:, 1], c=counts, s=counts * 20, edgecolors='red')
 | 
						|
  plt.colorbar()
 | 
						|
  plt.title(f'Touches for {route}')
 | 
						|
  plt.xlim(0, w)
 | 
						|
  plt.ylim(0, h)
 | 
						|
  plt.grid(True)
 | 
						|
  plt.show()
 | 
						|
 |