mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-18 03:52:11 +01:00
Track the output gain instead of amplitude so the measured values are
consistent if the settings are changed afterwards.
This commit is contained in:
parent
5c00451c9e
commit
7ea14ecc22
@ -254,16 +254,13 @@ static void update_stabilization_settings()
|
||||
const float gain_ratio_p = 1.0f / 5.0f;
|
||||
const float zero_ratio_p = 1.0f / 5.0f;
|
||||
|
||||
float input = relaySettings.Amplitude * 4.0f / M_PI; // amplitude of input (fundamental component of fourier series for the square wave)
|
||||
|
||||
// For now just run over roll and pitch
|
||||
for (uint i = 0; i < 2; i++) {
|
||||
float output = relayTuning.Amplitude[i]; // amplitude of sinusoidal oscillation in output
|
||||
float wu = 1000.0f * 2 * M_PI / relayTuning.Period[i]; // ultimate freq = output osc freq (rad/s)
|
||||
|
||||
float wc = wu * gain_ratio_r; // target openloop crossover frequency (rad/s)
|
||||
float zc = wc * zero_ratio_r; // controller zero location (rad/s)
|
||||
float kpu = input / output; // ultimate gain, i.e. the proportional gain for instablity
|
||||
float kpu = 4.0f / M_PI / relayTuning.Gain[i]; // ultimate gain, i.e. the proportional gain for instablity
|
||||
float kp = kpu * gain_ratio_r; // proportional gain
|
||||
float ki = zc * kp; // integral gain
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<object name="RelayTuning" singleinstance="true" settings="false">
|
||||
<description>The input to the relay tuning.</description>
|
||||
<field name="Period" units="ms" type="float" elementnames="Roll,Pitch,Yaw"/>
|
||||
<field name="Amplitude" units="deg/s" type="float" elementnames="Roll,Pitch,Yaw"/>
|
||||
<field name="Gain" units="(deg/s)/output" type="float" elementnames="Roll,Pitch,Yaw"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="periodic" period="1000"/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user