void resetMulticopterPositionController(void)
{
    int axis;
    for (axis = 0; axis < 2; axis++) {
        navPidReset(&posControl.pids.vel[axis]);
        posControl.rcAdjustment[axis] = 0;
        filterResetPt1(&mcPosControllerAccFilterStateX, 0.0f);
        filterResetPt1(&mcPosControllerAccFilterStateY, 0.0f);
        lastAccelTargetX = 0.0f;
        lastAccelTargetY = 0.0f;
    }
}
void resetMulticopterAltitudeController()
{
    navPidReset(&posControl.pids.vel[Z]);
    filterResetPt1(&altholdThrottleFilterState, 0.0f);
    posControl.desiredState.vel.V.Z = posControl.actualState.vel.V.Z;   // Gradually transition from current climb
    posControl.rcAdjustment[THROTTLE] = 0;
}
void resetMulticopterAltitudeController(void)
{
    navPidReset(&posControl.pids.vel[Z]);
    navPidReset(&posControl.pids.surface);
    filterResetPt1(&altholdThrottleFilterState, 0.0f);
    posControl.desiredState.vel.V.Z = posControl.actualState.vel.V.Z;   // Gradually transition from current climb
    posControl.rcAdjustment[THROTTLE] = 0;

    /* Prevent jump if activated with zero throttle - start with -50% throttle adjustment. That's obviously too much, but it will prevent jumping */
    if (prepareForTakeoffOnReset) {
        posControl.pids.vel[Z].integrator = -500.0f;
        prepareForTakeoffOnReset = false;
    }
}