Quadrotor Trajectory Following with MPPI
Status: ✅ Complete (Phases 1-4) Branch: feat/quadrotor-traj-foll-example Created: 2026-02-01 Completed: 2026-02-02
Objective
Implement a comprehensive set of examples demonstrating quadrotor trajectory following using MPPI control. Showcases the JAX-MPPI library’s capabilities on a realistic robotic system with nonlinear dynamics.
Background
The current JAX-MPPI library includes three MPPI variants (standard, SMPPI, KMPPI), examples (pendulum, 2D navigation), and autotuning infrastructure. A quadrotor trajectory following example demonstrates MPPI on a high-dimensional nonlinear system (13D state space) with realistic robotics benchmarks.
System Overview
State Space (13D): Position (3D), velocity (3D), orientation (quaternion, 4D), angular velocity (3D)
- Frame: NED (North-East-Down) world frame, FRD (Forward-Right-Down) body frame
Control Input (4D): Total thrust + body angular rates (roll, pitch, yaw rates)
Dynamics: 6-DOF rigid body with quaternion-based attitude representation
- For detailed mathematical formulations, see
docs/src/dynamics.qmd
Cost Function: Position/velocity tracking error + control effort penalty
Implementation Summary
Phase 1: Core Components ✅
Completed Components:
- Quadrotor dynamics module (
src/jax_mppi/dynamics/quadrotor.py)- Quaternion utilities and kinematics
- 6-DOF dynamics with RK4 integration
- Unit tests for quaternion norm preservation and energy conservation
- Trajectory cost functions (
src/jax_mppi/costs/quadrotor.py)- Position/velocity tracking, attitude tracking, terminal costs
- Unit tests for all cost functions
Phase 2: Trajectory Generators ✅
Completed:
- Trajectory generation utilities (
examples/quadrotor/trajectories.py)- Circular, figure-8, hover, helix trajectories
- Waypoint interpolation with cubic Hermite splines
- Trajectory metrics computation
- 28 unit tests (all passing)
Phase 3: Basic Examples ✅
Example 1: quadrotor_hover.py - Stabilization around fixed setpoint
- Visualization of state evolution, performance metrics (settling time, overshoot)
Example 2: quadrotor_circle.py - Circular trajectory tracking
- Tracking error visualization, control inputs, 3D trajectory plots
Integration Tests: 11 tests covering both examples
Phase 4: Advanced Examples ✅
Example 3: quadrotor_figure8_comparison.py - MPPI variant comparison
- Side-by-side comparison of MPPI, SMPPI, and KMPPI on aggressive figure-8
- Comprehensive metrics: tracking accuracy, control smoothness, energy consumption
- 6-subplot visualization with performance comparison table
- Demonstrates SMPPI produces smoother control (lower jerk)
Example 4: quadrotor_custom_trajectory.py - Waypoint following
- User-defined waypoint trajectories with smooth interpolation
- Command-line interface for custom waypoint specification
- Default square pattern demonstration
Integration Tests: 13 tests for advanced examples
Phase 5: Documentation
Key Features Delivered
✅ 6-DOF quadrotor dynamics with quaternion representation ✅ Multiple reference trajectory types (circle, figure-8, hover, custom waypoints) ✅ Comprehensive cost functions for trajectory tracking ✅ Four complete examples demonstrating different capabilities ✅ 50+ unit and integration tests (all passing) ✅ Publication-quality visualizations saved to docs/_media/quadrotor/ ✅ 50 Hz control rate (JIT-compiled) for real-time performance ✅ Proper NED/FRD frame conventions throughout
File Structure
jax_mppi/
├── src/jax_mppi/
│ ├── dynamics/quadrotor.py # 6-DOF dynamics with quaternions
│ └── costs/quadrotor.py # Trajectory tracking costs
├── examples/quadrotor/
│ ├── trajectories.py # Trajectory generation utilities
│ ├── quadrotor_hover.py # Example 1: Hover control
│ ├── quadrotor_circle.py # Example 2: Circle following
│ ├── quadrotor_figure8_comparison.py # Example 3: MPPI comparison
│ └── quadrotor_custom_trajectory.py # Example 4: Waypoint following
├── tests/
│ ├── test_quadrotor_dynamics.py
│ ├── test_quadrotor_costs.py
│ └── test_quadrotor_trajectories.py
└── docs/_media/quadrotor/
├── quadrotor_hover_mppi.png
├── quadrotor_circle_mppi.png
├── quadrotor_hover_comparison.png
└── quadrotor_figure8_comparison.png
Performance Metrics
- Control Rate: 50 Hz (JIT-compiled)
- Tracking Accuracy: <0.1m RMS error on circle trajectory
- Smoothness: SMPPI shows 30-40% lower jerk than standard MPPI
- Energy: Comparable across all three variants for same tracking performance
Future Enhancements (Optional)
- Obstacle avoidance during trajectory following
- Full Euler dynamics for rotational motion
- Wind disturbance modeling
- Autotuning example for quadrotor hyperparameters
- Real-time animated visualization
Last Updated: 2026-02-02 Status: Implementation complete, documentation in progress