2025-12-14 22:04:04 +00:00
|
|
|
use rapier3d::prelude::*;
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, serde::Deserialize)]
|
|
|
|
|
pub struct SimulationConfig {
|
|
|
|
|
pub tickrate: f32,
|
|
|
|
|
pub drone_tick_rate: u64,
|
|
|
|
|
|
|
|
|
|
// PID
|
|
|
|
|
pub target_rate: f32,
|
|
|
|
|
pub proportional_multiplier: [f32; 3],
|
|
|
|
|
pub integral_multiplier: [f32; 3],
|
|
|
|
|
pub diferential_multiplier: [f32; 3],
|
|
|
|
|
|
|
|
|
|
// Motors
|
|
|
|
|
pub max_thrust: f32,
|
|
|
|
|
pub max_torque: f32,
|
|
|
|
|
|
2026-02-04 17:54:41 +00:00
|
|
|
#[serde(default)]
|
|
|
|
|
pub time_constant: f32,
|
|
|
|
|
|
2025-12-14 22:04:04 +00:00
|
|
|
// Drone
|
|
|
|
|
pub mass: f32,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl SimulationConfig {
|
|
|
|
|
pub fn proportional(&self) -> Vector<f32> {
|
|
|
|
|
vector![
|
|
|
|
|
self.proportional_multiplier[0],
|
|
|
|
|
self.proportional_multiplier[1],
|
|
|
|
|
self.proportional_multiplier[2]
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn integral(&self) -> Vector<f32> {
|
|
|
|
|
vector![
|
|
|
|
|
self.integral_multiplier[0],
|
|
|
|
|
self.integral_multiplier[1],
|
|
|
|
|
self.integral_multiplier[2]
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn diferential(&self) -> Vector<f32> {
|
|
|
|
|
vector![
|
|
|
|
|
self.diferential_multiplier[0],
|
|
|
|
|
self.diferential_multiplier[1],
|
|
|
|
|
self.diferential_multiplier[2]
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|