"""
|
Check trajectory with approach path visualization
|
"""
|
import json
|
|
# Load controller log
|
lines = []
|
with open('controller_log.csv', 'r') as f:
|
for line in f:
|
lines.append(line.strip())
|
|
# Find reached_start marker
|
reached_start_idx = None
|
for i, line in enumerate(lines):
|
if 'reached_start' in line:
|
reached_start_idx = i
|
print(f"Found reached_start at line {i+1}")
|
break
|
|
if reached_start_idx is None:
|
print("No reached_start found")
|
exit(1)
|
|
# Parse and display trajectory
|
print("\n=== TRAJECTORY ANALYSIS WITH APPROACH PATH ===\n")
|
|
# Show first 20 frames after reached_start
|
print("First 20 frames after reached_start (now following combined path):")
|
for i in range(reached_start_idx + 1, min(reached_start_idx + 21, len(lines))):
|
parts = lines[i].split(',')
|
if len(parts) >= 8:
|
t = float(parts[0])
|
x, y = float(parts[1]), float(parts[2])
|
heading = float(parts[3])
|
target_x, target_y = float(parts[4]), float(parts[5])
|
target_idx = int(parts[7])
|
xte = float(parts[8]) if len(parts) > 8 else 0.0
|
h_err = float(parts[9]) if len(parts) > 9 else 0.0
|
print(f"t={t:6.3f} pos=({x:6.3f},{y:6.3f}) h={heading:5.3f} target=({target_x:6.3f},{target_y:6.3f}) idx={target_idx:3d} xte={xte:6.3f} h_err={h_err:6.3f}")
|
|
# Sample every 10 seconds
|
print("\n\nPosition every 10 seconds:")
|
for target_t in [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]:
|
for line in lines[reached_start_idx+1:]:
|
parts = line.split(',')
|
if len(parts) >= 8:
|
t = float(parts[0])
|
if abs(t - target_t) < 0.1: # within 0.1s
|
x, y = float(parts[1]), float(parts[2])
|
heading = float(parts[3])
|
print(f"t={t:6.1f}s: pos=({x:7.3f},{y:7.3f}) heading={heading:6.3f}")
|
break
|
|
# Check if completed
|
print("\n\nCompletion status:")
|
last_line = lines[-1]
|
parts = last_line.split(',')
|
if len(parts) >= 14:
|
t = float(parts[0])
|
x, y = float(parts[1]), float(parts[2])
|
stage = parts[13]
|
print(f"Last frame: t={t:.1f}s, pos=({x:.3f},{y:.3f}), stage={stage}")
|
if t >= 119.0:
|
print("⚠️ TIMEOUT - did not complete in 120s")
|
else:
|
print("✓ Completed successfully")
|
|
# Load paths and check indices
|
print("\n\n=== PATH INFORMATION ===")
|
with open('example_path.json', 'r') as f:
|
work_path = json.load(f)
|
|
print(f"Work path: {len(work_path)} points ({len(work_path)-1} segments)")
|
print(f"Work path range: x=[{min(p[0] for p in work_path):.1f}, {max(p[0] for p in work_path):.1f}], "
|
f"y=[{min(p[1] for p in work_path):.1f}, {max(p[1] for p in work_path):.1f}]")
|
|
# Estimate approach path length
|
print(f"\nNote: Combined path includes approach path + work path")
|
print(f"Check simulation_results.png to see both paths visualized")
|