"""Analyze path_heading from log"""
|
from math import atan2, pi
|
|
with open('controller_log.csv') as f:
|
lines = [l.strip() for l in f.readlines()[1:]]
|
|
filtered = [l.split(',') for l in lines if len(l.split(',')) >= 9]
|
|
print("Analysis at key time points:")
|
for target_t in [10.0, 20.0, 30.0]:
|
rows = [p for p in filtered if abs(float(p[0]) - target_t) < 0.05]
|
if rows:
|
r = rows[0]
|
t = float(r[0])
|
x, y = float(r[1]), float(r[2])
|
heading = float(r[3])
|
tx, ty = float(r[4]), float(r[5])
|
xte = float(r[8])
|
heading_err = float(r[9])
|
|
path_heading = atan2(ty-y, tx-x)
|
|
print(f"\nt={t:.1f}s:")
|
print(f" pos=({x:.3f}, {y:.3f}), heading={heading:.3f} rad = {heading*180/pi:.1f} deg")
|
print(f" target=({tx:.3f}, {ty:.3f})")
|
print(f" path_heading={path_heading:.3f} rad = {path_heading*180/pi:.1f} deg")
|
print(f" xte={xte:.3f}, heading_err={heading_err:.3f}")
|
print(f" => desired_heading = path_heading + xte_correction")
|
print(f" = {path_heading:.3f} + (-1.2 * {xte:.3f})")
|
print(f" = {path_heading - 1.2*xte:.3f} rad = {(path_heading - 1.2*xte)*180/pi:.1f} deg")
|