/**
 * get throttle offset by acceleration
 *
 * @param
 *		void
 *
 * @return
 *		void
 */
float getThrottleOffsetByAcceleration(void) {

	float output = 0.f;

	setPidSp(&verticalAccelPidSettings, 0.f);
	
	output = LIMIT_MIN_MAX_VALUE(pidCalculation(&verticalAccelPidSettings,
			getVerticalAcceleration(),true,true,true), -maxThrottleOffset,
		maxThrottleOffset);
	
	//_DEBUG(DEBUG_NORMAL,"%s output =%f\n",__func__,output);
	return output;
}
void Localization::ProcessMeasurementIMU(unsigned int time, const float* gyroscope, const float* accelerometer) {
    float gyroCorrected[3];
    float accelCorrected[3];
    float deltaTime = (time - timeNow) / 1000000.0f;
    deltaTime = std::min(deltaTime, 4.0f * this->deltaTime);
    for (int i = 0; i < 3; ++i) {
        gyroCorrected[i] = gyroscope[i];
        accelCorrected[i] = accelerometer[i] * 9.81f;
    }
    se_compensate_imu(deltaTime, ahrsType, ahrsParameters, &imuState, gyroCorrected, accelCorrected, magLastMeas, hasMagMeas);
    hasMagMeas = false;
    se_kalman_predict(deltaTime, z, zCovar);
    timeNow = time;
    se_kalman_correct(z, zCovar, SE_STATE_A_Z, getVerticalAcceleration(imuState.q, accelCorrected), SE_ACC_VARIANCE);
}