From 33fdd0252fbafe540c492c41711ccbfe6e6a187c Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 9 Feb 2023 14:24:21 +0100 Subject: [PATCH] Adjust scaling of parameters --- src/main.rs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main.rs b/src/main.rs index 14a7bd9..7f55db1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -71,7 +71,7 @@ fn try_main() -> Result<(), Box> { &sensor, &mut buttons, setpoint, - (k_p / 10.0, k_i / 10000.0, k_d / 10000.0), + (k_p / 5.0, k_i / 5000.0, k_d * 10.0), v, ); left_motor.stop().and(right_motor.stop())?; @@ -95,10 +95,10 @@ fn select_values( font: &Font, ) -> (f32, f32, f32, i32) { use Parameter::{Kd, Ki, Kp, Speed}; - let mut k_p = thread_rng().gen_range(0.01..=10.0); - let mut k_i = thread_rng().gen_range(0.01..=10.0); - let mut k_d = thread_rng().gen_range(0.01..=10.0); - let mut v = thread_rng().gen_range(1..=100); + let mut k_p = 0.0; //thread_rng().gen_range(0.01..=10.0); + let mut k_i = 0.0; //thread_rng().gen_range(0.01..=10.0); + let mut k_d = 0.0; //thread_rng().gen_range(0.01..=10.0); + let mut v = 0; //thread_rng().gen_range(1..=100); let mut selected = Kp; let mut times_pressed_up = 0; let mut times_pressed_down = 0; @@ -156,18 +156,18 @@ fn select_values( if buttons.is_up() { *param = (*param + if times_pressed_up > 10 { - 0.01f32 - } else { 0.1f32 + } else { + 0.01f32 }) .min(99.99); } if buttons.is_down() { *param = (*param - if times_pressed_down > 10 { - 0.01f32 - } else { 0.1f32 + } else { + 0.01f32 }) .max(0.0); } @@ -231,10 +231,7 @@ fn follow_line( v: i32, ) -> Result { let mut controller = Pid::new(setpoint, 200.0); - controller - .p(k_p, f32::INFINITY) - .i(k_i, f32::INFINITY) - .d(k_d, f32::INFINITY); + controller.p(k_p, 200.0).i(k_i, 200.0).d(k_d, 200.0); left.set_duty_cycle_sp(0)?; right.set_duty_cycle_sp(0)?; buttons.process(); @@ -253,7 +250,9 @@ fn follow_line( let red = is_red(color); match state { LineFollowState::PreStart if red => state = LineFollowState::Start(Instant::now()), - LineFollowState::Start(start) if !red => state = LineFollowState::Run(start), + LineFollowState::Start(start) if !red && start.elapsed().as_secs() > 10 => { + state = LineFollowState::Run(start); + } LineFollowState::Run(start) if red => state = LineFollowState::Finish(start.elapsed()), _ => (), }