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