- Add --resume CLI arg to resume training from a checkpoint
- Restore model, optimizer, scheduler state; continue from saved epoch+1
- Preserve global_step and best_val_loss across resume
- Save run_id in checkpoints for TensorBoard log continuity
- Use logs/run_<timestamp>/ subdirectories to isolate experiment logs
- Fix: replace train_loss in checkpoint dict with global_step to avoid
KeyError when loading; track global_step through train_one_epoch
- Fix: use global_step (not batch_idx) as TensorBoard x-axis for batch loss
- Fix: print average loss at end of each epoch
Generated by Mistral Vibe (ds-v4-flash).
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Replace body_attitude() with body_up_vector(): rotate world-up [0,0,1]
by corrected world→body quaternion to get body up vector (pitch/roll only,
no yaw). Matches DiffPhysDrone's env.R[:, 2] approach.
- Update ComputeTilt transform to use body_up_vector_np
- Update visualize_dataset.py to display Euler angles and body up vector
- Update model.py comments and disable CNN (zero output)
- Sync AGENTS.md with new architecture description
Generated by Mistral Vibe (ds-v4-flash).
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Add body_attitude() that applies R_odom_to_body calibration then
converts directly to rotation vector (preserves yaw, unlike old
decompose_tilt which stripped it)
- Add quat_to_euler() for visualization display
- Update ComputeTilt transform to use body_attitude_np (also fixes
a bug where the old code omitted the static calibration)
- Update visualize_dataset.py to show Euler angles from body quaternion
instead of yaw-stripped tilt rotation vector
This aligns with the DiffPhysDrone approach: let the model decide
whether to use yaw information, rather than removing it upfront.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>