1 个不稳定版本
0.1.0 | 2024年5月6日 |
---|
#335 在 嵌入式开发
115KB
2K SLoC
自由飞行稳定控制器
此存储库包含dRehmFlight版本1.3(基于Arduino的飞行控制器软件)的PID(比例、积分、微分)控制函数的Rust翻译(no_std,no-alloc)。这些函数用于稳定无人机(UAVs),并且具有少量外部依赖项。
概览
初始翻译保留了原始Arduino实现的架构,以方便熟悉dRehmFlight的人进行轻松验证和比较。目标是保持详细的提交历史记录以记录重构过程。
标记版本v0.0.0包含旧直接翻译、新重构和测试的代码,以及两者的匹配值。请参阅角度、速度和角度2稳定器。测试通过且值匹配。后续提交中仅保留重构的代码。
使用示例
// Angle Stabilizer Example
use free_flight_stabilization::{AngleStabilizer, FlightStabilizer, FlightStabilizerConfig};
let mut config = FlightStabilizerConfig::<f32>::new();
// Set the PID gains for roll, pitch, and yaw.
config.kp_roll = 0.2;
config.ki_roll = 0.3;
config.kd_roll = -0.05;
config.kp_pitch = config.kp_roll;
config.ki_pitch = config.ki_roll;
config.kd_pitch = config.kd_roll;
config.kp_yaw = 0.3;
config.ki_yaw = 0.05;
config.kd_yaw = 0.00015;
// Set the upper limit for the integral term to prevent windup.
config.i_limit = 25.0;
// Set the scale to adjust the PID outputs to the actuator range.
config.scale = 0.01;
// Create the angle stabilizer.
let mut stabilizer = AngleStabilizer::with_config(config);
// Simulated sensor inputs and desired setpoints.
let set_point = (10.0, 0.0, 10.0); // desired roll, pitch, yaw
let imu_attitude = (5.0, 5.0, 0.0); // current roll, pitch, yaw
let gyro_rate = (1.0, -1.0, -1.0); // current roll rate, pitch rate, yaw rate
let dt = 0.01; // time step
let low_throttle = false;
// Perform the control computation.
let (roll_pid, pitch_pid, yaw_pid) =
stabilizer.control(set_point, imu_attitude, gyro_rate, dt, low_throttle);
许可证
dRehmFlight最初在GNU通用公共许可证(GPL)版本3下发布。因此,作为衍生作品的本翻译也以GPL版本3发布。有关更多详细信息,请参阅GPLv3许可证或本存储库中的LICENSE文件。
依赖项
~175KB