robust-pid 0.1.0

Production-grade PID controller for safety-critical systems
Documentation
  • Coverage
  • 85.14%
    63 out of 74 items documented0 out of 30 items with examples
  • Size
  • Source code size: 109.21 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 702.3 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 8s Average build duration of successful builds.
  • all releases: 8s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • AhmedBoin

Robust PID Controller

A production-grade PID controller for safety-critical systems including aerospace, automotive, and industrial control applications.

Features

  • Anti-windup protection with 3 strategies (Clamping, Back-calculation, Conditional)
  • Derivative filtering to reduce noise sensitivity
  • Setpoint ramping for smooth transitions
  • Output rate limiting to protect actuators
  • Safety monitoring with comprehensive status reporting
  • Variable time step support
  • Bumpless transfer between control modes
  • Detailed diagnostics for tuning and analysis
  • no_std compatible for embedded systems
  • Generic over float types (f32, f64)

Quick Start

use robust_pid::{PidBuilder, AntiWindupMode, DerivativeMode};

fn main() {
    // Create a PID controller
    let mut pid = PidBuilder::new()
        .gains(2.0, 0.5, 0.1)           // Kp, Ki, Kd
        .output_limits(-100.0, 100.0)    // Output range
        .antiwindup(AntiWindupMode::BackCalculation, 1.0)
        .derivative_filter(DerivativeMode::LowPass, 0.2)
        .build();

    // Set target
    pid.set_setpoint(25.0);

    // Control loop
    let measurement = 20.0;
    let dt = 0.01; // 10ms
    
    let output = pid.update(measurement, dt);
    println!("Control output: {}", output.output);
}

Examples

Run the examples:

# Simple temperature control
cargo run --example basic_temperature

# Aircraft pitch control
cargo run --example aircraft_pitch

# Rocket 3-axis attitude control
cargo run --example rocket_attitude

# Drone cascaded altitude control
cargo run --example drone_altitude

# Feed with error only
cargo run --example error_correction

no_std Support

For embedded systems without std:

[dependencies]
robust-pid = { version = "0.1", default-features = false, features = ["libm"] }

License

MIT OR Apache-2.0