|
|
|
@ -159,10 +159,8 @@ void NavEKF3_core::InitialiseVariables()
@@ -159,10 +159,8 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
|
|
|
|
|
// initialise time stamps
|
|
|
|
|
imuSampleTime_ms = frontend->imuSampleTime_us / 1000; |
|
|
|
|
lastHealthyMagTime_ms = imuSampleTime_ms; |
|
|
|
|
prevTasStep_ms = imuSampleTime_ms; |
|
|
|
|
prevBetaStep_ms = imuSampleTime_ms; |
|
|
|
|
lastMagUpdate_us = 0; |
|
|
|
|
lastBaroReceived_ms = imuSampleTime_ms; |
|
|
|
|
lastVelPassTime_ms = 0; |
|
|
|
|
lastPosPassTime_ms = 0; |
|
|
|
@ -182,7 +180,6 @@ void NavEKF3_core::InitialiseVariables()
@@ -182,7 +180,6 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
lastGpsVelFail_ms = 0; |
|
|
|
|
lastGpsAidBadTime_ms = 0; |
|
|
|
|
timeTasReceived_ms = 0; |
|
|
|
|
magYawResetTimer_ms = imuSampleTime_ms; |
|
|
|
|
lastPreAlignGpsCheckTime_ms = imuSampleTime_ms; |
|
|
|
|
lastPosReset_ms = 0; |
|
|
|
|
lastVelReset_ms = 0; |
|
|
|
@ -193,13 +190,9 @@ void NavEKF3_core::InitialiseVariables()
@@ -193,13 +190,9 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
// initialise other variables
|
|
|
|
|
gpsNoiseScaler = 1.0f; |
|
|
|
|
hgtTimeout = true; |
|
|
|
|
magTimeout = false; |
|
|
|
|
allMagSensorsFailed = false; |
|
|
|
|
tasTimeout = true; |
|
|
|
|
badMagYaw = false; |
|
|
|
|
badIMUdata = false; |
|
|
|
|
finalInflightYawInit = false; |
|
|
|
|
finalInflightMagInit = false; |
|
|
|
|
dtIMUavg = ins.get_loop_delta_t(); |
|
|
|
|
dtEkfAvg = EKF_TARGET_DT; |
|
|
|
|
dt = 0; |
|
|
|
@ -225,15 +218,12 @@ void NavEKF3_core::InitialiseVariables()
@@ -225,15 +218,12 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
velTimeout = true; |
|
|
|
|
memset(&faultStatus, 0, sizeof(faultStatus)); |
|
|
|
|
hgtRate = 0.0f; |
|
|
|
|
mag_state.q0 = 1; |
|
|
|
|
mag_state.DCM.identity(); |
|
|
|
|
onGround = true; |
|
|
|
|
prevOnGround = true; |
|
|
|
|
inFlight = false; |
|
|
|
|
prevInFlight = false; |
|
|
|
|
manoeuvring = false; |
|
|
|
|
inhibitWindStates = true; |
|
|
|
|
inhibitMagStates = true; |
|
|
|
|
inhibitDelVelBiasStates = true; |
|
|
|
|
inhibitDelAngBiasStates = true; |
|
|
|
|
gndOffsetValid = false; |
|
|
|
@ -253,7 +243,6 @@ void NavEKF3_core::InitialiseVariables()
@@ -253,7 +243,6 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
stateIndexLim = 23; |
|
|
|
|
baroStoreIndex = 0; |
|
|
|
|
rangeStoreIndex = 0; |
|
|
|
|
magStoreIndex = 0; |
|
|
|
|
last_gps_idx = 0; |
|
|
|
|
tasStoreIndex = 0; |
|
|
|
|
ofStoreIndex = 0; |
|
|
|
@ -291,24 +280,13 @@ void NavEKF3_core::InitialiseVariables()
@@ -291,24 +280,13 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
velResetNE.zero(); |
|
|
|
|
posResetD = 0.0f; |
|
|
|
|
hgtInnovFiltState = 0.0f; |
|
|
|
|
if (_ahrs->get_compass()) { |
|
|
|
|
magSelectIndex = _ahrs->get_compass()->get_primary(); |
|
|
|
|
} |
|
|
|
|
imuDataDownSampledNew.delAng.zero(); |
|
|
|
|
imuDataDownSampledNew.delVel.zero(); |
|
|
|
|
imuDataDownSampledNew.delAngDT = 0.0f; |
|
|
|
|
imuDataDownSampledNew.delVelDT = 0.0f; |
|
|
|
|
runUpdates = false; |
|
|
|
|
framesSincePredict = 0; |
|
|
|
|
lastMagOffsetsValid = false; |
|
|
|
|
magStateResetRequest = false; |
|
|
|
|
magStateInitComplete = false; |
|
|
|
|
magYawResetRequest = false; |
|
|
|
|
gpsYawResetRequest = false; |
|
|
|
|
posDownAtLastMagReset = stateStruct.position.z; |
|
|
|
|
yawInnovAtLastMagReset = 0.0f; |
|
|
|
|
quatAtLastMagReset = stateStruct.quat; |
|
|
|
|
magFieldLearned = false; |
|
|
|
|
delAngBiasLearned = false; |
|
|
|
|
memset(&filterStatus, 0, sizeof(filterStatus)); |
|
|
|
|
gpsInhibit = false; |
|
|
|
@ -380,7 +358,6 @@ void NavEKF3_core::InitialiseVariables()
@@ -380,7 +358,6 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
// zero data buffers
|
|
|
|
|
storedIMU.reset(); |
|
|
|
|
storedGPS.reset(); |
|
|
|
|
storedMag.reset(); |
|
|
|
|
storedBaro.reset(); |
|
|
|
|
storedTAS.reset(); |
|
|
|
|
storedRange.reset(); |
|
|
|
@ -388,6 +365,37 @@ void NavEKF3_core::InitialiseVariables()
@@ -388,6 +365,37 @@ void NavEKF3_core::InitialiseVariables()
|
|
|
|
|
storedRangeBeacon.reset(); |
|
|
|
|
storedBodyOdm.reset(); |
|
|
|
|
storedWheelOdm.reset(); |
|
|
|
|
|
|
|
|
|
InitialiseVariablesMag(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Use a function call rather than a constructor to initialise variables because it enables the filter to be re-started in flight if necessary.
|
|
|
|
|
void NavEKF3_core::InitialiseVariablesMag() |
|
|
|
|
{ |
|
|
|
|
lastHealthyMagTime_ms = imuSampleTime_ms; |
|
|
|
|
lastMagUpdate_us = 0; |
|
|
|
|
magYawResetTimer_ms = imuSampleTime_ms; |
|
|
|
|
magTimeout = false; |
|
|
|
|
allMagSensorsFailed = false; |
|
|
|
|
badMagYaw = false; |
|
|
|
|
finalInflightMagInit = false; |
|
|
|
|
mag_state.q0 = 1; |
|
|
|
|
mag_state.DCM.identity(); |
|
|
|
|
inhibitMagStates = true; |
|
|
|
|
magStoreIndex = 0; |
|
|
|
|
if (_ahrs->get_compass()) { |
|
|
|
|
magSelectIndex = _ahrs->get_compass()->get_primary(); |
|
|
|
|
} |
|
|
|
|
lastMagOffsetsValid = false; |
|
|
|
|
magStateResetRequest = false; |
|
|
|
|
magStateInitComplete = false; |
|
|
|
|
magYawResetRequest = false; |
|
|
|
|
posDownAtLastMagReset = stateStruct.position.z; |
|
|
|
|
yawInnovAtLastMagReset = 0.0f; |
|
|
|
|
quatAtLastMagReset = stateStruct.quat; |
|
|
|
|
magFieldLearned = false; |
|
|
|
|
storedMag.reset(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Initialise the states from accelerometer and magnetometer data (if present)
|
|
|
|
|