1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-21 11:54:15 +01:00

Merge branch 'LesNewell/OP-984_PID_banks' into next

This commit is contained in:
Les Newell 2014-01-10 15:24:28 +00:00
commit 8eb2eefec7
17 changed files with 420 additions and 155 deletions

View File

@ -46,7 +46,7 @@
#include "manualcontrolcommand.h" #include "manualcontrolcommand.h"
#include "positionstate.h" #include "positionstate.h"
#include "pathdesired.h" #include "pathdesired.h"
#include "stabilizationsettings.h" #include "stabilizationbank.h"
#include "stabilizationdesired.h" #include "stabilizationdesired.h"
#include "receiveractivity.h" #include "receiveractivity.h"
#include "systemsettings.h" #include "systemsettings.h"
@ -668,8 +668,8 @@ static void updateStabilizationDesired(ManualControlCommandData *cmd, ManualCont
StabilizationDesiredGet(&stabilization); StabilizationDesiredGet(&stabilization);
StabilizationSettingsData stabSettings; StabilizationBankData stabSettings;
StabilizationSettingsGet(&stabSettings); StabilizationBankGet(&stabSettings);
uint8_t *stab_settings; uint8_t *stab_settings;
FlightStatusData flightStatus; FlightStatusData flightStatus;
@ -871,8 +871,8 @@ static void altitudeHoldDesired(ManualControlCommandData *cmd, bool changed)
AltitudeHoldSettingsThrottleRateGet(&throttleRate); AltitudeHoldSettingsThrottleRateGet(&throttleRate);
} }
StabilizationSettingsData stabSettings; StabilizationBankData stabSettings;
StabilizationSettingsGet(&stabSettings); StabilizationBankGet(&stabSettings);
thisSysTime = xTaskGetTickCount(); thisSysTime = xTaskGetTickCount();
dT = ((thisSysTime == lastSysTimeAH) ? 0.001f : (thisSysTime - lastSysTimeAH) * portTICK_RATE_MS * 0.001f); dT = ((thisSysTime == lastSysTimeAH) ? 0.001f : (thisSysTime - lastSysTimeAH) * portTICK_RATE_MS * 0.001f);

View File

