mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-05 21:52:10 +01:00
Changed AH to work with absolute instead of relative altitude
This commit is contained in:
parent
aecc8543a5
commit
45ed66414f
@ -174,10 +174,6 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
|||||||
error = 0;
|
error = 0;
|
||||||
velocity = 0;
|
velocity = 0;
|
||||||
running = true;
|
running = true;
|
||||||
|
|
||||||
AltHoldSmoothedData altHold;
|
|
||||||
AltHoldSmoothedGet(&altHold);
|
|
||||||
starting_altitude = altHold.Altitude;
|
|
||||||
} else if (!altitudeHoldFlightMode) {
|
} else if (!altitudeHoldFlightMode) {
|
||||||
running = false;
|
running = false;
|
||||||
lastAltitudeHoldDesiredUpdate = PIOS_DELAY_GetRaw();
|
lastAltitudeHoldDesiredUpdate = PIOS_DELAY_GetRaw();
|
||||||
@ -364,7 +360,7 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute the altitude error
|
// Compute the altitude error
|
||||||
error = (starting_altitude + altitudeHoldDesired.Altitude) - altHold.Altitude;
|
error = altitudeHoldDesired.Altitude - altHold.Altitude;
|
||||||
|
|
||||||
// Compute integral off altitude error
|
// Compute integral off altitude error
|
||||||
throttleIntegral += error * altitudeHoldSettings.Ki * dT;
|
throttleIntegral += error * altitudeHoldSettings.Ki * dT;
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include "accessorydesired.h"
|
#include "accessorydesired.h"
|
||||||
#include "actuatordesired.h"
|
#include "actuatordesired.h"
|
||||||
#include "altitudeholddesired.h"
|
#include "altitudeholddesired.h"
|
||||||
|
#include "altholdsmoothed.h
|
||||||
#include "flighttelemetrystats.h"
|
#include "flighttelemetrystats.h"
|
||||||
#include "flightstatus.h"
|
#include "flightstatus.h"
|
||||||
#include "sanitycheck.h"
|
#include "sanitycheck.h"
|
||||||
@ -859,7 +860,9 @@ static void altitudeHoldDesired(ManualControlCommandData *cmd, bool changed)
|
|||||||
PositionStateDownGet(¤tDown);
|
PositionStateDownGet(¤tDown);
|
||||||
if (changed) {
|
if (changed) {
|
||||||
// After not being in this mode for a while init at current height
|
// After not being in this mode for a while init at current height
|
||||||
altitudeHoldDesiredData.Altitude = 0;
|
AltHoldSmoothedData altHold;
|
||||||
|
AltHoldSmoothedGet(&altHold);
|
||||||
|
altitudeHoldDesiredData.Altitude = altHold.Altitude;
|
||||||
zeroed = false;
|
zeroed = false;
|
||||||
} else if (cmd->Throttle > DEADBAND_HIGH && zeroed) {
|
} else if (cmd->Throttle > DEADBAND_HIGH && zeroed) {
|
||||||
// being the two band symmetrical I can divide by DEADBAND_LOW to scale it to a value betweeon 0 and 1
|
// being the two band symmetrical I can divide by DEADBAND_LOW to scale it to a value betweeon 0 and 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user