1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-26 17:55:30 +03:00

refactoring, thanks PL

Co-Authored-By: Petr Ledvina <2318015+ledvinap@users.noreply.github.com>
This commit is contained in:
ctzsnooze 2024-11-29 20:30:49 +11:00
parent 0bc110abb0
commit 1c8fc156f0
3 changed files with 7 additions and 15 deletions

View file

@ -124,7 +124,8 @@ void altHoldUpdateTargetAltitude(void)
// otherwise it can be difficult to bring target altitude close to current altitude in a reasonable time // otherwise it can be difficult to bring target altitude close to current altitude in a reasonable time
// using maxVelocity means the stick can bring altitude target to current within 1s // using maxVelocity means the stick can bring altitude target to current within 1s
// this constrains the P and I response to user target changes, but not D of F responses // this constrains the P and I response to user target changes, but not D of F responses
if (fabsf(getAltitudeCm() - altHold.targetAltitudeCm) < altHold.maxVelocity) { // Range is compared to distance that might be traveled in one second
if (fabsf(getAltitudeCm() - altHold.targetAltitudeCm) < altHold.maxVelocity * 1.0 /* s */) {
altHold.targetAltitudeCm += altHold.targetVelocity * taskIntervalSeconds; altHold.targetAltitudeCm += altHold.targetVelocity * taskIntervalSeconds;
} }
} }

View file

@ -147,15 +147,8 @@ void autopilotInit(void)
positionPidCoeffs.Ki = cfg->position_I * POSITION_I_SCALE; positionPidCoeffs.Ki = cfg->position_I * POSITION_I_SCALE;
positionPidCoeffs.Kd = cfg->position_D * POSITION_D_SCALE; positionPidCoeffs.Kd = cfg->position_D * POSITION_D_SCALE;
positionPidCoeffs.Kf = cfg->position_A * POSITION_A_SCALE; // Kf used for acceleration positionPidCoeffs.Kf = cfg->position_A * POSITION_A_SCALE; // Kf used for acceleration
// initialise filters with approximate filter gain // initialise filters with approximate filter gains; location isn't used at this point.
ap.upsampleLpfGain = pt3FilterGain(UPSAMPLING_CUTOFF_HZ, 0.01f); // 5Hz, assuming 100Hz task rate at init resetPositionControl(&gpsSol.llh, 100);
resetUpsampleFilters();
// Initialise PT1 filters for deivative and acceleration in earth frame axes
ap.vaLpfCutoff = cfg->position_cutoff * 0.01f;
const float vaGain = pt1FilterGain(ap.vaLpfCutoff, 0.1f); // assume 10Hz GPS connection at start; value is overwritten before first filter use
for (unsigned i = 0; i < ARRAYLEN(ap.efAxis); i++) {
resetEFAxisFilters(&ap.efAxis[i], vaGain);
}
} }
void resetAltitudeControl (void) { void resetAltitudeControl (void) {

View file

@ -664,10 +664,8 @@ void descend(bool newGpsData)
// set the altitude step, considering the interval between altitude readings and the descent rate // set the altitude step, considering the interval between altitude readings and the descent rate
float altitudeStepCm = taskIntervalSeconds * gpsRescueConfig()->descendRate; float altitudeStepCm = taskIntervalSeconds * gpsRescueConfig()->descendRate;
// descend faster while the quad is above 10m, to max 2.6x set value at 50m, slower below 10m to min 0.6x set value // at or below 10m: descend at 0.6x set value; above 10m, descend faster, to max 3.0x at 50m
const float descentRateMultiplier = constrainf(rescueState.intent.targetAltitudeCm / 5000.0f, 0.0f, 1.0f); altitudeStepCm *= scaleRangef(constrainf(rescueState.intent.targetAltitudeCm, 1000, 5000), 1000, 5000, 0.6f, 3.0f);
altitudeStepCm *= 0.6f + (2.0f * descentRateMultiplier);
// maximum descent rate increase is 2.6x default above 50m, 1.6x above 25m, 1.0x at 10m, 0.6x at ground level
rescueState.intent.targetAltitudeStepCm = -altitudeStepCm; rescueState.intent.targetAltitudeStepCm = -altitudeStepCm;
rescueState.intent.targetAltitudeCm -= altitudeStepCm; rescueState.intent.targetAltitudeCm -= altitudeStepCm;
@ -696,7 +694,7 @@ void gpsRescueUpdate(void)
rescueStop(); // sets phase to RESCUE_IDLE; does nothing else. RESCUE_IDLE tasks still run. rescueStop(); // sets phase to RESCUE_IDLE; does nothing else. RESCUE_IDLE tasks still run.
} else if (FLIGHT_MODE(GPS_RESCUE_MODE) && rescueState.phase == RESCUE_IDLE) { } else if (FLIGHT_MODE(GPS_RESCUE_MODE) && rescueState.phase == RESCUE_IDLE) {
rescueStart(); // sets phase to rescue_initialise if we enter GPS Rescue mode while idle rescueStart(); // sets phase to rescue_initialise if we enter GPS Rescue mode while idle
rescueAttainPosition(newGpsData); // Initialise basic parameters when a Rescue starts (can't initialise sensor data reliably) rescueAttainPosition(false); // Initialise basic parameters when a Rescue starts (can't initialise sensor data reliably)
performSanityChecks(); // Initialises sanity check values when a Rescue starts performSanityChecks(); // Initialises sanity check values when a Rescue starts
} }
// Will now be in RESCUE_INITIALIZE mode, if just entered Rescue while IDLE, otherwise stays IDLE // Will now be in RESCUE_INITIALIZE mode, if just entered Rescue while IDLE, otherwise stays IDLE