From e6950e25ffb4deaff1ad0ec370cf2f3d241c34df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Thu, 22 Feb 2024 23:49:34 +0000 Subject: [PATCH] option for pid params --- src/output_channel.rs | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/output_channel.rs b/src/output_channel.rs index b07635e..3ac81c3 100644 --- a/src/output_channel.rs +++ b/src/output_channel.rs @@ -11,11 +11,11 @@ pub struct Pid { pub ki: f32, pub kp: f32, pub kd: f32, - pub li: f32, - pub ld: f32, + pub li: Option, + pub ld: Option, pub setpoint: f32, - pub min: f32, - pub max: f32, + pub min: Option, + pub max: Option, } impl Default for Pid { @@ -24,11 +24,11 @@ impl Default for Pid { ki: 0., kp: 0., // positive, sign reference for all gains and limits kd: 0., - li: f32::INFINITY, - ld: f32::INFINITY, + li: None, + ld: None, setpoint: 25., - min: -f32::INFINITY, - max: f32::INFINITY, + min: None, + max: None, } } } @@ -41,13 +41,19 @@ impl TryFrom for iir::Biquad { .gain(iir::Action::Ki, value.ki.copysign(value.kp) as _) .gain(iir::Action::Kp, value.kp as _) .gain(iir::Action::Kd, value.kd.copysign(value.kp) as _) - .limit(iir::Action::Ki, value.li.copysign(value.kp) as _) - .limit(iir::Action::Kd, value.ld.copysign(value.kp) as _) + .limit( + iir::Action::Ki, + value.li.unwrap_or(f32::INFINITY).copysign(value.kp) as _, + ) + .limit( + iir::Action::Kd, + value.ld.unwrap_or(f32::INFINITY).copysign(value.kp) as _, + ) .build()? .into(); biquad.set_input_offset(-value.setpoint as _); - biquad.set_min(value.min as _); - biquad.set_max(value.max as _); + biquad.set_min(value.min.unwrap_or(f32::NEG_INFINITY) as _); + biquad.set_max(value.max.unwrap_or(f32::INFINITY) as _); Ok(biquad) } }