Crazyflie 2.0 flight controller (PD/LQR) with polynomial trajectory generation and hardware validation
rbe-502-crazyflie-project/
├── gym_pybullet_drones/ # Main Python package
├── tests/ # Unit tests
├── pyproject.toml # Python project configuration
├── README.md # Main project documentation
├── LICENSE # Project license
├── build_project.sh # Build script
- Purpose: Implements cascaded PID control for position and attitude
- Key Classes:
DSLPIDControl(inherits fromBaseControl) - Key Methods:
__init__(): Initialize controller with drone modelreset(): Reset PID integral and error statescomputeControl(): Main control computation entry point_dslPIDPositionControl(): Position/velocity control_dslPIDAttitudeControl(): Attitude/angular control_one23DInterface(): Convert 1/2/3D thrust to motor commands
- Tunable Parameters:
- Lines ~205-210: Position control gains (
Kp,Kd) - Lines ~306-307: Attitude control gains (
Kp_att,Kd_att)
- Lines ~205-210: Position control gains (
- Usage:
ctrl = DSLPIDControl(drone_model=DroneModel.CF2X) rpm = ctrl.computeControl(...)
- Purpose: Linear Quadratic Regulator controller implementation
- Key Classes:
LQRControl(inherits fromBaseControl) - Features: Optimal control using LQR theory
- Usage: Alternative to PID control for advanced users
- Tuning: Less intuitive than PID, requires understanding of LQR
- Purpose: Generate circular flight trajectories
- Key Classes:
Circle - Key Methods:
get_pos(t): Get position at time tget_vel(t): Get velocity at time tget_acc(t): Get acceleration at time t
- Parameters:
center: Center point [x, y, z]radius: Circle radius in metersheight: Hovering height in meters
- Usage:
traj = Circle(center=[0, 0, 1.0], radius=0.5, height=1.0) pos = traj.get_pos(t=1.5)
- Purpose: Generate diamond-shaped flight trajectories
- Key Classes:
Diamond - Key Methods: Same as Circle class
- Parameters: Similar to Circle
- Usage: For testing different trajectory shapes
- Purpose: Visualization utilities for trajectories
- Key Functions:
- Plot trajectory paths
- Display 3D trajectory visualization
- Export trajectory data
- Usage: For analyzing and debugging trajectories
- Purpose: Single drone hovering with PID control
- What It Does:
- Creates a simulation environment
- Spawns one Crazyflie drone
- Uses DSLPIDControl for hovering
- Commands drone to hover at 1.0 m height
- Runs for ~5 seconds
- Running:
cd gym_pybullet_drones/examples python3 pid_1_drone.py - Good For: Testing if installation works, basic PID testing
- Output: Visual simulation window
- Purpose: Track predefined trajectories (circular or diamond)
- What It Does:
- Creates simulation environment
- Generates circular or diamond trajectory
- Commands drone to follow trajectory
- Visualizes in real-time
- Logs trajectory tracking error
- Running:
cd gym_pybullet_drones/examples python3 trajectory_tracking.py - Good For: Testing trajectory tracking performance
- Output: Visual simulation + performance metrics