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