From 55fbc7830aaa6c736254755b5055c8d717972e62 Mon Sep 17 00:00:00 2001 From: franchioping Date: Mon, 2 Mar 2026 16:09:30 +0000 Subject: [PATCH] created acceleration controller. not implemented yet. forgot files --- src/config.rs | 2 ++ src/drone/input.rs | 14 +++++++++++--- src/drone/stacked/modules.rs | 11 +++++++---- .../stacked/modules/{rate.rs => angular_rate.rs} | 0 src/drone/stacked/modules/{rot.rs => rotation.rs} | 0 5 files changed, 20 insertions(+), 7 deletions(-) rename src/drone/stacked/modules/{rate.rs => angular_rate.rs} (100%) rename src/drone/stacked/modules/{rot.rs => rotation.rs} (100%) diff --git a/src/config.rs b/src/config.rs index 6efa92d..a66cb75 100644 --- a/src/config.rs +++ b/src/config.rs @@ -28,6 +28,8 @@ pub struct ControllerStackConfig { /// PID for the rotation (angle → angular rate) layer pub rotation_pid: PidConfig, + pub acceleration_pid: PidConfig, + /// PID for the angular rate (angular rate → torque) layer pub rate_pid: PidConfig, /// Maximum angular rate (rad/s) that joystick input maps to diff --git a/src/drone/input.rs b/src/drone/input.rs index 9ee541a..b0ed180 100644 --- a/src/drone/input.rs +++ b/src/drone/input.rs @@ -19,6 +19,13 @@ pub struct PositionInput { pub alt: f32, } +#[derive(Default, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct AccelerationInput { + pub x: f32, + pub y: f32, + pub z: f32, +} + #[derive(Default, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)] pub struct RotationInput { pub roll: f32, @@ -31,14 +38,16 @@ pub enum ModeInput { #[default] Acro, Rotation, + Acceleration, Navigation, } #[derive(Default, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)] pub struct Input { pub joystick: JoystickInput, - pub position: PositionInput, + pub acceleration: AccelerationInput, pub rotation: RotationInput, + pub position: PositionInput, pub mode: ModeInput, } @@ -112,9 +121,8 @@ impl InputRecording { pub fn add_input_from_keyboard(&mut self, current_time: f32) -> Input { let input = Input { joystick: JoystickInput::from_keyboard(), - position: Default::default(), - rotation: Default::default(), mode: ModeInput::Acro, + ..Default::default() }; let last_input = self.records.last(); match last_input { diff --git a/src/drone/stacked/modules.rs b/src/drone/stacked/modules.rs index 24e302e..f22e9d8 100644 --- a/src/drone/stacked/modules.rs +++ b/src/drone/stacked/modules.rs @@ -2,11 +2,11 @@ use crate::config::PidConfig; use crate::drone::stacked::DroneState; use nalgebra as na; -pub mod rate; -pub mod rot; +pub mod angular_rate; +pub mod rotation; -pub use rate::AngularRateController; -pub use rot::RotationController; +pub use angular_rate::AngularRateController; +pub use rotation::RotationController; pub trait ControllerModule { type Input: Clone + Default; @@ -61,6 +61,9 @@ pub struct Position(pub na::Vector3); // meters #[derive(Clone, Copy, Debug, Default)] pub struct Velocity(pub na::Vector3); // m/s +#[derive(Clone, Copy, Debug, Default)] +pub struct Acceleration(pub na::Vector3); // m/s + #[derive(Clone, Copy, Debug, Default)] pub struct Rotation(pub na::Vector3); // radians diff --git a/src/drone/stacked/modules/rate.rs b/src/drone/stacked/modules/angular_rate.rs similarity index 100% rename from src/drone/stacked/modules/rate.rs rename to src/drone/stacked/modules/angular_rate.rs diff --git a/src/drone/stacked/modules/rot.rs b/src/drone/stacked/modules/rotation.rs similarity index 100% rename from src/drone/stacked/modules/rot.rs rename to src/drone/stacked/modules/rotation.rs