@ -35,6 +35,10 @@
#include <pios_struct_helper.h> #include <pios_struct_helper.h>
#include "stabilization.h" #include "stabilization.h"
#include "stabilizationsettings.h" #include "stabilizationsettings.h"
#include "stabilizationbank.h"
#include "stabilizationsettingsbank1.h"
#include "stabilizationsettingsbank2.h"
#include "stabilizationsettingsbank3.h"
#include "actuatordesired.h" #include "actuatordesired.h"
#include "ratedesired.h" #include "ratedesired.h"
#include "relaytuning.h" #include "relaytuning.h"
@ -65,13 +69,15 @@
#if defined(PIOS_STABILIZATION_STACK_SIZE) #if defined(PIOS_STABILIZATION_STACK_SIZE)
#define STACK_SIZE_BYTES PIOS_STABILIZATION_STACK_SIZE #define STACK_SIZE_BYTES PIOS_STABILIZATION_STACK_SIZE
#else #else
#define STACK_SIZE_BYTES 724 #define STACK_SIZE_BYTES 790
#endif #endif
#define TASK_PRIORITY (tskIDLE_PRIORITY + 4) #define TASK_PRIORITY (tskIDLE_PRIORITY + 4)
#define FAILSAFE_TIMEOUT_MS 30 #define FAILSAFE_TIMEOUT_MS 30
enum { PID_RATE_ROLL, PID_RATE_PITCH, PID_RATE_YAW, PID_ROLL, PID_PITCH, PID_YAW, PID_MAX }; enum { PID_RATE_ROLL, PID_RATE_PITCH, PID_RATE_YAW, PID_ROLL, PID_PITCH, PID_YAW, PID_MAX };
enum{RATE_P, RATE_I, RATE_D, RATE_LIMIT, RATE_OFFSET};
enum{ATT_P, ATT_I, ATT_LIMIT, ATT_OFFSET};
// Private variables // Private variables
@ -88,12 +94,15 @@ bool lowThrottleZeroIntegral;
bool lowThrottleZeroAxis[MAX_AXES]; bool lowThrottleZeroAxis[MAX_AXES];
float vbar_decay = 0.991f; float vbar_decay = 0.991f;
struct pid pids[PID_MAX]; struct pid pids[PID_MAX];
int flight_mode = -1;
// Private functions // Private functions
static void stabilizationTask(void *parameters); static void stabilizationTask(void *parameters);
static float bound(float val, float range); static float bound(float val, float range);
static void ZeroPids(void); static void ZeroPids(void);
static void SettingsUpdatedCb(UAVObjEvent *ev); static void SettingsUpdatedCb(UAVObjEvent *ev);
static void BankUpdatedCb(UAVObjEvent *ev);
static void SettingsBankUpdatedCb(UAVObjEvent *ev);
/** /**
* Module initialization * Module initialization
@ -111,6 +120,13 @@ int32_t StabilizationStart()
StabilizationSettingsConnectCallback(SettingsUpdatedCb); StabilizationSettingsConnectCallback(SettingsUpdatedCb);
SettingsUpdatedCb(StabilizationSettingsHandle()); SettingsUpdatedCb(StabilizationSettingsHandle());
StabilizationBankConnectCallback(BankUpdatedCb);
StabilizationSettingsBank1ConnectCallback(SettingsBankUpdatedCb);
StabilizationSettingsBank2ConnectCallback(SettingsBankUpdatedCb);
StabilizationSettingsBank3ConnectCallback(SettingsBankUpdatedCb);
// Start main task // Start main task
xTaskCreate(stabilizationTask, (signed char *)"Stabilization", STACK_SIZE_BYTES / 4, NULL, TASK_PRIORITY, &taskHandle); xTaskCreate(stabilizationTask, (signed char *)"Stabilization", STACK_SIZE_BYTES / 4, NULL, TASK_PRIORITY, &taskHandle);
PIOS_TASK_MONITOR_RegisterTask(TASKINFO_RUNNING_STABILIZATION, taskHandle); PIOS_TASK_MONITOR_RegisterTask(TASKINFO_RUNNING_STABILIZATION, taskHandle);
@ -127,6 +143,10 @@ int32_t StabilizationInitialize()
{ {
// Initialize variables // Initialize variables
StabilizationSettingsInitialize(); StabilizationSettingsInitialize();
StabilizationBankInitialize();
StabilizationSettingsBank1Initialize();
StabilizationSettingsBank2Initialize();
StabilizationSettingsBank3Initialize();
ActuatorDesiredInitialize(); ActuatorDesiredInitialize();
#ifdef DIAG_RATEDESIRED #ifdef DIAG_RATEDESIRED
RateDesiredInitialize(); RateDesiredInitialize();
@ -159,6 +179,8 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
AttitudeStateData attitudeState; AttitudeStateData attitudeState;
GyroStateData gyroStateData; GyroStateData gyroStateData;
FlightStatusData flightStatus; FlightStatusData flightStatus;
StabilizationBankData stabBank;
#ifdef REVOLUTION #ifdef REVOLUTION
AirspeedStateData airspeedState; AirspeedStateData airspeedState;
@ -188,9 +210,16 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
StabilizationDesiredGet(&stabDesired); StabilizationDesiredGet(&stabDesired);
AttitudeStateGet(&attitudeState); AttitudeStateGet(&attitudeState);
GyroStateGet(&gyroStateData); GyroStateGet(&gyroStateData);
StabilizationBankGet(&stabBank);
#ifdef DIAG_RATEDESIRED #ifdef DIAG_RATEDESIRED
RateDesiredGet(&rateDesired); RateDesiredGet(&rateDesired);
#endif #endif
if(flight_mode != flightStatus.FlightMode){
flight_mode = flightStatus.FlightMode;
SettingsBankUpdatedCb(NULL);
}
#ifdef REVOLUTION #ifdef REVOLUTION
float speedScaleFactor; float speedScaleFactor;
// Scale PID coefficients based on current airspeed estimation - needed for fixed wing planes // Scale PID coefficients based on current airspeed estimation - needed for fixed wing planes
@ -288,7 +317,7 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
// Store to rate desired variable for storing to UAVO // Store to rate desired variable for storing to UAVO
rateDesiredAxis[i] = rateDesiredAxis[i] =
bound(attitudeDesiredAxis[i], cast_struct_to_array(settings.ManualRate, settings.ManualRate.Roll)[i]); bound(attitudeDesiredAxis[i], cast_struct_to_array(stabBank.ManualRate, stabBank.ManualRate.Roll)[i]);
// Compute the inner loop // Compute the inner loop
actuatorDesiredAxis[i] = pid_apply_setpoint(&pids[PID_RATE_ROLL + i], speedScaleFactor, rateDesiredAxis[i], gyro_filtered[i], dT); actuatorDesiredAxis[i] = pid_apply_setpoint(&pids[PID_RATE_ROLL + i], speedScaleFactor, rateDesiredAxis[i], gyro_filtered[i], dT);
@ -305,7 +334,7 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
// Compute the outer loop // Compute the outer loop
rateDesiredAxis[i] = pid_apply(&pids[PID_ROLL + i], local_error[i], dT); rateDesiredAxis[i] = pid_apply(&pids[PID_ROLL + i], local_error[i], dT);
rateDesiredAxis[i] = bound(rateDesiredAxis[i], rateDesiredAxis[i] = bound(rateDesiredAxis[i],
cast_struct_to_array(settings.MaximumRate, settings.MaximumRate.Roll)[i]); cast_struct_to_array(stabBank.MaximumRate, stabBank.MaximumRate.Roll)[i]);
// Compute the inner loop // Compute the inner loop
actuatorDesiredAxis[i] = pid_apply_setpoint(&pids[PID_RATE_ROLL + i], speedScaleFactor, rateDesiredAxis[i], gyro_filtered[i], dT); actuatorDesiredAxis[i] = pid_apply_setpoint(&pids[PID_RATE_ROLL + i], speedScaleFactor, rateDesiredAxis[i], gyro_filtered[i], dT);
@ -357,7 +386,7 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
} }
rateDesiredAxis[i] = bound(rateDesiredAxis[i], rateDesiredAxis[i] = bound(rateDesiredAxis[i],
cast_struct_to_array(settings.ManualRate, settings.ManualRate.Roll)[i]); cast_struct_to_array(stabBank.ManualRate, stabBank.ManualRate.Roll)[i]);
actuatorDesiredAxis[i] = pid_apply_setpoint(&pids[PID_RATE_ROLL + i], speedScaleFactor, rateDesiredAxis[i], gyro_filtered[i], dT); actuatorDesiredAxis[i] = pid_apply_setpoint(&pids[PID_RATE_ROLL + i], speedScaleFactor, rateDesiredAxis[i], gyro_filtered[i], dT);
actuatorDesiredAxis[i] = bound(actuatorDesiredAxis[i], 1.0f); actuatorDesiredAxis[i] = bound(actuatorDesiredAxis[i], 1.0f);
@ -367,7 +396,7 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
case STABILIZATIONDESIRED_STABILIZATIONMODE_RELAYRATE: case STABILIZATIONDESIRED_STABILIZATIONMODE_RELAYRATE:
// Store to rate desired variable for storing to UAVO // Store to rate desired variable for storing to UAVO
rateDesiredAxis[i] = bound(attitudeDesiredAxis[i], rateDesiredAxis[i] = bound(attitudeDesiredAxis[i],
cast_struct_to_array(settings.ManualRate, settings.ManualRate.Roll)[i]); cast_struct_to_array(stabBank.ManualRate, stabBank.ManualRate.Roll)[i]);
// Run the relay controller which also estimates the oscillation parameters // Run the relay controller which also estimates the oscillation parameters
stabilization_relay_rate(rateDesiredAxis[i] - gyro_filtered[i], &actuatorDesiredAxis[i], i, reinit); stabilization_relay_rate(rateDesiredAxis[i] - gyro_filtered[i], &actuatorDesiredAxis[i], i, reinit);
@ -383,7 +412,7 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
// Compute the outer loop like attitude mode // Compute the outer loop like attitude mode
rateDesiredAxis[i] = pid_apply(&pids[PID_ROLL + i], local_error[i], dT); rateDesiredAxis[i] = pid_apply(&pids[PID_ROLL + i], local_error[i], dT);
rateDesiredAxis[i] = bound(rateDesiredAxis[i], rateDesiredAxis[i] = bound(rateDesiredAxis[i],
cast_struct_to_array(settings.MaximumRate, settings.MaximumRate.Roll)[i]); cast_struct_to_array(stabBank.MaximumRate, stabBank.MaximumRate.Roll)[i]);
// Run the relay controller which also estimates the oscillation parameters // Run the relay controller which also estimates the oscillation parameters
stabilization_relay_rate(rateDesiredAxis[i] - gyro_filtered[i], &actuatorDesiredAxis[i], i, reinit); stabilization_relay_rate(rateDesiredAxis[i] - gyro_filtered[i], &actuatorDesiredAxis[i], i, reinit);
@ -484,43 +513,125 @@ static float bound(float val, float range)
return val; return val;
} }
static void SettingsBankUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
StabilizationBankData bank, oldBank;
StabilizationBankGet(&oldBank);
if(flight_mode < 0) return;
switch(cast_struct_to_array(settings.FlightModeMap, settings.FlightModeMap.Stabilized1)[flight_mode])
{
case 0:
StabilizationSettingsBank1Get((StabilizationSettingsBank1Data *) &bank);
break;
case 1:
StabilizationSettingsBank2Get((StabilizationSettingsBank2Data *) &bank);
break;
case 2:
StabilizationSettingsBank3Get((StabilizationSettingsBank3Data *) &bank);
break;
default:
memset(&bank, 0, sizeof(StabilizationBankDataPacked));
// return; //bank number is invalid. All we can do is ignore it.
}
//Need to do this to prevent an infinite loop
if(memcmp(&oldBank, &bank, sizeof(StabilizationBankDataPacked)) != 0)
{
StabilizationBankSet(&bank);
}
}
static void BankUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
StabilizationBankData bank;
StabilizationBankGet(&bank);
//this code will be needed if any other modules alter stabilizationbank
/*
StabilizationBankData curBank;
if(flight_mode < 0) return;
switch(cast_struct_to_array(settings.FlightModeMap, settings.FlightModeMap.Stabilized1)[flight_mode])
{
case 0:
StabilizationSettingsBank1Get((StabilizationSettingsBank1Data *) &curBank);
if(memcmp(&curBank, &bank, sizeof(StabilizationBankDataPacked)) != 0)
{
StabilizationSettingsBank1Set((StabilizationSettingsBank1Data *) &bank);
}
break;
case 1:
StabilizationSettingsBank2Get((StabilizationSettingsBank2Data *) &curBank);
if(memcmp(&curBank, &bank, sizeof(StabilizationBankDataPacked)) != 0)
{
StabilizationSettingsBank2Set((StabilizationSettingsBank2Data *) &bank);
}
break;
case 2:
StabilizationSettingsBank3Get((StabilizationSettingsBank3Data *) &curBank);
if(memcmp(&curBank, &bank, sizeof(StabilizationBankDataPacked)) != 0)
{
StabilizationSettingsBank3Set((StabilizationSettingsBank3Data *) &bank);
}
break;
default:
return; //invalid bank number
}
*/
// Set the roll rate PID constants
pid_configure(&pids[PID_RATE_ROLL], bank.RollRatePID.Kp,
bank.RollRatePID.Ki,
bank.RollRatePID.Kd,
bank.RollRatePID.ILimit);
// Set the pitch rate PID constants
pid_configure(&pids[PID_RATE_PITCH], bank.PitchRatePID.Kp,
bank.PitchRatePID.Ki,
bank.PitchRatePID.Kd,
bank.PitchRatePID.ILimit);
// Set the yaw rate PID constants
pid_configure(&pids[PID_RATE_YAW], bank.YawRatePID.Kp,
bank.YawRatePID.Ki,
bank.YawRatePID.Kd,
bank.YawRatePID.ILimit);
// Set the roll attitude PI constants
pid_configure(&pids[PID_ROLL], bank.RollPI.Kp,
bank.RollPI.Ki,
0,
bank.RollPI.ILimit);
// Set the pitch attitude PI constants
pid_configure(&pids[PID_PITCH], bank.PitchPI.Kp,
bank.PitchPI.Ki,
0,
bank.PitchPI.ILimit);
// Set the yaw attitude PI constants
pid_configure(&pids[PID_YAW], bank.YawPI.Kp,
bank.YawPI.Ki,
0,
bank.YawPI.ILimit);
}
static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev) static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{ {
StabilizationSettingsGet(&settings); StabilizationSettingsGet(&settings);
// Set the roll rate PID constants
pid_configure(&pids[PID_RATE_ROLL], settings.RollRatePID.Kp,
settings.RollRatePID.Ki,
pids[PID_RATE_ROLL].d = settings.RollRatePID.Kd,
pids[PID_RATE_ROLL].iLim = settings.RollRatePID.ILimit);
// Set the pitch rate PID constants
pid_configure(&pids[PID_RATE_PITCH], settings.PitchRatePID.Kp,
pids[PID_RATE_PITCH].i = settings.PitchRatePID.Ki,
pids[PID_RATE_PITCH].d = settings.PitchRatePID.Kd,
pids[PID_RATE_PITCH].iLim = settings.PitchRatePID.ILimit);
// Set the yaw rate PID constants
pid_configure(&pids[PID_RATE_YAW], settings.YawRatePID.Kp,
pids[PID_RATE_YAW].i = settings.YawRatePID.Ki,
pids[PID_RATE_YAW].d = settings.YawRatePID.Kd,
pids[PID_RATE_YAW].iLim = settings.YawRatePID.ILimit);
// Set the roll attitude PI constants
pid_configure(&pids[PID_ROLL], settings.RollPI.Kp,
settings.RollPI.Ki, 0,
pids[PID_ROLL].iLim = settings.RollPI.ILimit);
// Set the pitch attitude PI constants
pid_configure(&pids[PID_PITCH], settings.PitchPI.Kp,
pids[PID_PITCH].i = settings.PitchPI.Ki, 0,
settings.PitchPI.ILimit);
// Set the yaw attitude PI constants
pid_configure(&pids[PID_YAW], settings.YawPI.Kp,
settings.YawPI.Ki, 0,
settings.YawPI.ILimit);
// Set up the derivative term // Set up the derivative term
pid_configure_derivative(settings.DerivativeCutoff, settings.DerivativeGamma); pid_configure_derivative(settings.DerivativeCutoff, settings.DerivativeGamma);
@ -554,6 +665,8 @@ static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
// Compute time constant for vbar decay term based on a tau // Compute time constant for vbar decay term based on a tau
vbar_decay = expf(-fakeDt / settings.VbarTau); vbar_decay = expf(-fakeDt / settings.VbarTau);
flight_mode = -1; //force flight mode update
} }

