Skip to content

N-Raghav/Drone-Control-Methods

Repository files navigation

Drone Control Methods

Crazyflie 2.0 flight controller (PD/LQR) with polynomial trajectory generation and hardware validation

Directory Structure

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

Control Systems: gym_pybullet_drones/control/

DSLPIDControl.py

  • Purpose: Implements cascaded PID control for position and attitude
  • Key Classes: DSLPIDControl (inherits from BaseControl)
  • Key Methods:
    • __init__(): Initialize controller with drone model
    • reset(): Reset PID integral and error states
    • computeControl(): 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)
  • Usage:
    ctrl = DSLPIDControl(drone_model=DroneModel.CF2X)
    rpm = ctrl.computeControl(...)

LQRControl.py

  • Purpose: Linear Quadratic Regulator controller implementation
  • Key Classes: LQRControl (inherits from BaseControl)
  • Features: Optimal control using LQR theory
  • Usage: Alternative to PID control for advanced users
  • Tuning: Less intuitive than PID, requires understanding of LQR

Trajectory Generators: gym_pybullet_drones/trajectory/

circle.py

  • Purpose: Generate circular flight trajectories
  • Key Classes: Circle
  • Key Methods:
    • get_pos(t): Get position at time t
    • get_vel(t): Get velocity at time t
    • get_acc(t): Get acceleration at time t
  • Parameters:
    • center: Center point [x, y, z]
    • radius: Circle radius in meters
    • height: 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)

diamond.py

  • 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

plotting.py

  • Purpose: Visualization utilities for trajectories
  • Key Functions:
    • Plot trajectory paths
    • Display 3D trajectory visualization
    • Export trajectory data
  • Usage: For analyzing and debugging trajectories

Examples: gym_pybullet_drones/examples/

pid_1_drone.py

  • Purpose: Single drone hovering with PID control
  • What It Does:
    1. Creates a simulation environment
    2. Spawns one Crazyflie drone
    3. Uses DSLPIDControl for hovering
    4. Commands drone to hover at 1.0 m height
    5. 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

trajectory_tracking.py

  • Purpose: Track predefined trajectories (circular or diamond)
  • What It Does:
    1. Creates simulation environment
    2. Generates circular or diamond trajectory
    3. Commands drone to follow trajectory
    4. Visualizes in real-time
    5. 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

About

Crazyflie 2.0 flight controller (PD/LQR) with polynomial trajectory generation and hardware validation

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published