rust_servo/pid/
pid_controller.rs

1use std::fmt::Display;
2
3use num_traits::Num;
4
5use crate::servo::{Servo, ServoInput};
6
7pub struct PidController {
8    timestamp: f64,
9    set_point: f64,
10    last_error_term: Option<f64>,
11    proportional: f64,
12    integral: f64,
13    derivative: f64,
14}
15
16impl PidController {
17    pub fn new(set_point: f64) -> Self {
18        Self {
19            timestamp: 0.0,
20            set_point: set_point,
21            last_error_term: None,
22            proportional: 0.0,
23            integral: 0.0,
24            derivative: 0.0,
25        }
26    }
27}
28
29impl Servo for PidController {
30    fn read<T: Num>(
31        &mut self,
32        servo_input: &ServoInput<T>,
33    ) -> Result<crate::servo::ControlValue, crate::servo::ReadInputError> {
34        todo!();
35    }
36}
37
38impl Display for PidController {
39    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40        write!(f, "{}", std::any::type_name::<Self>())
41    }
42}