1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-16 08:29:15 +01:00

Merged in f5soh/librepilot/laurent/LP-44_Free_memory_CC3D (pull request #40)

LP-44 Save RAM
This commit is contained in:
Alessio Morale 2015-09-04 09:47:33 +02:00
commit 1f09d36638
14 changed files with 86 additions and 62 deletions

View File

@ -68,7 +68,7 @@
// safe band to allow a bit of calibration error or trim offset (in microseconds) // safe band to allow a bit of calibration error or trim offset (in microseconds)
#define CONNECTION_OFFSET 250 #define CONNECTION_OFFSET 250
#define ASSISTEDCONTROL_DEADBAND_MINIMUM 0.02f // minimum value for a well bahaved Tx. #define ASSISTEDCONTROL_DEADBAND_MINIMUM 2 // minimum value for a well bahaved Tx, in percent.
// Private types // Private types
@ -87,7 +87,7 @@ static void receiverTask(void *parameters);
static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutral); static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutral);
static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time); static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time);
static bool validInputRange(int16_t min, int16_t max, uint16_t value); static bool validInputRange(int16_t min, int16_t max, uint16_t value);
static void applyDeadband(float *value, float deadband); static void applyDeadband(float *value, uint8_t deadband);
static void SettingsUpdatedCb(UAVObjEvent *ev); static void SettingsUpdatedCb(UAVObjEvent *ev);
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES #ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
@ -95,7 +95,7 @@ static uint8_t isAssistedFlightMode(uint8_t position);
#endif #endif
#ifdef USE_INPUT_LPF #ifdef USE_INPUT_LPF
static void applyLPF(float *value, ManualControlSettingsResponseTimeElem channel, ManualControlSettingsResponseTimeData *responseTime, float deadband, float dT); static void applyLPF(float *value, ManualControlSettingsResponseTimeElem channel, ManualControlSettingsResponseTimeData *responseTime, uint8_t deadband, float dT);
#endif #endif
#define RCVR_ACTIVITY_MONITOR_CHANNELS_PER_GROUP 12 #define RCVR_ACTIVITY_MONITOR_CHANNELS_PER_GROUP 12
@ -450,7 +450,7 @@ static void receiverTask(__attribute__((unused)) void *parameters)
cmd.FlightModeSwitchPosition = settings.FlightModeNumber - 1; cmd.FlightModeSwitchPosition = settings.FlightModeNumber - 1;
} }
float deadband_checked = settings.Deadband; uint8_t deadband_checked = settings.Deadband;
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES #ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
// AssistedControl must have deadband set for pitch/roll hence // AssistedControl must have deadband set for pitch/roll hence
// we default to a higher value for badly behaved TXs and also enforce a minimum value // we default to a higher value for badly behaved TXs and also enforce a minimum value
@ -470,7 +470,7 @@ static void receiverTask(__attribute__((unused)) void *parameters)
#endif // PIOS_EXCLUDE_ADVANCED_FEATURES #endif // PIOS_EXCLUDE_ADVANCED_FEATURES
// Apply deadband for Roll/Pitch/Yaw stick inputs // Apply deadband for Roll/Pitch/Yaw stick inputs
if (deadband_checked > 0.0f) { if (deadband_checked > 0) {
applyDeadband(&cmd.Roll, deadband_checked); applyDeadband(&cmd.Roll, deadband_checked);
applyDeadband(&cmd.Pitch, deadband_checked); applyDeadband(&cmd.Pitch, deadband_checked);
applyDeadband(&cmd.Yaw, deadband_checked); applyDeadband(&cmd.Yaw, deadband_checked);
@ -494,7 +494,7 @@ static void receiverTask(__attribute__((unused)) void *parameters)
&& cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != (uint16_t)PIOS_RCVR_NODRIVER && cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != (uint16_t)PIOS_RCVR_NODRIVER
&& cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != (uint16_t)PIOS_RCVR_TIMEOUT) { && cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != (uint16_t)PIOS_RCVR_TIMEOUT) {
cmd.Collective = scaledChannel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE]; cmd.Collective = scaledChannel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE];
if (settings.Deadband > 0.0f) { if (settings.Deadband > 0) {
applyDeadband(&cmd.Collective, settings.Deadband); applyDeadband(&cmd.Collective, settings.Deadband);
} }
#ifdef USE_INPUT_LPF #ifdef USE_INPUT_LPF
@ -790,14 +790,16 @@ bool validInputRange(int16_t min, int16_t max, uint16_t value)
/** /**
* @brief Apply deadband to Roll/Pitch/Yaw channels * @brief Apply deadband to Roll/Pitch/Yaw channels
*/ */
static void applyDeadband(float *value, float deadband) static void applyDeadband(float *value, uint8_t deadband)
{ {
if (fabsf(*value) < deadband) { float floatDeadband = ((float)deadband) * 0.01f;
if (fabsf(*value) < floatDeadband) {
*value = 0.0f; *value = 0.0f;
} else if (*value > 0.0f) { } else if (*value > 0.0f) {
*value = (*value - deadband) / (1.0f - deadband); *value = (*value - floatDeadband) / (1.0f - floatDeadband);
} else { } else {
*value = (*value + deadband) / (1.0f - deadband); *value = (*value + floatDeadband) / (1.0f - floatDeadband);
} }
} }
@ -805,16 +807,17 @@ static void applyDeadband(float *value, float deadband)
/** /**
* @brief Apply Low Pass Filter to Throttle/Roll/Pitch/Yaw or Accessory channel * @brief Apply Low Pass Filter to Throttle/Roll/Pitch/Yaw or Accessory channel
*/ */
static void applyLPF(float *value, ManualControlSettingsResponseTimeElem channel, ManualControlSettingsResponseTimeData *responseTime, float deadband, float dT) static void applyLPF(float *value, ManualControlSettingsResponseTimeElem channel, ManualControlSettingsResponseTimeData *responseTime, uint8_t deadband, float dT)
{ {
float rt = (float)ManualControlSettingsResponseTimeToArray((*responseTime))[channel]; float rt = (float)ManualControlSettingsResponseTimeToArray((*responseTime))[channel];
if (rt > 0.0f) { if (rt > 0.0f) {
inputFiltered[channel] = ((rt * inputFiltered[channel]) + (dT * (*value))) / (rt + dT); inputFiltered[channel] = ((rt * inputFiltered[channel]) + (dT * (*value))) / (rt + dT);
float floatDeadband = ((float)deadband) * 0.01f;
// avoid a long tail of non-zero data. if we have deadband, once the filtered result reduces to 1/10th // avoid a long tail of non-zero data. if we have deadband, once the filtered result reduces to 1/10th
// of deadband revert to 0. We downstream rely on this to know when sticks are centered. // of deadband revert to 0. We downstream rely on this to know when sticks are centered.
if (deadband > 0.0f && fabsf(inputFiltered[channel]) < deadband / 10.0f) { if (floatDeadband > 0.0f && fabsf(inputFiltered[channel]) < floatDeadband * 0.1f) {
inputFiltered[channel] = 0.0f; inputFiltered[channel] = 0.0f;
} }
*value = inputFiltered[channel]; *value = inputFiltered[channel];

View File

@ -45,6 +45,8 @@ typedef struct {
StabilizationSettingsData settings; StabilizationSettingsData settings;
StabilizationBankData stabBank; StabilizationBankData stabBank;
float gyro_alpha; float gyro_alpha;
float floatThrustPIDScaleCurve[STABILIZATIONBANK_THRUSTPIDSCALECURVE_NUMELEM];
float acroInsanityFactors[STABILIZATIONBANK_ACROINSANITYFACTOR_NUMELEM];
struct { struct {
float min_thrust; float min_thrust;
float max_thrust; float max_thrust;

View File

@ -152,11 +152,11 @@ static pid_scaler create_pid_scaler(int axis)
const pid_curve_scaler curve_scaler = { const pid_curve_scaler curve_scaler = {
.x = get_pid_scale_source_value(), .x = get_pid_scale_source_value(),
.points = { .points = {
{ 0.00f, stabSettings.stabBank.ThrustPIDScaleCurve[0] }, { 0.00f, stabSettings.floatThrustPIDScaleCurve[0] },
{ 0.25f, stabSettings.stabBank.ThrustPIDScaleCurve[1] }, { 0.25f, stabSettings.floatThrustPIDScaleCurve[1] },
{ 0.50f, stabSettings.stabBank.ThrustPIDScaleCurve[2] }, { 0.50f, stabSettings.floatThrustPIDScaleCurve[2] },
{ 0.75f, stabSettings.stabBank.ThrustPIDScaleCurve[3] }, { 0.75f, stabSettings.floatThrustPIDScaleCurve[3] },
{ 1.00f, stabSettings.stabBank.ThrustPIDScaleCurve[4] } { 1.00f, stabSettings.floatThrustPIDScaleCurve[4] }
} }
}; };
@ -302,15 +302,11 @@ static void stabilizationInnerloopTask()
-StabilizationBankMaximumRateToArray(stabSettings.stabBank.MaximumRate)[t], -StabilizationBankMaximumRateToArray(stabSettings.stabBank.MaximumRate)[t],
StabilizationBankMaximumRateToArray(stabSettings.stabBank.MaximumRate)[t] StabilizationBankMaximumRateToArray(stabSettings.stabBank.MaximumRate)[t]
); );
const float acroFactors[] = {
stabSettings.stabBank.AcroInsanityFactor.Roll,
stabSettings.stabBank.AcroInsanityFactor.Pitch,
stabSettings.stabBank.AcroInsanityFactor.Yaw
};
pid_scaler ascaler = create_pid_scaler(t); pid_scaler ascaler = create_pid_scaler(t);
ascaler.i *= boundf(1.0f - (1.5f * fabsf(stickinput[t])), 0.0f, 1.0f); // this prevents Integral from getting too high while controlled manually ascaler.i *= boundf(1.0f - (1.5f * fabsf(stickinput[t])), 0.0f, 1.0f); // this prevents Integral from getting too high while controlled manually
float arate = pid_apply_setpoint(&stabSettings.innerPids[t], &ascaler, rate[t], gyro_filtered[t], dT); float arate = pid_apply_setpoint(&stabSettings.innerPids[t], &ascaler, rate[t], gyro_filtered[t], dT);
float factor = fabsf(stickinput[t]) * acroFactors[t]; float factor = fabsf(stickinput[t]) * stabSettings.acroInsanityFactors[t];
actuatorDesiredAxis[t] = factor * stickinput[t] + (1.0f - factor) * arate; actuatorDesiredAxis[t] = factor * stickinput[t] + (1.0f - factor) * arate;
} }
break; break;

View File

@ -381,6 +381,13 @@ static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
stabSettings.cruiseControl.power_trim = stabSettings.settings.CruiseControlPowerTrim / 100.0f; stabSettings.cruiseControl.power_trim = stabSettings.settings.CruiseControlPowerTrim / 100.0f;
stabSettings.cruiseControl.half_power_delay = stabSettings.settings.CruiseControlPowerDelayComp / 2.0f; stabSettings.cruiseControl.half_power_delay = stabSettings.settings.CruiseControlPowerDelayComp / 2.0f;
stabSettings.cruiseControl.max_power_factor_angle = RAD2DEG(acosf(1.0f / stabSettings.settings.CruiseControlMaxPowerFactor)); stabSettings.cruiseControl.max_power_factor_angle = RAD2DEG(acosf(1.0f / stabSettings.settings.CruiseControlMaxPowerFactor));
for (int i = 0; i < STABILIZATIONSETTINGSBANK1_THRUSTPIDSCALECURVE_NUMELEM; i++) {
stabSettings.floatThrustPIDScaleCurve[i] = (float)(stabSettings.stabBank.ThrustPIDScaleCurve[i]) * 0.01f;
}
stabSettings.acroInsanityFactors[0] = (float)(stabSettings.stabBank.AcroInsanityFactor.Roll) * 0.01f;
stabSettings.acroInsanityFactors[1] = (float)(stabSettings.stabBank.AcroInsanityFactor.Pitch) * 0.01f;
stabSettings.acroInsanityFactors[2] = (float)(stabSettings.stabBank.AcroInsanityFactor.Yaw) * 0.01f;
} }
/** /**

View File

@ -88,6 +88,7 @@
// Private functions // Private functions
static void updatePIDs(UAVObjEvent *ev); static void updatePIDs(UAVObjEvent *ev);
static uint8_t update(float *var, float val); static uint8_t update(float *var, float val);
static uint8_t updateUint16(uint16_t *var, float val);
static uint8_t updateUint8(uint8_t *var, float val); static uint8_t updateUint8(uint8_t *var, float val);
static uint8_t updateInt8(int8_t *var, float val); static uint8_t updateInt8(int8_t *var, float val);
static float scale(float val, float inMin, float inMax, float outMin, float outMax); static float scale(float val, float inMin, float inMax, float outMin, float outMax);
@ -273,7 +274,7 @@ static void updatePIDs(UAVObjEvent *ev)
needsUpdateBank |= update(&bank.RollRatePID.ILimit, value); needsUpdateBank |= update(&bank.RollRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLRATERESP: case TXPIDSETTINGS_PIDS_ROLLRATERESP:
needsUpdateBank |= update(&bank.ManualRate.Roll, value); needsUpdateBank |= updateUint16(&bank.ManualRate.Roll, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLATTITUDEKP: case TXPIDSETTINGS_PIDS_ROLLATTITUDEKP:
needsUpdateBank |= update(&bank.RollPI.Kp, value); needsUpdateBank |= update(&bank.RollPI.Kp, value);
@ -300,7 +301,7 @@ static void updatePIDs(UAVObjEvent *ev)
needsUpdateBank |= update(&bank.PitchRatePID.ILimit, value); needsUpdateBank |= update(&bank.PitchRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHRATERESP: case TXPIDSETTINGS_PIDS_PITCHRATERESP:
needsUpdateBank |= update(&bank.ManualRate.Pitch, value); needsUpdateBank |= updateUint16(&bank.ManualRate.Pitch, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHATTITUDEKP: case TXPIDSETTINGS_PIDS_PITCHATTITUDEKP:
needsUpdateBank |= update(&bank.PitchPI.Kp, value); needsUpdateBank |= update(&bank.PitchPI.Kp, value);
@ -331,8 +332,8 @@ static void updatePIDs(UAVObjEvent *ev)
needsUpdateBank |= update(&bank.PitchRatePID.ILimit, value); needsUpdateBank |= update(&bank.PitchRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHRATERESP: case TXPIDSETTINGS_PIDS_ROLLPITCHRATERESP:
needsUpdateBank |= update(&bank.ManualRate.Roll, value); needsUpdateBank |= updateUint16(&bank.ManualRate.Roll, value);
needsUpdateBank |= update(&bank.ManualRate.Pitch, value); needsUpdateBank |= updateUint16(&bank.ManualRate.Pitch, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEKP: case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEKP:
needsUpdateBank |= update(&bank.RollPI.Kp, value); needsUpdateBank |= update(&bank.RollPI.Kp, value);
@ -363,7 +364,7 @@ static void updatePIDs(UAVObjEvent *ev)
needsUpdateBank |= update(&bank.YawRatePID.ILimit, value); needsUpdateBank |= update(&bank.YawRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWRATERESP: case TXPIDSETTINGS_PIDS_YAWRATERESP:
needsUpdateBank |= update(&bank.ManualRate.Yaw, value); needsUpdateBank |= updateUint16(&bank.ManualRate.Yaw, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWATTITUDEKP: case TXPIDSETTINGS_PIDS_YAWATTITUDEKP:
needsUpdateBank |= update(&bank.YawPI.Kp, value); needsUpdateBank |= update(&bank.YawPI.Kp, value);
@ -394,14 +395,14 @@ static void updatePIDs(UAVObjEvent *ev)
needsUpdateStab |= update(&stab.GyroTau, value); needsUpdateStab |= update(&stab.GyroTau, value);
break; break;
case TXPIDSETTINGS_PIDS_ACROROLLFACTOR: case TXPIDSETTINGS_PIDS_ACROROLLFACTOR:
needsUpdateBank |= update(&bank.AcroInsanityFactor.Roll, value); needsUpdateBank |= updateUint8(&bank.AcroInsanityFactor.Roll, value);
break; break;
case TXPIDSETTINGS_PIDS_ACROPITCHFACTOR: case TXPIDSETTINGS_PIDS_ACROPITCHFACTOR:
needsUpdateBank |= update(&bank.AcroInsanityFactor.Pitch, value); needsUpdateBank |= updateUint8(&bank.AcroInsanityFactor.Pitch, value);
break; break;
case TXPIDSETTINGS_PIDS_ACROROLLPITCHFACTOR: case TXPIDSETTINGS_PIDS_ACROROLLPITCHFACTOR:
needsUpdateBank |= update(&bank.AcroInsanityFactor.Roll, value); needsUpdateBank |= updateUint8(&bank.AcroInsanityFactor.Roll, value);
needsUpdateBank |= update(&bank.AcroInsanityFactor.Pitch, value); needsUpdateBank |= updateUint8(&bank.AcroInsanityFactor.Pitch, value);
break; break;
case TXPIDSETTINGS_PIDS_ACCELTAU: case TXPIDSETTINGS_PIDS_ACCELTAU:
needsUpdateAtt |= update(&att.AccelTau, value); needsUpdateAtt |= update(&att.AccelTau, value);
@ -534,6 +535,21 @@ static uint8_t update(float *var, float val)
return 0; return 0;
} }
/**
* Updates var using val if needed.
* \returns 1 if updated, 0 otherwise
*/
static uint8_t updateUint16(uint16_t *var, float val)
{
uint16_t roundedVal = (uint16_t)roundf(val);
if (*var != roundedVal) {
*var = roundedVal;
return 1;
}
return 0;
}
/** /**
* Updates var using val if needed. * Updates var using val if needed.
* \returns 1 if updated, 0 otherwise * \returns 1 if updated, 0 otherwise

View File

@ -155,8 +155,8 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
++index; ++index;
} }
addWidgetBinding("ManualControlSettings", "Deadband", ui->deadband, 0, 0.01f); addWidgetBinding("ManualControlSettings", "Deadband", ui->deadband, 0, 1);
addWidgetBinding("ManualControlSettings", "DeadbandAssistedControl", ui->assistedControlDeadband, 0, 0.01f); addWidgetBinding("ManualControlSettings", "DeadbandAssistedControl", ui->assistedControlDeadband, 0, 1);
connect(ui->configurationWizard, SIGNAL(clicked()), this, SLOT(goToWizard())); connect(ui->configurationWizard, SIGNAL(clicked()), this, SLOT(goToWizard()));
connect(ui->stackedWidget, SIGNAL(currentChanged(int)), this, SLOT(disableWizardButton(int))); connect(ui->stackedWidget, SIGNAL(currentChanged(int)), this, SLOT(disableWizardButton(int)));

View File

@ -265,7 +265,7 @@ void ConfigStabilizationWidget::updateThrottleCurveFromObject()
QList<double> curve; QList<double> curve;
for (quint32 i = 0; i < field->getNumElements(); i++) { for (quint32 i = 0; i < field->getNumElements(); i++) {
curve.append(field->getValue(i).toDouble()); curve.append(field->getValue(i).toDouble() / 100);
} }
ui->thrustPIDScalingCurve->setCurve(&curve); ui->thrustPIDScalingCurve->setCurve(&curve);
@ -290,7 +290,7 @@ void ConfigStabilizationWidget::updateObjectFromThrottleCurve()
QList<double> curve = ui->thrustPIDScalingCurve->getCurve(); QList<double> curve = ui->thrustPIDScalingCurve->getCurve();
for (quint32 i = 0; i < field->getNumElements(); i++) { for (quint32 i = 0; i < field->getNumElements(); i++) {
field->setValue(curve.at(i), i); field->setValue(curve.at(i) * 100, i);
} }
field = stabBank->getField("EnableThrustPIDScaling"); field = stabBank->getField("EnableThrustPIDScaling");
@ -361,7 +361,7 @@ void ConfigStabilizationWidget::resetThrottleCurveToDefault()
QList<double> curve; QList<double> curve;
for (quint32 i = 0; i < field->getNumElements(); i++) { for (quint32 i = 0; i < field->getNumElements(); i++) {
curve.append(field->getValue(i).toDouble()); curve.append(field->getValue(i).toDouble() / 100);
} }
ui->thrustPIDScalingCurve->setCurve(&curve); ui->thrustPIDScalingCurve->setCurve(&curve);

View File

@ -224,13 +224,13 @@
<string>Stick deadband in percents of full range (0-10), zero to disable</string> <string>Stick deadband in percents of full range (0-10), zero to disable</string>
</property> </property>
<property name="decimals"> <property name="decimals">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<double>10.000000000000000</double> <double>10.000000000000000</double>
</property> </property>
<property name="singleStep"> <property name="singleStep">
<double>0.100000000000000</double> <double>1.000000000000000</double>
</property> </property>
</widget> </widget>
</item> </item>
@ -247,7 +247,7 @@
<string>Assisted Control stick deadband in percents of full range (2-12) for use with GPSAssist. This can not be disabled.</string> <string>Assisted Control stick deadband in percents of full range (2-12) for use with GPSAssist. This can not be disabled.</string>
</property> </property>
<property name="decimals"> <property name="decimals">
<number>1</number> <number>0</number>
</property> </property>
<property name="minimum"> <property name="minimum">
<double>2.000000000000000</double> <double>2.000000000000000</double>

View File

@ -299,7 +299,7 @@ margin-top: -1px;
<stringlist> <stringlist>
<string>objname:StabilizationSettingsBankX</string> <string>objname:StabilizationSettingsBankX</string>
<string>fieldname:AcroInsanityFactor</string> <string>fieldname:AcroInsanityFactor</string>
<string>scale:0.01</string> <string>scale:1</string>
<string>buttongroup:77</string> <string>buttongroup:77</string>
<string>element:Roll</string> <string>element:Roll</string>
</stringlist> </stringlist>
@ -333,7 +333,7 @@ margin-top: -1px;
<stringlist> <stringlist>
<string>objname:StabilizationSettingsBankX</string> <string>objname:StabilizationSettingsBankX</string>
<string>fieldname:AcroInsanityFactor</string> <string>fieldname:AcroInsanityFactor</string>
<string>scale:0.01</string> <string>scale:1</string>
<string>buttongroup:77</string> <string>buttongroup:77</string>
<string>element:Roll</string> <string>element:Roll</string>
</stringlist> </stringlist>
@ -398,7 +398,7 @@ margin-top: -1px;
<stringlist> <stringlist>
<string>objname:StabilizationSettingsBankX</string> <string>objname:StabilizationSettingsBankX</string>
<string>fieldname:AcroInsanityFactor</string> <string>fieldname:AcroInsanityFactor</string>
<string>scale:0.01</string> <string>scale:1</string>
<string>buttongroup:77</string> <string>buttongroup:77</string>
<string>element:Pitch</string> <string>element:Pitch</string>
</stringlist> </stringlist>
@ -432,7 +432,7 @@ margin-top: -1px;
<stringlist> <stringlist>
<string>objname:StabilizationSettingsBankX</string> <string>objname:StabilizationSettingsBankX</string>
<string>fieldname:AcroInsanityFactor</string> <string>fieldname:AcroInsanityFactor</string>
<string>scale:0.01</string> <string>scale:1</string>
<string>buttongroup:77</string> <string>buttongroup:77</string>
<string>element:Pitch</string> <string>element:Pitch</string>
</stringlist> </stringlist>

View File

@ -15,9 +15,9 @@
<field name="ResponseTime" units="ms" type="uint16" defaultvalue="0" <field name="ResponseTime" units="ms" type="uint16" defaultvalue="0"
elementnames="Roll,Pitch,Yaw,Collective,Accessory0,Accessory1,Accessory2"/> elementnames="Roll,Pitch,Yaw,Collective,Accessory0,Accessory1,Accessory2"/>
<field name="Deadband" units="%" type="float" elements="1" defaultvalue="0.02"/> <field name="Deadband" units="%" type="uint8" elements="1" defaultvalue="2"/>
<!-- Note the following deadband is used in AssistedControl. Use of deadband with AssistedControl is not optional and will have a hardcoded minimum. --> <!-- Note the following deadband is used in AssistedControl. Use of deadband with AssistedControl is not optional and will have a hardcoded minimum. -->
<field name="DeadbandAssistedControl" units="%" type="float" elements="1" defaultvalue="0.08" description="Stick deadband used for AssistedControl"/> <field name="DeadbandAssistedControl" units="%" type="uint8" elements="1" defaultvalue="8" description="Stick deadband used for AssistedControl"/>
<!-- Note these options values should be identical to those defined in FlightMode --> <!-- Note these options values should be identical to those defined in FlightMode -->

View File

@ -5,8 +5,8 @@
<field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="42" limits="%BE:0:180"/> <field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="42" limits="%BE:0:180"/>
<field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="42" limits="%BE:0:180"/> <field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="42" limits="%BE:0:180"/>
<field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="42" limits="%BE:0:180"/> <field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="42" limits="%BE:0:180"/>
<field name="ManualRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="150,150,175" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="ManualRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="150,150,175" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="MaximumRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,50" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="MaximumRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,50" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/> <field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/>
<field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/> <field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/>
@ -16,12 +16,12 @@
<field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit"/> <field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit"/>
<field name="AcroInsanityFactor" units="percent" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0.4" limits="%BE:0.0:1.0"/> <field name="AcroInsanityFactor" units="percent" type="uint8" elementnames="Roll,Pitch,Yaw" defaultvalue="40" limits="%BE:0:100"/>
<field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/> <field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
<field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/> <field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
<field name="ThrustPIDScaleCurve" units="percent" type="float" elementnames="0,25,50,75,100" defaultvalue="0.3,0.15,0,-0.15,-0.3"/> <field name="ThrustPIDScaleCurve" units="percent" type="int8" elementnames="0,25,50,75,100" defaultvalue="30,15,0,-15,-30"/>
<field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" /> <field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" />
<field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" /> <field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" />
<field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" /> <field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" />

View File

@ -5,8 +5,8 @@
<field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/> <field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/>
<field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/> <field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/>
<field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35" limits="%BE:0:180"/> <field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35" limits="%BE:0:180"/>
<field name="ManualRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="220,220,220" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="ManualRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="220,220,220" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="MaximumRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="MaximumRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/> <field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/>
<field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/> <field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/>
@ -16,12 +16,12 @@
<field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="AcroInsanityFactor" units="percent" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0.4" limits="%BE:0.0:1.0"/> <field name="AcroInsanityFactor" units="percent" type="uint8" elementnames="Roll,Pitch,Yaw" defaultvalue="40" limits="%BE:0:100"/>
<field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/> <field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
<field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/> <field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
<field name="ThrustPIDScaleCurve" units="percent" type="float" elementnames="0,25,50,75,100" defaultvalue="0.3,0.15,0,-0.15,-0.3"/> <field name="ThrustPIDScaleCurve" units="percent" type="int8" elementnames="0,25,50,75,100" defaultvalue="30,15,0,-15,-30"/>
<field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" /> <field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" />
<field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" /> <field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" />
<field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" /> <field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" />

View File

@ -5,8 +5,8 @@
<field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/> <field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/>
<field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/> <field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/>
<field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35" limits="%BE:0:180"/> <field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35" limits="%BE:0:180"/>
<field name="ManualRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="220,220,220" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="ManualRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="220,220,220" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="MaximumRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="MaximumRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/> <field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/>
<field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/> <field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/>
@ -16,12 +16,12 @@
<field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="AcroInsanityFactor" units="percent" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0.4" limits="%BE:0.0:1.0"/> <field name="AcroInsanityFactor" units="percent" type="uint8" elementnames="Roll,Pitch,Yaw" defaultvalue="40" limits="%BE:0:100"/>
<field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/> <field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
<field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/> <field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
<field name="ThrustPIDScaleCurve" units="percent" type="float" elementnames="0,25,50,75,100" defaultvalue="0.3,0.15,0,-0.15,-0.3"/> <field name="ThrustPIDScaleCurve" units="percent" type="int8" elementnames="0,25,50,75,100" defaultvalue="30,15,0,-15,-30"/>
<field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" /> <field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" />
<field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" /> <field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" />
<field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" /> <field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" />

View File

@ -5,8 +5,8 @@
<field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/> <field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/>
<field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/> <field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="55" limits="%BE:0:180"/>
<field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35" limits="%BE:0:180"/> <field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35" limits="%BE:0:180"/>
<field name="ManualRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="220,220,220" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="ManualRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="220,220,220" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="MaximumRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300" limits="%BE:0:500; %BE:0:500; %BE:0:500"/> <field name="MaximumRate" units="degrees/sec" type="uint16" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300" limits="%BE:0:500; %BE:0:500; %BE:0:500"/>
<field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/> <field name="StickExpo" units="percent" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0" limits="%BE:-100:100; %BE:-100:100; %BE:-100:100"/>
<field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/> <field name="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0030,0.0065,0.000033,0.3" limits="%BE:0:0.01; %BE:0:0.025; ; "/>
@ -16,12 +16,12 @@
<field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/> <field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2.5,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="AcroInsanityFactor" units="percent" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0.4" limits="%BE:0.0:1.0"/> <field name="AcroInsanityFactor" units="percent" type="uint8" elementnames="Roll,Pitch,Yaw" defaultvalue="40" limits="%BE:0:100"/>
<field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/> <field name="EnablePiroComp" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
<field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/> <field name="EnableThrustPIDScaling" units="" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
<field name="ThrustPIDScaleCurve" units="percent" type="float" elementnames="0,25,50,75,100" defaultvalue="0.3,0.15,0,-0.15,-0.3"/> <field name="ThrustPIDScaleCurve" units="percent" type="int8" elementnames="0,25,50,75,100" defaultvalue="30,15,0,-15,-30"/>
<field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" /> <field name="ThrustPIDScaleSource" units="" type="enum" elements="1" options="ManualControlThrottle,StabilizationDesiredThrust,ActuatorDesiredThrust" defaultvalue="ActuatorDesiredThrust" />
<field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" /> <field name="ThrustPIDScaleTarget" units="" type="enum" elements="1" options="PID,PI,PD,ID,P,I,D" defaultvalue="PID" />
<field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" /> <field name="ThrustPIDScaleAxes" units="" type="enum" elements="1" options="Roll Pitch Yaw,Roll Pitch,Roll Yaw,Roll,Pitch Yaw,Pitch,Yaw" defaultvalue="Roll Pitch" />