View File

@ -56,6 +56,10 @@
#include "accessorydesired.h" #include "accessorydesired.h"
#include "manualcontrolcommand.h" #include "manualcontrolcommand.h"
#include "stabilizationsettings.h" #include "stabilizationsettings.h"
#include "stabilizationbank.h"
#include "stabilizationsettingsbank1.h"
#include "stabilizationsettingsbank2.h"
#include "stabilizationsettingsbank3.h"
#include "flightstatus.h" #include "flightstatus.h"
#include "hwsettings.h" #include "hwsettings.h"
@ -163,11 +167,30 @@ static void updatePIDs(UAVObjEvent *ev)
return; return;
} }
StabilizationBankData bank;
switch(inst.BankNumber)
{
case 0:
StabilizationSettingsBank1Get((StabilizationSettingsBank1Data *) &bank);
break;
case 1:
StabilizationSettingsBank2Get((StabilizationSettingsBank2Data *) &bank);
break;
case 2:
StabilizationSettingsBank2Get((StabilizationSettingsBank2Data *) &bank);
break;
default:
return;
}
StabilizationSettingsData stab; StabilizationSettingsData stab;
StabilizationSettingsGet(&stab); StabilizationSettingsGet(&stab);
AccessoryDesiredData accessory; AccessoryDesiredData accessory;
uint8_t needsUpdate = 0; uint8_t needsUpdateBank = 0;
uint8_t needsUpdateStab = 0;
// Loop through every enabled instance // Loop through every enabled instance
for (uint8_t i = 0; i < TXPIDSETTINGS_PIDS_NUMELEM; i++) { for (uint8_t i = 0; i < TXPIDSETTINGS_PIDS_NUMELEM; i++) {
@ -192,107 +215,126 @@ static void updatePIDs(UAVObjEvent *ev)
switch (cast_struct_to_array(inst.PIDs, inst.PIDs.Instance1)[i]) { switch (cast_struct_to_array(inst.PIDs, inst.PIDs.Instance1)[i]) {
case TXPIDSETTINGS_PIDS_ROLLRATEKP: case TXPIDSETTINGS_PIDS_ROLLRATEKP:
needsUpdate |= update(&stab.RollRatePID.Kp, value); needsUpdateBank |= update(&bank.RollRatePID.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLRATEKI: case TXPIDSETTINGS_PIDS_ROLLRATEKI:
needsUpdate |= update(&stab.RollRatePID.Ki, value); needsUpdateBank |= update(&bank.RollRatePID.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLRATEKD: case TXPIDSETTINGS_PIDS_ROLLRATEKD:
needsUpdate |= update(&stab.RollRatePID.Kd, value); needsUpdateBank |= update(&bank.RollRatePID.Kd, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLRATEILIMIT: case TXPIDSETTINGS_PIDS_ROLLRATEILIMIT:
needsUpdate |= update(&stab.RollRatePID.ILimit, value); needsUpdateBank |= update(&bank.RollRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLATTITUDEKP: case TXPIDSETTINGS_PIDS_ROLLATTITUDEKP:
needsUpdate |= update(&stab.RollPI.Kp, value); needsUpdateBank |= update(&bank.RollPI.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLATTITUDEKI: case TXPIDSETTINGS_PIDS_ROLLATTITUDEKI:
needsUpdate |= update(&stab.RollPI.Ki, value); needsUpdateBank |= update(&bank.RollPI.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLATTITUDEILIMIT: case TXPIDSETTINGS_PIDS_ROLLATTITUDEILIMIT:
needsUpdate |= update(&stab.RollPI.ILimit, value); needsUpdateBank |= update(&bank.RollPI.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHRATEKP: case TXPIDSETTINGS_PIDS_PITCHRATEKP:
needsUpdate |= update(&stab.PitchRatePID.Kp, value); needsUpdateBank |= update(&bank.PitchRatePID.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHRATEKI: case TXPIDSETTINGS_PIDS_PITCHRATEKI:
needsUpdate |= update(&stab.PitchRatePID.Ki, value); needsUpdateBank |= update(&bank.PitchRatePID.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHRATEKD: case TXPIDSETTINGS_PIDS_PITCHRATEKD:
needsUpdate |= update(&stab.PitchRatePID.Kd, value); needsUpdateBank |= update(&bank.PitchRatePID.Kd, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHRATEILIMIT: case TXPIDSETTINGS_PIDS_PITCHRATEILIMIT:
needsUpdate |= update(&stab.PitchRatePID.ILimit, value); needsUpdateBank |= update(&bank.PitchRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHATTITUDEKP: case TXPIDSETTINGS_PIDS_PITCHATTITUDEKP:
needsUpdate |= update(&stab.PitchPI.Kp, value); needsUpdateBank |= update(&bank.PitchPI.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHATTITUDEKI: case TXPIDSETTINGS_PIDS_PITCHATTITUDEKI:
needsUpdate |= update(&stab.PitchPI.Ki, value); needsUpdateBank |= update(&bank.PitchPI.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_PITCHATTITUDEILIMIT: case TXPIDSETTINGS_PIDS_PITCHATTITUDEILIMIT:
needsUpdate |= update(&stab.PitchPI.ILimit, value); needsUpdateBank |= update(&bank.PitchPI.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHRATEKP: case TXPIDSETTINGS_PIDS_ROLLPITCHRATEKP:
needsUpdate |= update(&stab.RollRatePID.Kp, value); needsUpdateBank |= update(&bank.RollRatePID.Kp, value);
needsUpdate |= update(&stab.PitchRatePID.Kp, value); needsUpdateBank |= update(&bank.PitchRatePID.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHRATEKI: case TXPIDSETTINGS_PIDS_ROLLPITCHRATEKI:
needsUpdate |= update(&stab.RollRatePID.Ki, value); needsUpdateBank |= update(&bank.RollRatePID.Ki, value);
needsUpdate |= update(&stab.PitchRatePID.Ki, value); needsUpdateBank |= update(&bank.PitchRatePID.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHRATEKD: case TXPIDSETTINGS_PIDS_ROLLPITCHRATEKD:
needsUpdate |= update(&stab.RollRatePID.Kd, value); needsUpdateBank |= update(&bank.RollRatePID.Kd, value);
needsUpdate |= update(&stab.PitchRatePID.Kd, value); needsUpdateBank |= update(&bank.PitchRatePID.Kd, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHRATEILIMIT: case TXPIDSETTINGS_PIDS_ROLLPITCHRATEILIMIT:
needsUpdate |= update(&stab.RollRatePID.ILimit, value); needsUpdateBank |= update(&bank.RollRatePID.ILimit, value);
needsUpdate |= update(&stab.PitchRatePID.ILimit, value); needsUpdateBank |= update(&bank.PitchRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEKP: case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEKP:
needsUpdate |= update(&stab.RollPI.Kp, value); needsUpdateBank |= update(&bank.RollPI.Kp, value);
needsUpdate |= update(&stab.PitchPI.Kp, value); needsUpdateBank |= update(&bank.PitchPI.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEKI: case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEKI:
needsUpdate |= update(&stab.RollPI.Ki, value); needsUpdateBank |= update(&bank.RollPI.Ki, value);
needsUpdate |= update(&stab.PitchPI.Ki, value); needsUpdateBank |= update(&bank.PitchPI.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEILIMIT: case TXPIDSETTINGS_PIDS_ROLLPITCHATTITUDEILIMIT:
needsUpdate |= update(&stab.RollPI.ILimit, value); needsUpdateBank |= update(&bank.RollPI.ILimit, value);
needsUpdate |= update(&stab.PitchPI.ILimit, value); needsUpdateBank |= update(&bank.PitchPI.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWRATEKP: case TXPIDSETTINGS_PIDS_YAWRATEKP:
needsUpdate |= update(&stab.YawRatePID.Kp, value); needsUpdateBank |= update(&bank.YawRatePID.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWRATEKI: case TXPIDSETTINGS_PIDS_YAWRATEKI:
needsUpdate |= update(&stab.YawRatePID.Ki, value); needsUpdateBank |= update(&bank.YawRatePID.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWRATEKD: case TXPIDSETTINGS_PIDS_YAWRATEKD:
needsUpdate |= update(&stab.YawRatePID.Kd, value); needsUpdateBank |= update(&bank.YawRatePID.Kd, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWRATEILIMIT: case TXPIDSETTINGS_PIDS_YAWRATEILIMIT:
needsUpdate |= update(&stab.YawRatePID.ILimit, value); needsUpdateBank |= update(&bank.YawRatePID.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWATTITUDEKP: case TXPIDSETTINGS_PIDS_YAWATTITUDEKP:
needsUpdate |= update(&stab.YawPI.Kp, value); needsUpdateBank |= update(&bank.YawPI.Kp, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWATTITUDEKI: case TXPIDSETTINGS_PIDS_YAWATTITUDEKI:
needsUpdate |= update(&stab.YawPI.Ki, value); needsUpdateBank |= update(&bank.YawPI.Ki, value);
break; break;
case TXPIDSETTINGS_PIDS_YAWATTITUDEILIMIT: case TXPIDSETTINGS_PIDS_YAWATTITUDEILIMIT:
needsUpdate |= update(&stab.YawPI.ILimit, value); needsUpdateBank |= update(&bank.YawPI.ILimit, value);
break; break;
case TXPIDSETTINGS_PIDS_GYROTAU: case TXPIDSETTINGS_PIDS_GYROTAU:
needsUpdate |= update(&stab.GyroTau, value); needsUpdateStab |= update(&stab.GyroTau, value);
break; break;
default: default:
PIOS_Assert(0); PIOS_Assert(0);
} }
} }
} }
if (needsUpdate) { if (needsUpdateStab) {
StabilizationSettingsSet(&stab); StabilizationSettingsSet(&stab);
} }
if (needsUpdateBank) {
switch(inst.BankNumber)
{
case 0:
StabilizationSettingsBank1Set((StabilizationSettingsBank1Data *) &bank);
break;
case 1:
StabilizationSettingsBank2Set((StabilizationSettingsBank2Data *) &bank);
break;
case 2:
StabilizationSettingsBank2Set((StabilizationSettingsBank2Data *) &bank);
break;
default:
return;
}
}
} }
/** /**

View File

@ -65,6 +65,7 @@
#include "nedaccel.h" #include "nedaccel.h"
#include "stabilizationdesired.h" #include "stabilizationdesired.h"
#include "stabilizationsettings.h" #include "stabilizationsettings.h"
#include "stabilizationbank.h"
#include "systemsettings.h" #include "systemsettings.h"
#include "velocitydesired.h" #include "velocitydesired.h"
#include "velocitystate.h" #include "velocitystate.h"
@ -575,7 +576,7 @@ static void updateVtolDesiredAttitude(bool yaw_attitude)
StabilizationDesiredData stabDesired; StabilizationDesiredData stabDesired;
AttitudeStateData attitudeState; AttitudeStateData attitudeState;
NedAccelData nedAccel; NedAccelData nedAccel;
StabilizationSettingsData stabSettings; StabilizationBankData stabSettings;
SystemSettingsData systemSettings; SystemSettingsData systemSettings;
float northError; float northError;
@ -593,7 +594,7 @@ static void updateVtolDesiredAttitude(bool yaw_attitude)
StabilizationDesiredGet(&stabDesired); StabilizationDesiredGet(&stabDesired);
VelocityDesiredGet(&velocityDesired); VelocityDesiredGet(&velocityDesired);
AttitudeStateGet(&attitudeState); AttitudeStateGet(&attitudeState);
StabilizationSettingsGet(&stabSettings); StabilizationBankGet(&stabSettings);
NedAccelGet(&nedAccel); NedAccelGet(&nedAccel);
float northVel = 0, eastVel = 0, downVel = 0; float northVel = 0, eastVel = 0, downVel = 0;

View File

@ -84,6 +84,10 @@ ifndef TESTAPP
SRC += $(OPUAVSYNTHDIR)/systemsettings.c SRC += $(OPUAVSYNTHDIR)/systemsettings.c
SRC += $(OPUAVSYNTHDIR)/stabilizationdesired.c SRC += $(OPUAVSYNTHDIR)/stabilizationdesired.c
SRC += $(OPUAVSYNTHDIR)/stabilizationsettings.c SRC += $(OPUAVSYNTHDIR)/stabilizationsettings.c
SRC += $(OPUAVSYNTHDIR)/stabilizationsettingsbank1.c
SRC += $(OPUAVSYNTHDIR)/stabilizationsettingsbank2.c
SRC += $(OPUAVSYNTHDIR)/stabilizationsettingsbank3.c
SRC += $(OPUAVSYNTHDIR)/stabilizationbank.c
SRC += $(OPUAVSYNTHDIR)/actuatorcommand.c SRC += $(OPUAVSYNTHDIR)/actuatorcommand.c
SRC += $(OPUAVSYNTHDIR)/actuatordesired.c SRC += $(OPUAVSYNTHDIR)/actuatordesired.c
SRC += $(OPUAVSYNTHDIR)/actuatorsettings.c SRC += $(OPUAVSYNTHDIR)/actuatorsettings.c

View File

@ -156,7 +156,7 @@
#define PIOS_ACTUATOR_STACK_SIZE 1020 #define PIOS_ACTUATOR_STACK_SIZE 1020
#define PIOS_MANUAL_STACK_SIZE 800 #define PIOS_MANUAL_STACK_SIZE 800
#define PIOS_SYSTEM_STACK_SIZE 660 #define PIOS_SYSTEM_STACK_SIZE 660
#define PIOS_STABILIZATION_STACK_SIZE 524 #define PIOS_STABILIZATION_STACK_SIZE 790
#define PIOS_TELEM_STACK_SIZE 800 #define PIOS_TELEM_STACK_SIZE 800
#define PIOS_EVENTDISPATCHER_STACK_SIZE 130 #define PIOS_EVENTDISPATCHER_STACK_SIZE 130

View File

@ -82,6 +82,10 @@ UAVOBJSRCFILENAMES += revosettings
UAVOBJSRCFILENAMES += sonaraltitude UAVOBJSRCFILENAMES += sonaraltitude
UAVOBJSRCFILENAMES += stabilizationdesired UAVOBJSRCFILENAMES += stabilizationdesired
UAVOBJSRCFILENAMES += stabilizationsettings UAVOBJSRCFILENAMES += stabilizationsettings
UAVOBJSRCFILENAMES += stabilizationsettingsbank1
UAVOBJSRCFILENAMES += stabilizationsettingsbank2
UAVOBJSRCFILENAMES += stabilizationsettingsbank3
UAVOBJSRCFILENAMES += stabilizationbank
UAVOBJSRCFILENAMES += systemalarms UAVOBJSRCFILENAMES += systemalarms
UAVOBJSRCFILENAMES += systemsettings UAVOBJSRCFILENAMES += systemsettings
UAVOBJSRCFILENAMES += systemstats UAVOBJSRCFILENAMES += systemstats

View File

@ -82,6 +82,10 @@ UAVOBJSRCFILENAMES += revosettings
UAVOBJSRCFILENAMES += sonaraltitude UAVOBJSRCFILENAMES += sonaraltitude
UAVOBJSRCFILENAMES += stabilizationdesired UAVOBJSRCFILENAMES += stabilizationdesired
UAVOBJSRCFILENAMES += stabilizationsettings UAVOBJSRCFILENAMES += stabilizationsettings
UAVOBJSRCFILENAMES += stabilizationsettingsbank1
UAVOBJSRCFILENAMES += stabilizationsettingsbank2
UAVOBJSRCFILENAMES += stabilizationsettingsbank3
UAVOBJSRCFILENAMES += stabilizationbank
UAVOBJSRCFILENAMES += systemalarms UAVOBJSRCFILENAMES += systemalarms
UAVOBJSRCFILENAMES += systemsettings UAVOBJSRCFILENAMES += systemsettings
UAVOBJSRCFILENAMES += systemstats UAVOBJSRCFILENAMES += systemstats

View File

@ -82,6 +82,10 @@ UAVOBJSRCFILENAMES += relaytuningsettings
UAVOBJSRCFILENAMES += sonaraltitude UAVOBJSRCFILENAMES += sonaraltitude
UAVOBJSRCFILENAMES += stabilizationdesired UAVOBJSRCFILENAMES += stabilizationdesired
UAVOBJSRCFILENAMES += stabilizationsettings UAVOBJSRCFILENAMES += stabilizationsettings
UAVOBJSRCFILENAMES += stabilizationsettingsbank1
UAVOBJSRCFILENAMES += stabilizationsettingsbank2
UAVOBJSRCFILENAMES += stabilizationsettingsbank3
UAVOBJSRCFILENAMES += stabilizationbank
UAVOBJSRCFILENAMES += systemalarms UAVOBJSRCFILENAMES += systemalarms
UAVOBJSRCFILENAMES += systemsettings UAVOBJSRCFILENAMES += systemsettings
UAVOBJSRCFILENAMES += systemstats UAVOBJSRCFILENAMES += systemstats

View File

@ -1312,7 +1312,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollMax</string> <string>fieldname:RollMax</string>
<string>haslimits:no</string> <string>haslimits:no</string>
<string>scale:1</string> <string>scale:1</string>
@ -1346,7 +1346,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Roll</string> <string>element:Roll</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -1394,7 +1394,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Roll</string> <string>element:Roll</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -2583,7 +2583,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollMax</string> <string>fieldname:RollMax</string>
<string>haslimits:no</string> <string>haslimits:no</string>
<string>scale:1</string> <string>scale:1</string>
@ -2617,7 +2617,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Yaw</string> <string>element:Yaw</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -2668,7 +2668,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Yaw</string> <string>element:Yaw</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -4448,7 +4448,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4487,7 +4487,7 @@ Then lower the value by 5 or so.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4562,7 +4562,7 @@ Then lower the value by 5 or so.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4612,7 +4612,7 @@ Then lower the value by 5 or so.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4651,7 +4651,7 @@ Then lower the value by 5 or so.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4690,7 +4690,7 @@ Then lower the value by 5 or so.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4740,7 +4740,7 @@ Then lower the value by 5 or so.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4798,7 +4798,7 @@ value as the Kp.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4837,7 +4837,7 @@ value as the Kp.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4887,7 +4887,7 @@ value as the Kp.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4937,7 +4937,7 @@ value as the Kp.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -4976,7 +4976,7 @@ value as the Kp.</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:yes</string> <string>haslimits:yes</string>
@ -8349,7 +8349,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollPI</string> <string>fieldname:RollPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>scale:0.1</string> <string>scale:0.1</string>
@ -8384,7 +8384,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollPI</string> <string>fieldname:RollPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>scale:0.1</string> <string>scale:0.1</string>
@ -8434,7 +8434,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchPI</string> <string>fieldname:PitchPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>scale:0.1</string> <string>scale:0.1</string>
@ -8469,7 +8469,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchPI</string> <string>fieldname:PitchPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>scale:0.1</string> <string>scale:0.1</string>
@ -8519,7 +8519,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawPI</string> <string>fieldname:YawPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>scale:0.1</string> <string>scale:0.1</string>
@ -8554,7 +8554,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawPI</string> <string>fieldname:YawPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>scale:0.1</string> <string>scale:0.1</string>
@ -9989,7 +9989,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchMax</string> <string>fieldname:PitchMax</string>
<string>haslimits:no</string> <string>haslimits:no</string>
<string>scale:1</string> <string>scale:1</string>
@ -10072,7 +10072,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:MaximumRate</string> <string>fieldname:MaximumRate</string>
<string>element:Roll</string> <string>element:Roll</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -10141,7 +10141,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Yaw</string> <string>element:Yaw</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -10194,7 +10194,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawMax</string> <string>fieldname:YawMax</string>
<string>haslimits:no</string> <string>haslimits:no</string>
<string>scale:1</string> <string>scale:1</string>
@ -10246,7 +10246,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:MaximumRate</string> <string>fieldname:MaximumRate</string>
<string>element:Pitch</string> <string>element:Pitch</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -11456,7 +11456,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Pitch</string> <string>element:Pitch</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -12075,7 +12075,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:ManualRate</string> <string>fieldname:ManualRate</string>
<string>element:Roll</string> <string>element:Roll</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -12131,7 +12131,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollMax</string> <string>fieldname:RollMax</string>
<string>haslimits:no</string> <string>haslimits:no</string>
<string>scale:1</string> <string>scale:1</string>
@ -12183,7 +12183,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:MaximumRate</string> <string>fieldname:MaximumRate</string>
<string>element:Yaw</string> <string>element:Yaw</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -13352,7 +13352,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Kd</string> <string>element:Kd</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -13971,7 +13971,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -14021,7 +14021,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -14071,7 +14071,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -14121,7 +14121,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:Kd</string> <string>element:Kd</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -15328,7 +15328,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -15394,7 +15394,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -15475,7 +15475,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -15525,7 +15525,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:Kd</string> <string>element:Kd</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -18378,7 +18378,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollPI</string> <string>fieldname:RollPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -18428,7 +18428,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchPI</string> <string>fieldname:PitchPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -18478,7 +18478,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawPI</string> <string>fieldname:YawPI</string>
<string>element:Kp</string> <string>element:Kp</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -18563,7 +18563,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollPI</string> <string>fieldname:RollPI</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -18629,7 +18629,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchPI</string> <string>fieldname:PitchPI</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -18695,7 +18695,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawPI</string> <string>fieldname:YawPI</string>
<string>element:Ki</string> <string>element:Ki</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -21937,7 +21937,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchRatePID</string> <string>fieldname:PitchRatePID</string>
<string>element:ILimit</string> <string>element:ILimit</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -21990,7 +21990,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollRatePID</string> <string>fieldname:RollRatePID</string>
<string>element:ILimit</string> <string>element:ILimit</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -23140,7 +23140,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawPI</string> <string>fieldname:YawPI</string>
<string>element:ILimit</string> <string>element:ILimit</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -23221,7 +23221,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:PitchPI</string> <string>fieldname:PitchPI</string>
<string>element:ILimit</string> <string>element:ILimit</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -23331,7 +23331,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:RollPI</string> <string>fieldname:RollPI</string>
<string>element:ILimit</string> <string>element:ILimit</string>
<string>haslimits:no</string> <string>haslimits:no</string>
@ -23947,7 +23947,7 @@ border-radius: 5;</string>
</property> </property>
<property name="objrelation" stdset="0"> <property name="objrelation" stdset="0">
<stringlist> <stringlist>
<string>objname:StabilizationSettings</string> <string>objname:StabilizationSettingsBank1</string>
<string>fieldname:YawRatePID</string> <string>fieldname:YawRatePID</string>
<string>element:ILimit</string> <string>element:ILimit</string>
<string>haslimits:no</string> <string>haslimits:no</string>

View File

@ -60,6 +60,10 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
$$UAVOBJECT_SYNTHETICS/overosyncsettings.h \ $$UAVOBJECT_SYNTHETICS/overosyncsettings.h \
$$UAVOBJECT_SYNTHETICS/systemsettings.h \ $$UAVOBJECT_SYNTHETICS/systemsettings.h \
$$UAVOBJECT_SYNTHETICS/stabilizationsettings.h \ $$UAVOBJECT_SYNTHETICS/stabilizationsettings.h \
$$UAVOBJECT_SYNTHETICS/stabilizationsettingsbank1.h \
$$UAVOBJECT_SYNTHETICS/stabilizationsettingsbank2.h \
$$UAVOBJECT_SYNTHETICS/stabilizationsettingsbank3.h \
$$UAVOBJECT_SYNTHETICS/stabilizationbank.h \
$$UAVOBJECT_SYNTHETICS/manualcontrolsettings.h \ $$UAVOBJECT_SYNTHETICS/manualcontrolsettings.h \
$$UAVOBJECT_SYNTHETICS/manualcontrolcommand.h \ $$UAVOBJECT_SYNTHETICS/manualcontrolcommand.h \
$$UAVOBJECT_SYNTHETICS/stabilizationdesired.h \ $$UAVOBJECT_SYNTHETICS/stabilizationdesired.h \
@ -151,6 +155,10 @@ SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \
$$UAVOBJECT_SYNTHETICS/overosyncsettings.cpp \ $$UAVOBJECT_SYNTHETICS/overosyncsettings.cpp \
$$UAVOBJECT_SYNTHETICS/systemsettings.cpp \ $$UAVOBJECT_SYNTHETICS/systemsettings.cpp \
$$UAVOBJECT_SYNTHETICS/stabilizationsettings.cpp \ $$UAVOBJECT_SYNTHETICS/stabilizationsettings.cpp \
$$UAVOBJECT_SYNTHETICS/stabilizationsettingsbank1.cpp \
$$UAVOBJECT_SYNTHETICS/stabilizationsettingsbank2.cpp \
$$UAVOBJECT_SYNTHETICS/stabilizationsettingsbank3.cpp \
$$UAVOBJECT_SYNTHETICS/stabilizationbank.cpp \
$$UAVOBJECT_SYNTHETICS/manualcontrolsettings.cpp \ $$UAVOBJECT_SYNTHETICS/manualcontrolsettings.cpp \
$$UAVOBJECT_SYNTHETICS/manualcontrolcommand.cpp \ $$UAVOBJECT_SYNTHETICS/manualcontrolcommand.cpp \
$$UAVOBJECT_SYNTHETICS/stabilizationdesired.cpp \ $$UAVOBJECT_SYNTHETICS/stabilizationdesired.cpp \

View File

@ -0,0 +1,23 @@
<xml>
<object name="StabilizationBank" singleinstance="true" settings="false" category="Control">
<description>Currently selected PID bank</description>
<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="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="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="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="PitchRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="YawRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0035,0.0035,0,0.3" limits="%BE:0:0.01; %BE:0:0.01 ; ; "/>
<field name="RollPI" 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"/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="false" updatemode="manual" period="0"/>
<telemetryflight acked="false" updatemode="periodic" period="1000"/>
<logging updatemode="manual" period="0"/>
</object>
</xml>

View File

@ -1,18 +1,10 @@
<xml> <xml>
<object name="StabilizationSettings" singleinstance="true" settings="true" category="Control"> <object name="StabilizationSettings" singleinstance="true" settings="true" category="Control">
<description>PID settings used by the Stabilization module to combine the @ref AttitudeActual and @ref AttitudeDesired to compute @ref ActuatorDesired</description> <description>PID settings used by the Stabilization module to combine the @ref AttitudeActual and @ref AttitudeDesired to compute @ref ActuatorDesired</description>
<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="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="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="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/> <!-- Note: The number of elements here must match the number of available flight modes -->
<field name="PitchRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/> <field name="FlightModeMap" units="" type="uint8" elementnames="Manual,Stabilized1,Stabilized2,Stabilized3,Autotune,AltitudeHold,AltitudeVario,VelocityControl,PositionHold,ReturnToBase,Land,PathPlanner,POI" defaultvalue="0,0,0,0,0,0,0,0,0,0,0,0,0"/>
<field name="YawRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0035,0.0035,0,0.3" limits="%BE:0:0.01; %BE:0:0.01 ; ; "/>
<field name="RollPI" 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,0,50" limits="%BE:0:10; %BE:0:10; "/>
<field name="VbarSensitivity" units="frac" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0.5,0.5,0.5"/> <field name="VbarSensitivity" units="frac" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0.5,0.5,0.5"/>
<field name="VbarRollPI" units="1/(deg/s)" type="float" elementnames="Kp,Ki" defaultvalue="0.005,0.002"/> <field name="VbarRollPI" units="1/(deg/s)" type="float" elementnames="Kp,Ki" defaultvalue="0.005,0.002"/>

View File

@ -0,0 +1,23 @@
<xml>
<object name="StabilizationSettingsBank1" singleinstance="true" settings="true" category="Control">
<description>Currently selected PID bank</description>
<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="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="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="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="PitchRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="YawRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0035,0.0035,0,0.3" limits="%BE:0:0.01; %BE:0:0.01 ; ; "/>
<field name="RollPI" 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; "/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
<telemetryflight acked="true" updatemode="onchange" period="0"/>
<logging updatemode="manual" period="0"/>
</object>
</xml>

View File

@ -0,0 +1,23 @@
<xml>
<object name="StabilizationSettingsBank2" singleinstance="true" settings="true" category="Control">
<description>Currently selected PID bank</description>
<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="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="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="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="PitchRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="YawRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0035,0.0035,0,0.3" limits="%BE:0:0.01; %BE:0:0.01 ; ; "/>
<field name="RollPI" 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; "/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
<telemetryflight acked="true" updatemode="onchange" period="0"/>
<logging updatemode="manual" period="0"/>
</object>
</xml>

View File

@ -0,0 +1,23 @@
<xml>
<object name="StabilizationSettingsBank3" singleinstance="true" settings="true" category="Control">
<description>Currently selected PID bank</description>
<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="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="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="RollRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="PitchRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.003,0.003,0.00002,0.3" limits="%BE:0:0.01; %BE:0:0.01; ; "/>
<field name="YawRatePID" units="" type="float" elementnames="Kp,Ki,Kd,ILimit" defaultvalue="0.0035,0.0035,0,0.3" limits="%BE:0:0.01; %BE:0:0.01 ; ; "/>
<field name="RollPI" 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; "/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
<telemetryflight acked="true" updatemode="onchange" period="0"/>
<logging updatemode="manual" period="0"/>
</object>
</xml>

View File

@ -2,6 +2,7 @@
<object name="TxPIDSettings" singleinstance="true" settings="true" category="Control"> <object name="TxPIDSettings" singleinstance="true" settings="true" category="Control">
<description>Settings used by @ref TxPID optional module to tune PID settings using R/C transmitter</description> <description>Settings used by @ref TxPID optional module to tune PID settings using R/C transmitter</description>
<field name="UpdateMode" units="option" type="enum" elements="1" options="Never,When Armed,Always" defaultvalue="When Armed"/> <field name="UpdateMode" units="option" type="enum" elements="1" options="Never,When Armed,Always" defaultvalue="When Armed"/>
<field name="BankNumber" units="" type="uint8" elements="1" defaultvalue="0" limits="%BE:0:3"/>
<field name="Inputs" units="channel" type="enum" <field name="Inputs" units="channel" type="enum"
elementnames="Instance1,Instance2,Instance3" elementnames="Instance1,Instance2,Instance3"
options="Throttle,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" options="Throttle,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5"