3 #if HAL_CPU_CLASS >= HAL_CPU_CLASS_150 14 #define earthRate 0.000072921f // earth rotation rate (rad/sec) 18 #define STARTUP_WIND_SPEED 3.0f 21 #define INIT_ACCEL_BIAS_UNCERTAINTY 0.5f 24 #define GYRO_BIAS_LIMIT 0.5f 28 stateStruct(*reinterpret_cast<struct
state_elements *>(&statesArray)),
30 _perf_UpdateFilter(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_UpdateFilter")),
31 _perf_CovariancePrediction(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_CovariancePrediction")),
32 _perf_FuseVelPosNED(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_FuseVelPosNED")),
33 _perf_FuseMagnetometer(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_FuseMagnetometer")),
34 _perf_FuseAirspeed(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_FuseAirspeed")),
35 _perf_FuseSideslip(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_FuseSideslip")),
36 _perf_TerrainOffset(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_TerrainOffset")),
37 _perf_FuseOptFlow(hal.util->perf_alloc(
AP_HAL::Util::PC_ELAPSED,
"EK2_FuseOptFlow"))
65 if (
AP::ins().get_sample_rate() < 100) {
169 memset(&
P[0][0], 0,
sizeof(
P));
354 "EKF2 init failure: No GPS lock");
391 float pitch=0, roll=0;
392 if (initAccVec.
length() > 0.001f) {
396 pitch = asinf(initAccVec.
x);
399 roll = atan2f(-initAccVec.
y , -initAccVec.
z);
449 memset(
P, 0,
sizeof(
P));
468 P[12][12] =
sq(1e-3);
469 P[13][13] =
P[12][12];
470 P[14][14] =
P[12][12];
475 P[17][17] =
P[16][16];
476 P[18][18] =
P[16][16];
479 P[20][20] =
P[19][19];
480 P[21][21] =
P[19][19];
483 P[23][23] =
P[22][22];
504 #if EK2_DISABLE_INTERRUPTS 505 irqstate_t istate = irqsave();
555 #if EK2_DISABLE_INTERRUPTS 673 Vector3f delVelNav = Tbn_temp*delVelNewCorrected;
723 if (quatErr[0] >= 0.0
f) {
728 deltaAngErr.
x = scaler * quatErr[1];
729 deltaAngErr.
y = scaler * quatErr[2];
730 deltaAngErr.
z = scaler * quatErr[3];
735 timeDelay = fmaxf(timeDelay,
dtIMUavg);
736 float errorGain = 0.5f / timeDelay;
740 delAngCorrection = deltaAngErr * errorGain *
dtIMUavg;
772 outputStates.
velocity += velCorrection;
775 outputStates.
position += posCorrection;
798 float dAngScaleSigma;
830 float alpha = 0.1f *
dt;
842 for (uint8_t i=9; i<=11; i++)
processNoise[i] = dAngBiasSigma;
843 for (uint8_t i=12; i<=14; i++)
processNoise[i] = dAngScaleSigma;
849 for (uint8_t i=16; i<=18; i++)
processNoise[i] = magEarthSigma;
850 for (uint8_t i=19; i<=21; i++)
processNoise[i] = magBodySigma;
851 for (uint8_t i=22; i<=23; i++)
processNoise[i] = windVelSigma;
874 daxNoise = dayNoise = dazNoise =
sq(
dt*_gyrNoise);
876 dvxNoise = dvyNoise = dvzNoise =
sq(
dt*_accNoise);
880 SF[0] = daz_b/2 - (daz*daz_s)/2;
881 SF[1] = day_b/2 - (day*day_s)/2;
882 SF[2] = dax_b/2 - (dax*dax_s)/2;
883 SF[3] = q3/2 - (q0*
SF[0])/2 + (q1*
SF[1])/2 - (q2*SF[2])/2;
884 SF[4] = q0/2 - (q1*SF[2])/2 - (q2*SF[1])/2 + (q3*SF[0])/2;
885 SF[5] = q1/2 + (q0*SF[2])/2 - (q2*SF[0])/2 - (q3*SF[1])/2;
886 SF[6] = q3/2 + (q0*SF[0])/2 - (q1*SF[1])/2 - (q2*SF[2])/2;
887 SF[7] = q0/2 - (q1*SF[2])/2 + (q2*SF[1])/2 - (q3*SF[0])/2;
888 SF[8] = q0/2 + (q1*SF[2])/2 - (q2*SF[1])/2 - (q3*SF[0])/2;
889 SF[9] = q2/2 + (q0*SF[1])/2 + (q1*SF[0])/2 + (q3*SF[2])/2;
890 SF[10] = q2/2 - (q0*SF[1])/2 - (q1*SF[0])/2 + (q3*SF[2])/2;
891 SF[11] = q2/2 + (q0*SF[1])/2 - (q1*SF[0])/2 - (q3*SF[2])/2;
892 SF[12] = q1/2 + (q0*SF[2])/2 + (q2*SF[0])/2 + (q3*SF[1])/2;
893 SF[13] = q1/2 - (q0*SF[2])/2 + (q2*SF[0])/2 - (q3*SF[1])/2;
894 SF[14] = q3/2 + (q0*SF[0])/2 + (q1*SF[1])/2 + (q2*SF[2])/2;
895 SF[15] = -
sq(q0) -
sq(q1) -
sq(q2) -
sq(q3);
896 SF[16] = dvz_b - dvz;
900 SF[20] = SF[19] -
sq(q0) +
sq(q1) -
sq(q3);
901 SF[21] = SF[19] +
sq(q0) -
sq(q1) -
sq(q3);
902 SF[22] = 2*q0*q1 - 2*q2*
q3;
903 SF[23] = SF[19] -
sq(q0) -
sq(q1) +
sq(q3);
912 SQ[0] = - dvyNoise*(2*q0*q1 + 2*q2*
q3)*(
SG[1] -
SG[2] +
SG[3] -
SG[4]) - dvzNoise*(2*q0*q1 - 2*q2*
q3)*(
SG[1] -
SG[2] -
SG[3] +
SG[4]) - dvxNoise*(2*q0*q2 - 2*q1*
q3)*(2*q0*q3 + 2*q1*q2);
913 SQ[1] = dvxNoise*(2*q0*q2 - 2*q1*
q3)*(
SG[1] +
SG[2] -
SG[3] -
SG[4]) + dvzNoise*(2*q0*q2 + 2*q1*
q3)*(
SG[1] -
SG[2] -
SG[3] +
SG[4]) - dvyNoise*(2*q0*q1 + 2*q2*
q3)*(2*q0*q3 - 2*q1*q2);
914 SQ[2] = dvyNoise*(2*q0*q3 - 2*q1*
q2)*(
SG[1] -
SG[2] +
SG[3] -
SG[4]) - dvxNoise*(2*q0*q3 + 2*q1*
q2)*(
SG[1] +
SG[2] -
SG[3] -
SG[4]) - dvzNoise*(2*q0*q1 - 2*q2*
q3)*(2*q0*q2 + 2*q1*q3);
921 SPP[0] = SF[17]*(2*q0*q1 + 2*q2*
q3) + SF[18]*(2*q0*q2 - 2*q1*q3);
922 SPP[1] = SF[18]*(2*q0*q2 + 2*q1*
q3) + SF[16]*(SF[24] - 2*q0*q3);
923 SPP[2] = 2*q3*SF[8] + 2*q1*SF[11] - 2*q0*SF[14] - 2*q2*SF[13];
924 SPP[3] = 2*q1*SF[7] + 2*q2*SF[6] - 2*q0*SF[12] - 2*q3*SF[10];
925 SPP[4] = 2*q0*SF[6] - 2*q3*SF[7] - 2*q1*SF[10] + 2*q2*SF[12];
926 SPP[5] = 2*q0*SF[8] + 2*q2*SF[11] + 2*q1*SF[13] + 2*q3*SF[14];
927 SPP[6] = 2*q0*SF[7] + 2*q3*SF[6] + 2*q2*SF[10] + 2*q1*SF[12];
928 SPP[7] = SF[18]*SF[20] - SF[16]*(2*q0*q1 + 2*q2*
q3);
929 SPP[8] = 2*q1*SF[3] - 2*q2*SF[4] - 2*q3*SF[5] + 2*q0*SF[9];
930 SPP[9] = 2*q0*SF[5] - 2*q1*SF[4] - 2*q2*SF[3] + 2*q3*SF[9];
931 SPP[10] = SF[17]*SF[20] + SF[16]*(2*q0*q2 - 2*q1*
q3);
932 SPP[11] = SF[17]*SF[21] - SF[18]*(SF[24] + 2*q0*
q3);
933 SPP[12] = SF[17]*SF[22] - SF[16]*(SF[24] + 2*q0*
q3);
934 SPP[13] = 2*q0*SF[4] + 2*q1*SF[5] + 2*q3*SF[3] + 2*q2*SF[9];
935 SPP[14] = 2*q2*SF[8] - 2*q0*SF[11] - 2*q1*SF[14] + 2*q3*SF[13];
936 SPP[15] = SF[18]*SF[23] + SF[17]*(SF[24] - 2*q0*
q3);
937 SPP[16] = daz*SF[19] + daz*
sq(q0) + daz*
sq(q1) + daz*
sq(q3);
938 SPP[17] = day*SF[19] + day*
sq(q0) + day*
sq(q1) + day*
sq(q3);
939 SPP[18] = dax*SF[19] + dax*
sq(q0) + dax*
sq(q1) + dax*
sq(q3);
940 SPP[19] = SF[16]*SF[23] - SF[17]*(2*q0*q2 + 2*q1*
q3);
941 SPP[20] = SF[16]*SF[21] - SF[18]*SF[22];
942 SPP[21] = 2*q0*q2 + 2*q1*
q3;
953 nextP[0][0] = daxNoise*
SQ[3] + SPP[5]*(
P[0][0]*SPP[5] -
P[1][0]*SPP[4] +
P[9][0]*SPP[22] +
P[12][0]*SPP[18] +
P[2][0]*(2*q1*SF[3] - 2*q2*SF[4] - 2*q3*SF[5] + 2*q0*SF[9])) - SPP[4]*(
P[0][1]*SPP[5] -
P[1][1]*SPP[4] +
P[9][1]*SPP[22] +
P[12][1]*SPP[18] +
P[2][1]*(2*q1*SF[3] - 2*q2*SF[4] - 2*q3*SF[5] + 2*q0*SF[9])) + SPP[8]*(
P[0][2]*SPP[5] +
P[2][2]*SPP[8] +
P[9][2]*SPP[22] +
P[12][2]*SPP[18] -
P[1][2]*(2*q0*SF[6] - 2*q3*SF[7] - 2*q1*SF[10] + 2*q2*SF[12])) + SPP[22]*(
P[0][9]*SPP[5] -
P[1][9]*SPP[4] +
P[9][9]*SPP[22] +
P[12][9]*SPP[18] +
P[2][9]*(2*q1*SF[3] - 2*q2*SF[4] - 2*q3*SF[5] + 2*q0*SF[9])) + SPP[18]*(
P[0][12]*SPP[5] -
P[1][12]*SPP[4] +
P[9][12]*SPP[22] +
P[12][12]*SPP[18] +
P[2][12]*(2*q1*SF[3] - 2*q2*SF[4] - 2*q3*SF[5] + 2*q0*SF[9]));
954 nextP[0][1] = SPP[6]*(
P[0][1]*SPP[5] -
P[1][1]*SPP[4] +
P[2][1]*SPP[8] +
P[9][1]*SPP[22] +
P[12][1]*SPP[18]) - SPP[2]*(
P[0][0]*SPP[5] -
P[1][0]*SPP[4] +
P[2][0]*SPP[8] +
P[9][0]*SPP[22] +
P[12][0]*SPP[18]) + SPP[22]*(
P[0][10]*SPP[5] -
P[1][10]*SPP[4] +
P[2][10]*SPP[8] +
P[9][10]*SPP[22] +
P[12][10]*SPP[18]) + SPP[17]*(
P[0][13]*SPP[5] -
P[1][13]*SPP[4] +
P[2][13]*SPP[8] +
P[9][13]*SPP[22] +
P[12][13]*SPP[18]) - (2*q0*SF[5] - 2*q1*SF[4] - 2*q2*SF[3] + 2*q3*SF[9])*(
P[0][2]*SPP[5] -
P[1][2]*SPP[4] +
P[2][2]*SPP[8] +
P[9][2]*SPP[22] +
P[12][2]*SPP[18]);
955 nextP[1][1] = dayNoise*
SQ[3] - SPP[2]*(
P[1][0]*SPP[6] -
P[0][0]*SPP[2] -
P[2][0]*SPP[9] +
P[10][0]*SPP[22] +
P[13][0]*SPP[17]) + SPP[6]*(
P[1][1]*SPP[6] -
P[0][1]*SPP[2] -
P[2][1]*SPP[9] +
P[10][1]*SPP[22] +
P[13][1]*SPP[17]) - SPP[9]*(
P[1][2]*SPP[6] -
P[0][2]*SPP[2] -
P[2][2]*SPP[9] +
P[10][2]*SPP[22] +
P[13][2]*SPP[17]) + SPP[22]*(
P[1][10]*SPP[6] -
P[0][10]*SPP[2] -
P[2][10]*SPP[9] +
P[10][10]*SPP[22] +
P[13][10]*SPP[17]) + SPP[17]*(
P[1][13]*SPP[6] -
P[0][13]*SPP[2] -
P[2][13]*SPP[9] +
P[10][13]*SPP[22] +
P[13][13]*SPP[17]);
956 nextP[0][2] = SPP[13]*(
P[0][2]*SPP[5] -
P[1][2]*SPP[4] +
P[2][2]*SPP[8] +
P[9][2]*SPP[22] +
P[12][2]*SPP[18]) - SPP[3]*(
P[0][1]*SPP[5] -
P[1][1]*SPP[4] +
P[2][1]*SPP[8] +
P[9][1]*SPP[22] +
P[12][1]*SPP[18]) + SPP[22]*(
P[0][11]*SPP[5] -
P[1][11]*SPP[4] +
P[2][11]*SPP[8] +
P[9][11]*SPP[22] +
P[12][11]*SPP[18]) + SPP[16]*(
P[0][14]*SPP[5] -
P[1][14]*SPP[4] +
P[2][14]*SPP[8] +
P[9][14]*SPP[22] +
P[12][14]*SPP[18]) + (2*q2*SF[8] - 2*q0*SF[11] - 2*q1*SF[14] + 2*q3*SF[13])*(
P[0][0]*SPP[5] -
P[1][0]*SPP[4] +
P[2][0]*SPP[8] +
P[9][0]*SPP[22] +
P[12][0]*SPP[18]);
957 nextP[1][2] = SPP[13]*(
P[1][2]*SPP[6] -
P[0][2]*SPP[2] -
P[2][2]*SPP[9] +
P[10][2]*SPP[22] +
P[13][2]*SPP[17]) - SPP[3]*(
P[1][1]*SPP[6] -
P[0][1]*SPP[2] -
P[2][1]*SPP[9] +
P[10][1]*SPP[22] +
P[13][1]*SPP[17]) + SPP[22]*(
P[1][11]*SPP[6] -
P[0][11]*SPP[2] -
P[2][11]*SPP[9] +
P[10][11]*SPP[22] +
P[13][11]*SPP[17]) + SPP[16]*(
P[1][14]*SPP[6] -
P[0][14]*SPP[2] -
P[2][14]*SPP[9] +
P[10][14]*SPP[22] +
P[13][14]*SPP[17]) + (2*q2*SF[8] - 2*q0*SF[11] - 2*q1*SF[14] + 2*q3*SF[13])*(
P[1][0]*SPP[6] -
P[0][0]*SPP[2] -
P[2][0]*SPP[9] +
P[10][0]*SPP[22] +
P[13][0]*SPP[17]);
958 nextP[2][2] = dazNoise*
SQ[3] - SPP[3]*(
P[0][1]*SPP[14] -
P[1][1]*SPP[3] +
P[2][1]*SPP[13] +
P[11][1]*SPP[22] +
P[14][1]*SPP[16]) + SPP[14]*(
P[0][0]*SPP[14] -
P[1][0]*SPP[3] +
P[2][0]*SPP[13] +
P[11][0]*SPP[22] +
P[14][0]*SPP[16]) + SPP[13]*(
P[0][2]*SPP[14] -
P[1][2]*SPP[3] +
P[2][2]*SPP[13] +
P[11][2]*SPP[22] +
P[14][2]*SPP[16]) + SPP[22]*(
P[0][11]*SPP[14] -
P[1][11]*SPP[3] +
P[2][11]*SPP[13] +
P[11][11]*SPP[22] +
P[14][11]*SPP[16]) + SPP[16]*(
P[0][14]*SPP[14] -
P[1][14]*SPP[3] +
P[2][14]*SPP[13] +
P[11][14]*SPP[22] +
P[14][14]*SPP[16]);
959 nextP[0][3] =
P[0][3]*SPP[5] -
P[1][3]*SPP[4] +
P[2][3]*SPP[8] +
P[9][3]*SPP[22] +
P[12][3]*SPP[18] + SPP[1]*(
P[0][0]*SPP[5] -
P[1][0]*SPP[4] +
P[2][0]*SPP[8] +
P[9][0]*SPP[22] +
P[12][0]*SPP[18]) + SPP[15]*(
P[0][2]*SPP[5] -
P[1][2]*SPP[4] +
P[2][2]*SPP[8] +
P[9][2]*SPP[22] +
P[12][2]*SPP[18]) - SPP[21]*(
P[0][15]*SPP[5] -
P[1][15]*SPP[4] +
P[2][15]*SPP[8] +
P[9][15]*SPP[22] +
P[12][15]*SPP[18]) + (SF[16]*SF[23] - SF[17]*SPP[21])*(
P[0][1]*SPP[5] -
P[1][1]*SPP[4] +
P[2][1]*SPP[8] +
P[9][1]*SPP[22] +
P[12][1]*SPP[18]);
960 nextP[1][3] =
P[1][3]*SPP[6] -
P[0][3]*SPP[2] -
P[2][3]*SPP[9] +
P[10][3]*SPP[22] +
P[13][3]*SPP[17] + SPP[1]*(
P[1][0]*SPP[6] -
P[0][0]*SPP[2] -
P[2][0]*SPP[9] +
P[10][0]*SPP[22] +
P[13][0]*SPP[17]) + SPP[15]*(
P[1][2]*SPP[6] -
P[0][2]*SPP[2] -
P[2][2]*SPP[9] +
P[10][2]*SPP[22] +
P[13][2]*SPP[17]) - SPP[21]*(
P[1][15]*SPP[6] -
P[0][15]*SPP[2] -
P[2][15]*SPP[9] +
P[10][15]*SPP[22] +
P[13][15]*SPP[17]) + (SF[16]*SF[23] - SF[17]*SPP[21])*(
P[1][1]*SPP[6] -
P[0][1]*SPP[2] -
P[2][1]*SPP[9] +
P[10][1]*SPP[22] +
P[13][1]*SPP[17]);
961 nextP[2][3] =
P[0][3]*SPP[14] -
P[1][3]*SPP[3] +
P[2][3]*SPP[13] +
P[11][3]*SPP[22] +
P[14][3]*SPP[16] + SPP[1]*(
P[0][0]*SPP[14] -
P[1][0]*SPP[3] +
P[2][0]*SPP[13] +
P[11][0]*SPP[22] +
P[14][0]*SPP[16]) + SPP[15]*(
P[0][2]*SPP[14] -
P[1][2]*SPP[3] +
P[2][2]*SPP[13] +
P[11][2]*SPP[22] +
P[14][2]*SPP[16]) - SPP[21]*(
P[0][15]*SPP[14] -
P[1][15]*SPP[3] +
P[2][15]*SPP[13] +
P[11][15]*SPP[22] +
P[14][15]*SPP[16]) + (SF[16]*SF[23] - SF[17]*SPP[21])*(
P[0][1]*SPP[14] -
P[1][1]*SPP[3] +
P[2][1]*SPP[13] +
P[11][1]*SPP[22] +
P[14][1]*SPP[16]);
962 nextP[3][3] =
P[3][3] +
P[0][3]*SPP[1] +
P[1][3]*SPP[19] +
P[2][3]*SPP[15] -
P[15][3]*SPP[21] + dvyNoise*
sq(
SQ[6] - 2*q0*q3) + dvzNoise*
sq(
SQ[5] + 2*q0*q2) + SPP[1]*(
P[3][0] +
P[0][0]*SPP[1] +
P[1][0]*SPP[19] +
P[2][0]*SPP[15] -
P[15][0]*SPP[21]) + SPP[19]*(
P[3][1] +
P[0][1]*SPP[1] +
P[1][1]*SPP[19] +
P[2][1]*SPP[15] -
P[15][1]*SPP[21]) + SPP[15]*(
P[3][2] +
P[0][2]*SPP[1] +
P[1][2]*SPP[19] +
P[2][2]*SPP[15] -
P[15][2]*SPP[21]) - SPP[21]*(
P[3][15] +
P[0][15]*SPP[1] +
P[2][15]*SPP[15] -
P[15][15]*SPP[21] +
P[1][15]*(SF[16]*SF[23] - SF[17]*SPP[21])) + dvxNoise*
sq(
SG[1] +
SG[2] -
SG[3] -
SQ[7]);
963 nextP[0][4] =
P[0][4]*SPP[5] -
P[1][4]*SPP[4] +
P[2][4]*SPP[8] +
P[9][4]*SPP[22] +
P[12][4]*SPP[18] + SF[22]*(
P[0][15]*SPP[5] -
P[1][15]*SPP[4] +
P[2][15]*SPP[8] +
P[9][15]*SPP[22] +
P[12][15]*SPP[18]) + SPP[12]*(
P[0][1]*SPP[5] -
P[1][1]*SPP[4] +
P[2][1]*SPP[8] +
P[9][1]*SPP[22] +
P[12][1]*SPP[18]) + SPP[20]*(
P[0][0]*SPP[5] -
P[1][0]*SPP[4] +
P[2][0]*SPP[8] +
P[9][0]*SPP[22] +
P[12][0]*SPP[18]) + SPP[11]*(
P[0][2]*SPP[5] -
P[1][2]*SPP[4] +
P[2][2]*SPP[8] +
P[9][2]*SPP[22] +
P[12][2]*SPP[18]);
964 nextP[1][4] =
P[1][4]*SPP[6] -
P[0][4]*SPP[2] -
P[2][4]*SPP[9] +
P[10][4]*SPP[22] +
P[13][4]*SPP[17] + SF[22]*(
P[1][15]*SPP[6] -
P[0][15]*SPP[2] -
P[2][15]*SPP[9] +
P[10][15]*SPP[22] +
P[13][15]*SPP[17]) + SPP[12]*(
P[1][1]*SPP[6] -
P[0][1]*SPP[2] -
P[2][1]*SPP[9] +
P[10][1]*SPP[22] +
P[13][1]*SPP[17]) + SPP[20]*(
P[1][0]*SPP[6] -
P[0][0]*SPP[2] -
P[2][0]*SPP[9] +
P[10][0]*SPP[22] +
P[13][0]*SPP[17]) + SPP[11]*(
P[1][2]*SPP[6] -
P[0][2]*SPP[2] -
P[2][2]*SPP[9] +
P[10][2]*SPP[22] +
P[13][2]*SPP[17]);
965 nextP[2][4] =
P[0][4]*SPP[14] -
P[1][4]*SPP[3] +
P[2][4]*SPP[13] +
P[11][4]*SPP[22] +
P[14][4]*SPP[16] + SF[22]*(
P[0][15]*SPP[14] -
P[1][15]*SPP[3] +
P[2][15]*SPP[13] +
P[11][15]*SPP[22] +
P[14][15]*SPP[16]) + SPP[12]*(
P[0][1]*SPP[14] -
P[1][1]*SPP[3] +
P[2][1]*SPP[13] +
P[11][1]*SPP[22] +
P[14][1]*SPP[16]) + SPP[20]*(
P[0][0]*SPP[14] -
P[1][0]*SPP[3] +
P[2][0]*SPP[13] +
P[11][0]*SPP[22] +
P[14][0]*SPP[16]) + SPP[11]*(
P[0][2]*SPP[14] -
P[1][2]*SPP[3] +
P[2][2]*SPP[13] +
P[11][2]*SPP[22] +
P[14][2]*SPP[16]);
966 nextP[3][4] =
P[3][4] +
SQ[2] +
P[0][4]*SPP[1] +
P[1][4]*SPP[19] +
P[2][4]*SPP[15] -
P[15][4]*SPP[21] + SF[22]*(
P[3][15] +
P[0][15]*SPP[1] +
P[1][15]*SPP[19] +
P[2][15]*SPP[15] -
P[15][15]*SPP[21]) + SPP[12]*(
P[3][1] +
P[0][1]*SPP[1] +
P[1][1]*SPP[19] +
P[2][1]*SPP[15] -
P[15][1]*SPP[21]) + SPP[20]*(
P[3][0] +
P[0][0]*SPP[1] +
P[1][0]*SPP[19] +
P[2][0]*SPP[15] -
P[15][0]*SPP[21]) + SPP[11]*(
P[3][2] +
P[0][2]*SPP[1] +
P[1][2]*SPP[19] +
P[2][2]*SPP[15] -
P[15][2]*SPP[21]);
967 nextP[4][4] =
P[4][4] +
P[15][4]*SF[22] +
P[0][4]*SPP[20] +
P[1][4]*SPP[12] +
P[2][4]*SPP[11] + dvxNoise*
sq(
SQ[6] + 2*q0*q3) + dvzNoise*
sq(
SQ[4] - 2*q0*q1) + SF[22]*(
P[4][15] +
P[15][15]*SF[22] +
P[0][15]*SPP[20] +
P[1][15]*SPP[12] +
P[2][15]*SPP[11]) + SPP[12]*(
P[4][1] +
P[15][1]*SF[22] +
P[0][1]*SPP[20] +
P[1][1]*SPP[12] +
P[2][1]*SPP[11]) + SPP[20]*(
P[4][0] +
P[15][0]*SF[22] +
P[0][0]*SPP[20] +
P[1][0]*SPP[12] +
P[2][0]*SPP[11]) + SPP[11]*(
P[4][2] +
P[15][2]*SF[22] +
P[0][2]*SPP[20] +
P[1][2]*SPP[12] +
P[2][2]*SPP[11]) + dvyNoise*
sq(
SG[1] -
SG[2] +
SG[3] -
SQ[7]);
968 nextP[0][5] =
P[0][5]*SPP[5] -
P[1][5]*SPP[4] +
P[2][5]*SPP[8] +
P[9][5]*SPP[22] +
P[12][5]*SPP[18] + SF[20]*(
P[0][15]*SPP[5] -
P[1][15]*SPP[4] +
P[2][15]*SPP[8] +
P[9][15]*SPP[22] +
P[12][15]*SPP[18]) - SPP[7]*(
P[0][0]*SPP[5] -
P[1][0]*SPP[4] +
P[2][0]*SPP[8] +
P[9][0]*SPP[22] +
P[12][0]*SPP[18]) + SPP[0]*(
P[0][2]*SPP[5] -
P[1][2]*SPP[4] +
P[2][2]*SPP[8] +
P[9][2]*SPP[22] +
P[12][2]*SPP[18]) + SPP[10]*(
P[0][1]*SPP[5] -
P[1][1]*SPP[4] +
P[2][1]*SPP[8] +
P[9][1]*SPP[22] +
P[12][1]*SPP[18]);
969 nextP[1][5] =
P[1][5]*SPP[6] -
P[0][5]*SPP[2] -
P[2][5]*SPP[9] +
P[10][5]*SPP[22] +
P[13][5]*SPP[17] + SF[20]*(
P[1][15]*SPP[6] -
P[0][15]*SPP[2] -
P[2][15]*SPP[9] +
P[10][15]*SPP[22] +
P[13][15]*SPP[17]) - SPP[7]*(
P[1][0]*SPP[6] -
P[0][0]*SPP[2] -
P[2][0]*SPP[9] +
P[10][0]*SPP[22] +
P[13][0]*SPP[17]) + SPP[0]*(
P[1][2]*SPP[6] -
P[0][2]*SPP[2] -
P[2][2]*SPP[9] +
P[10][2]*SPP[22] +
P[13][2]*SPP[17]) + SPP[10]*(
P[1][1]*SPP[6] -
P[0][1]*SPP[2] -
P[2][1]*SPP[9] +
P[10][1]*SPP[22] +
P[13][1]*SPP[17]);
970 nextP[2][5] =
P[0][5]*SPP[14] -
P[1][5]*SPP[3] +
P[2][5]*SPP[13] +
P[11][5]*SPP[22] +
P[14][5]*SPP[16] + SF[20]*(
P[0][15]*SPP[14] -
P[1][15]*SPP[3] +
P[2][15]*SPP[13] +
P[11][15]*SPP[22] +
P[14][15]*SPP[16]) - SPP[7]*(
P[0][0]*SPP[14] -
P[1][0]*SPP[3] +
P[2][0]*SPP[13] +
P[11][0]*SPP[22] +
P[14][0]*SPP[16]) + SPP[0]*(
P[0][2]*SPP[14] -
P[1][2]*SPP[3] +
P[2][2]*SPP[13] +
P[11][2]*SPP[22] +
P[14][2]*SPP[16]) + SPP[10]*(
P[0][1]*SPP[14] -
P[1][1]*SPP[3] +
P[2][1]*SPP[13] +
P[11][1]*SPP[22] +
P[14][1]*SPP[16]);
971 nextP[3][5] =
P[3][5] +
SQ[1] +
P[0][5]*SPP[1] +
P[1][5]*SPP[19] +
P[2][5]*SPP[15] -
P[15][5]*SPP[21] + SF[20]*(
P[3][15] +
P[0][15]*SPP[1] +
P[1][15]*SPP[19] +
P[2][15]*SPP[15] -
P[15][15]*SPP[21]) - SPP[7]*(
P[3][0] +
P[0][0]*SPP[1] +
P[1][0]*SPP[19] +
P[2][0]*SPP[15] -
P[15][0]*SPP[21]) + SPP[0]*(
P[3][2] +
P[0][2]*SPP[1] +
P[1][2]*SPP[19] +
P[2][2]*SPP[15] -
P[15][2]*SPP[21]) + SPP[10]*(
P[3][1] +
P[0][1]*SPP[1] +
P[1][1]*SPP[19] +
P[2][1]*SPP[15] -
P[15][1]*SPP[21]);
972 nextP[4][5] =
P[4][5] +
SQ[0] +
P[15][5]*SF[22] +
P[0][5]*SPP[20] +
P[1][5]*SPP[12] +
P[2][5]*SPP[11] + SF[20]*(
P[4][15] +
P[15][15]*SF[22] +
P[0][15]*SPP[20] +
P[1][15]*SPP[12] +
P[2][15]*SPP[11]) - SPP[7]*(
P[4][0] +
P[15][0]*SF[22] +
P[0][0]*SPP[20] +
P[1][0]*SPP[12] +
P[2][0]*SPP[11]) + SPP[0]*(
P[4][2] +
P[15][2]*SF[22] +
P[0][2]*SPP[20] +
P[1][2]*SPP[12] +
P[2][2]*SPP[11]) + SPP[10]*(
P[4][1] +
P[15][1]*SF[22] +
P[0][1]*SPP[20] +
P[1][1]*SPP[12] +
P[2][1]*SPP[11]);
973 nextP[5][5] =
P[5][5] +
P[15][5]*SF[20] -
P[0][5]*SPP[7] +
P[1][5]*SPP[10] +
P[2][5]*SPP[0] + dvxNoise*
sq(
SQ[5] - 2*q0*q2) + dvyNoise*
sq(
SQ[4] + 2*q0*q1) + SF[20]*(
P[5][15] +
P[15][15]*SF[20] -
P[0][15]*SPP[7] +
P[1][15]*SPP[10] +
P[2][15]*SPP[0]) - SPP[7]*(
P[5][0] +
P[15][0]*SF[20] -
P[0][0]*SPP[7] +
P[1][0]*SPP[10] +
P[2][0]*SPP[0]) + SPP[0]*(
P[5][2] +
P[15][2]*SF[20] -
P[0][2]*SPP[7] +
P[1][2]*SPP[10] +
P[2][2]*SPP[0]) + SPP[10]*(
P[5][1] +
P[15][1]*SF[20] -
P[0][1]*SPP[7] +
P[1][1]*SPP[10] +
P[2][1]*SPP[0]) + dvzNoise*
sq(
SG[1] -
SG[2] -
SG[3] +
SQ[7]);
974 nextP[0][6] =
P[0][6]*SPP[5] -
P[1][6]*SPP[4] +
P[2][6]*SPP[8] +
P[9][6]*SPP[22] +
P[12][6]*SPP[18] +
dt*(
P[0][3]*SPP[5] -
P[1][3]*SPP[4] +
P[2][3]*SPP[8] +
P[9][3]*SPP[22] +
P[12][3]*SPP[18]);
975 nextP[1][6] =
P[1][6]*SPP[6] -
P[0][6]*SPP[2] -
P[2][6]*SPP[9] +
P[10][6]*SPP[22] +
P[13][6]*SPP[17] +
dt*(
P[1][3]*SPP[6] -
P[0][3]*SPP[2] -
P[2][3]*SPP[9] +
P[10][3]*SPP[22] +
P[13][3]*SPP[17]);
976 nextP[2][6] =
P[0][6]*SPP[14] -
P[1][6]*SPP[3] +
P[2][6]*SPP[13] +
P[11][6]*SPP[22] +
P[14][6]*SPP[16] +
dt*(
P[0][3]*SPP[14] -
P[1][3]*SPP[3] +
P[2][3]*SPP[13] +
P[11][3]*SPP[22] +
P[14][3]*SPP[16]);
977 nextP[3][6] =
P[3][6] +
P[0][6]*SPP[1] +
P[1][6]*SPP[19] +
P[2][6]*SPP[15] -
P[15][6]*SPP[21] +
dt*(
P[3][3] +
P[0][3]*SPP[1] +
P[1][3]*SPP[19] +
P[2][3]*SPP[15] -
P[15][3]*SPP[21]);
978 nextP[4][6] =
P[4][6] +
P[15][6]*SF[22] +
P[0][6]*SPP[20] +
P[1][6]*SPP[12] +
P[2][6]*SPP[11] +
dt*(
P[4][3] +
P[15][3]*SF[22] +
P[0][3]*SPP[20] +
P[1][3]*SPP[12] +
P[2][3]*SPP[11]);
979 nextP[5][6] =
P[5][6] +
P[15][6]*SF[20] -
P[0][6]*SPP[7] +
P[1][6]*SPP[10] +
P[2][6]*SPP[0] +
dt*(
P[5][3] +
P[15][3]*SF[20] -
P[0][3]*SPP[7] +
P[1][3]*SPP[10] +
P[2][3]*SPP[0]);
980 nextP[6][6] =
P[6][6] +
P[3][6]*
dt +
dt*(
P[6][3] +
P[3][3]*
dt);
981 nextP[0][7] =
P[0][7]*SPP[5] -
P[1][7]*SPP[4] +
P[2][7]*SPP[8] +
P[9][7]*SPP[22] +
P[12][7]*SPP[18] +
dt*(
P[0][4]*SPP[5] -
P[1][4]*SPP[4] +
P[2][4]*SPP[8] +
P[9][4]*SPP[22] +
P[12][4]*SPP[18]);
982 nextP[1][7] =
P[1][7]*SPP[6] -
P[0][7]*SPP[2] -
P[2][7]*SPP[9] +
P[10][7]*SPP[22] +
P[13][7]*SPP[17] +
dt*(
P[1][4]*SPP[6] -
P[0][4]*SPP[2] -
P[2][4]*SPP[9] +
P[10][4]*SPP[22] +
P[13][4]*SPP[17]);
983 nextP[2][7] =
P[0][7]*SPP[14] -
P[1][7]*SPP[3] +
P[2][7]*SPP[13] +
P[11][7]*SPP[22] +
P[14][7]*SPP[16] +
dt*(
P[0][4]*SPP[14] -
P[1][4]*SPP[3] +
P[2][4]*SPP[13] +
P[11][4]*SPP[22] +
P[14][4]*SPP[16]);
984 nextP[3][7] =
P[3][7] +
P[0][7]*SPP[1] +
P[1][7]*SPP[19] +
P[2][7]*SPP[15] -
P[15][7]*SPP[21] +
dt*(
P[3][4] +
P[0][4]*SPP[1] +
P[1][4]*SPP[19] +
P[2][4]*SPP[15] -
P[15][4]*SPP[21]);
985 nextP[4][7] =
P[4][7] +
P[15][7]*SF[22] +
P[0][7]*SPP[20] +
P[1][7]*SPP[12] +
P[2][7]*SPP[11] +
dt*(
P[4][4] +
P[15][4]*SF[22] +
P[0][4]*SPP[20] +
P[1][4]*SPP[12] +
P[2][4]*SPP[11]);
986 nextP[5][7] =
P[5][7] +
P[15][7]*SF[20] -
P[0][7]*SPP[7] +
P[1][7]*SPP[10] +
P[2][7]*SPP[0] +
dt*(
P[5][4] +
P[15][4]*SF[20] -
P[0][4]*SPP[7] +
P[1][4]*SPP[10] +
P[2][4]*SPP[0]);
987 nextP[6][7] =
P[6][7] +
P[3][7]*
dt +
dt*(
P[6][4] +
P[3][4]*
dt);
988 nextP[7][7] =
P[7][7] +
P[4][7]*
dt +
dt*(
P[7][4] +
P[4][4]*
dt);
989 nextP[0][8] =
P[0][8]*SPP[5] -
P[1][8]*SPP[4] +
P[2][8]*SPP[8] +
P[9][8]*SPP[22] +
P[12][8]*SPP[18] +
dt*(
P[0][5]*SPP[5] -
P[1][5]*SPP[4] +
P[2][5]*SPP[8] +
P[9][5]*SPP[22] +
P[12][5]*SPP[18]);
990 nextP[1][8] =
P[1][8]*SPP[6] -
P[0][8]*SPP[2] -
P[2][8]*SPP[9] +
P[10][8]*SPP[22] +
P[13][8]*SPP[17] +
dt*(
P[1][5]*SPP[6] -
P[0][5]*SPP[2] -
P[2][5]*SPP[9] +
P[10][5]*SPP[22] +
P[13][5]*SPP[17]);
991 nextP[2][8] =
P[0][8]*SPP[14] -
P[1][8]*SPP[3] +
P[2][8]*SPP[13] +
P[11][8]*SPP[22] +
P[14][8]*SPP[16] +
dt*(
P[0][5]*SPP[14] -
P[1][5]*SPP[3] +
P[2][5]*SPP[13] +
P[11][5]*SPP[22] +
P[14][5]*SPP[16]);
992 nextP[3][8] =
P[3][8] +
P[0][8]*SPP[1] +
P[1][8]*SPP[19] +
P[2][8]*SPP[15] -
P[15][8]*SPP[21] +
dt*(
P[3][5] +
P[0][5]*SPP[1] +
P[1][5]*SPP[19] +
P[2][5]*SPP[15] -
P[15][5]*SPP[21]);
993 nextP[4][8] =
P[4][8] +
P[15][8]*SF[22] +
P[0][8]*SPP[20] +
P[1][8]*SPP[12] +
P[2][8]*SPP[11] +
dt*(
P[4][5] +
P[15][5]*SF[22] +
P[0][5]*SPP[20] +
P[1][5]*SPP[12] +
P[2][5]*SPP[11]);
994 nextP[5][8] =
P[5][8] +
P[15][8]*SF[20] -
P[0][8]*SPP[7] +
P[1][8]*SPP[10] +
P[2][8]*SPP[0] +
dt*(
P[5][5] +
P[15][5]*SF[20] -
P[0][5]*SPP[7] +
P[1][5]*SPP[10] +
P[2][5]*SPP[0]);
995 nextP[6][8] =
P[6][8] +
P[3][8]*
dt +
dt*(
P[6][5] +
P[3][5]*
dt);
996 nextP[7][8] =
P[7][8] +
P[4][8]*
dt +
dt*(
P[7][5] +
P[4][5]*
dt);
997 nextP[8][8] =
P[8][8] +
P[5][8]*
dt +
dt*(
P[8][5] +
P[5][5]*
dt);
998 nextP[0][9] =
P[0][9]*SPP[5] -
P[1][9]*SPP[4] +
P[2][9]*SPP[8] +
P[9][9]*SPP[22] +
P[12][9]*SPP[18];
999 nextP[1][9] =
P[1][9]*SPP[6] -
P[0][9]*SPP[2] -
P[2][9]*SPP[9] +
P[10][9]*SPP[22] +
P[13][9]*SPP[17];
1000 nextP[2][9] =
P[0][9]*SPP[14] -
P[1][9]*SPP[3] +
P[2][9]*SPP[13] +
P[11][9]*SPP[22] +
P[14][9]*SPP[16];
1001 nextP[3][9] =
P[3][9] +
P[0][9]*SPP[1] +
P[1][9]*SPP[19] +
P[2][9]*SPP[15] -
P[15][9]*SPP[21];
1002 nextP[4][9] =
P[4][9] +
P[15][9]*SF[22] +
P[0][9]*SPP[20] +
P[1][9]*SPP[12] +
P[2][9]*SPP[11];
1003 nextP[5][9] =
P[5][9] +
P[15][9]*SF[20] -
P[0][9]*SPP[7] +
P[1][9]*SPP[10] +
P[2][9]*SPP[0];
1004 nextP[6][9] =
P[6][9] +
P[3][9]*
dt;
1005 nextP[7][9] =
P[7][9] +
P[4][9]*
dt;
1006 nextP[8][9] =
P[8][9] +
P[5][9]*
dt;
1007 nextP[9][9] =
P[9][9];
1008 nextP[0][10] =
P[0][10]*SPP[5] -
P[1][10]*SPP[4] +
P[2][10]*SPP[8] +
P[9][10]*SPP[22] +
P[12][10]*SPP[18];
1009 nextP[1][10] =
P[1][10]*SPP[6] -
P[0][10]*SPP[2] -
P[2][10]*SPP[9] +
P[10][10]*SPP[22] +
P[13][10]*SPP[17];
1010 nextP[2][10] =
P[0][10]*SPP[14] -
P[1][10]*SPP[3] +
P[2][10]*SPP[13] +
P[11][10]*SPP[22] +
P[14][10]*SPP[16];
1011 nextP[3][10] =
P[3][10] +
P[0][10]*SPP[1] +
P[1][10]*SPP[19] +
P[2][10]*SPP[15] -
P[15][10]*SPP[21];
1012 nextP[4][10] =
P[4][10] +
P[15][10]*SF[22] +
P[0][10]*SPP[20] +
P[1][10]*SPP[12] +
P[2][10]*SPP[11];
1013 nextP[5][10] =
P[5][10] +
P[15][10]*SF[20] -
P[0][10]*SPP[7] +
P[1][10]*SPP[10] +
P[2][10]*SPP[0];
1014 nextP[6][10] =
P[6][10] +
P[3][10]*
dt;
1015 nextP[7][10] =
P[7][10] +
P[4][10]*
dt;
1016 nextP[8][10] =
P[8][10] +
P[5][10]*
dt;
1017 nextP[9][10] =
P[9][10];
1018 nextP[10][10] =
P[10][10];
1019 nextP[0][11] =
P[0][11]*SPP[5] -
P[1][11]*SPP[4] +
P[2][11]*SPP[8] +
P[9][11]*SPP[22] +
P[12][11]*SPP[18];
1020 nextP[1][11] =
P[1][11]*SPP[6] -
P[0][11]*SPP[2] -
P[2][11]*SPP[9] +
P[10][11]*SPP[22] +
P[13][11]*SPP[17];
1021 nextP[2][11] =
P[0][11]*SPP[14] -
P[1][11]*SPP[3] +
P[2][11]*SPP[13] +
P[11][11]*SPP[22] +
P[14][11]*SPP[16];
1022 nextP[3][11] =
P[3][11] +
P[0][11]*SPP[1] +
P[1][11]*SPP[19] +
P[2][11]*SPP[15] -
P[15][11]*SPP[21];
1023 nextP[4][11] =
P[4][11] +
P[15][11]*SF[22] +
P[0][11]*SPP[20] +
P[1][11]*SPP[12] +
P[2][11]*SPP[11];
1024 nextP[5][11] =
P[5][11] +
P[15][11]*SF[20] -
P[0][11]*SPP[7] +
P[1][11]*SPP[10] +
P[2][11]*SPP[0];
1025 nextP[6][11] =
P[6][11] +
P[3][11]*
dt;
1026 nextP[7][11] =
P[7][11] +
P[4][11]*
dt;
1027 nextP[8][11] =
P[8][11] +
P[5][11]*
dt;
1028 nextP[9][11] =
P[9][11];
1029 nextP[10][11] =
P[10][11];
1030 nextP[11][11] =
P[11][11];
1031 nextP[0][12] =
P[0][12]*SPP[5] -
P[1][12]*SPP[4] +
P[2][12]*SPP[8] +
P[9][12]*SPP[22] +
P[12][12]*SPP[18];
1032 nextP[1][12] =
P[1][12]*SPP[6] -
P[0][12]*SPP[2] -
P[2][12]*SPP[9] +
P[10][12]*SPP[22] +
P[13][12]*SPP[17];
1033 nextP[2][12] =
P[0][12]*SPP[14] -
P[1][12]*SPP[3] +
P[2][12]*SPP[13] +
P[11][12]*SPP[22] +
P[14][12]*SPP[16];
1034 nextP[3][12] =
P[3][12] +
P[0][12]*SPP[1] +
P[1][12]*SPP[19] +
P[2][12]*SPP[15] -
P[15][12]*SPP[21];
1035 nextP[4][12] =
P[4][12] +
P[15][12]*SF[22] +
P[0][12]*SPP[20] +
P[1][12]*SPP[12] +
P[2][12]*SPP[11];
1036 nextP[5][12] =
P[5][12] +
P[15][12]*SF[20] -
P[0][12]*SPP[7] +
P[1][12]*SPP[10] +
P[2][12]*SPP[0];
1037 nextP[6][12] =
P[6][12] +
P[3][12]*
dt;
1038 nextP[7][12] =
P[7][12] +
P[4][12]*
dt;
1039 nextP[8][12] =
P[8][12] +
P[5][12]*
dt;
1040 nextP[9][12] =
P[9][12];
1041 nextP[10][12] =
P[10][12];
1042 nextP[11][12] =
P[11][12];
1043 nextP[12][12] =
P[12][12];
1044 nextP[0][13] =
P[0][13]*SPP[5] -
P[1][13]*SPP[4] +
P[2][13]*SPP[8] +
P[9][13]*SPP[22] +
P[12][13]*SPP[18];
1045 nextP[1][13] =
P[1][13]*SPP[6] -
P[0][13]*SPP[2] -
P[2][13]*SPP[9] +
P[10][13]*SPP[22] +
P[13][13]*SPP[17];
1046 nextP[2][13] =
P[0][13]*SPP[14] -
P[1][13]*SPP[3] +
P[2][13]*SPP[13] +
P[11][13]*SPP[22] +
P[14][13]*SPP[16];
1047 nextP[3][13] =
P[3][13] +
P[0][13]*SPP[1] +
P[1][13]*SPP[19] +
P[2][13]*SPP[15] -
P[15][13]*SPP[21];
1048 nextP[4][13] =
P[4][13] +
P[15][13]*SF[22] +
P[0][13]*SPP[20] +
P[1][13]*SPP[12] +
P[2][13]*SPP[11];
1049 nextP[5][13] =
P[5][13] +
P[15][13]*SF[20] -
P[0][13]*SPP[7] +
P[1][13]*SPP[10] +
P[2][13]*SPP[0];
1050 nextP[6][13] =
P[6][13] +
P[3][13]*
dt;
1051 nextP[7][13] =
P[7][13] +
P[4][13]*
dt;
1052 nextP[8][13] =
P[8][13] +
P[5][13]*
dt;
1053 nextP[9][13] =
P[9][13];
1054 nextP[10][13] =
P[10][13];
1055 nextP[11][13] =
P[11][13];
1056 nextP[12][13] =
P[12][13];
1057 nextP[13][13] =
P[13][13];
1058 nextP[0][14] =
P[0][14]*SPP[5] -
P[1][14]*SPP[4] +
P[2][14]*SPP[8] +
P[9][14]*SPP[22] +
P[12][14]*SPP[18];
1059 nextP[1][14] =
P[1][14]*SPP[6] -
P[0][14]*SPP[2] -
P[2][14]*SPP[9] +
P[10][14]*SPP[22] +
P[13][14]*SPP[17];
1060 nextP[2][14] =
P[0][14]*SPP[14] -
P[1][14]*SPP[3] +
P[2][14]*SPP[13] +
P[11][14]*SPP[22] +
P[14][14]*SPP[16];
1061 nextP[3][14] =
P[3][14] +
P[0][14]*SPP[1] +
P[1][14]*SPP[19] +
P[2][14]*SPP[15] -
P[15][14]*SPP[21];
1062 nextP[4][14] =
P[4][14] +
P[15][14]*SF[22] +
P[0][14]*SPP[20] +
P[1][14]*SPP[12] +
P[2][14]*SPP[11];
1063 nextP[5][14] =
P[5][14] +
P[15][14]*SF[20] -
P[0][14]*SPP[7] +
P[1][14]*SPP[10] +
P[2][14]*SPP[0];
1064 nextP[6][14] =
P[6][14] +
P[3][14]*
dt;
1065 nextP[7][14] =
P[7][14] +
P[4][14]*
dt;
1066 nextP[8][14] =
P[8][14] +
P[5][14]*
dt;
1067 nextP[9][14] =
P[9][14];
1068 nextP[10][14] =
P[10][14];
1069 nextP[11][14] =
P[11][14];
1070 nextP[12][14] =
P[12][14];
1071 nextP[13][14] =
P[13][14];
1072 nextP[14][14] =
P[14][14];
1073 nextP[0][15] =
P[0][15]*SPP[5] -
P[1][15]*SPP[4] +
P[2][15]*SPP[8] +
P[9][15]*SPP[22] +
P[12][15]*SPP[18];
1074 nextP[1][15] =
P[1][15]*SPP[6] -
P[0][15]*SPP[2] -
P[2][15]*SPP[9] +
P[10][15]*SPP[22] +
P[13][15]*SPP[17];
1075 nextP[2][15] =
P[0][15]*SPP[14] -
P[1][15]*SPP[3] +
P[2][15]*SPP[13] +
P[11][15]*SPP[22] +
P[14][15]*SPP[16];
1076 nextP[3][15] =
P[3][15] +
P[0][15]*SPP[1] +
P[1][15]*SPP[19] +
P[2][15]*SPP[15] -
P[15][15]*SPP[21];
1077 nextP[4][15] =
P[4][15] +
P[15][15]*SF[22] +
P[0][15]*SPP[20] +
P[1][15]*SPP[12] +
P[2][15]*SPP[11];
1078 nextP[5][15] =
P[5][15] +
P[15][15]*SF[20] -
P[0][15]*SPP[7] +
P[1][15]*SPP[10] +
P[2][15]*SPP[0];
1079 nextP[6][15] =
P[6][15] +
P[3][15]*
dt;
1080 nextP[7][15] =
P[7][15] +
P[4][15]*
dt;
1081 nextP[8][15] =
P[8][15] +
P[5][15]*
dt;
1082 nextP[9][15] =
P[9][15];
1083 nextP[10][15] =
P[10][15];
1084 nextP[11][15] =
P[11][15];
1085 nextP[12][15] =
P[12][15];
1086 nextP[13][15] =
P[13][15];
1087 nextP[14][15] =
P[14][15];
1088 nextP[15][15] =
P[15][15];
1091 nextP[0][16] =
P[0][16]*SPP[5] -
P[1][16]*SPP[4] +
P[2][16]*SPP[8] +
P[9][16]*SPP[22] +
P[12][16]*SPP[18];
1092 nextP[1][16] =
P[1][16]*SPP[6] -
P[0][16]*SPP[2] -
P[2][16]*SPP[9] +
P[10][16]*SPP[22] +
P[13][16]*SPP[17];
1093 nextP[2][16] =
P[0][16]*SPP[14] -
P[1][16]*SPP[3] +
P[2][16]*SPP[13] +
P[11][16]*SPP[22] +
P[14][16]*SPP[16];
1094 nextP[3][16] =
P[3][16] +
P[0][16]*SPP[1] +
P[1][16]*SPP[19] +
P[2][16]*SPP[15] -
P[15][16]*SPP[21];
1095 nextP[4][16] =
P[4][16] +
P[15][16]*SF[22] +
P[0][16]*SPP[20] +
P[1][16]*SPP[12] +
P[2][16]*SPP[11];
1096 nextP[5][16] =
P[5][16] +
P[15][16]*SF[20] -
P[0][16]*SPP[7] +
P[1][16]*SPP[10] +
P[2][16]*SPP[0];
1097 nextP[6][16] =
P[6][16] +
P[3][16]*
dt;
1098 nextP[7][16] =
P[7][16] +
P[4][16]*
dt;
1099 nextP[8][16] =
P[8][16] +
P[5][16]*
dt;
1100 nextP[9][16] =
P[9][16];
1101 nextP[10][16] =
P[10][16];
1102 nextP[11][16] =
P[11][16];
1103 nextP[12][16] =
P[12][16];
1104 nextP[13][16] =
P[13][16];
1105 nextP[14][16] =
P[14][16];
1106 nextP[15][16] =
P[15][16];
1107 nextP[16][16] =
P[16][16];
1108 nextP[0][17] =
P[0][17]*SPP[5] -
P[1][17]*SPP[4] +
P[2][17]*SPP[8] +
P[9][17]*SPP[22] +
P[12][17]*SPP[18];
1109 nextP[1][17] =
P[1][17]*SPP[6] -
P[0][17]*SPP[2] -
P[2][17]*SPP[9] +
P[10][17]*SPP[22] +
P[13][17]*SPP[17];
1110 nextP[2][17] =
P[0][17]*SPP[14] -
P[1][17]*SPP[3] +
P[2][17]*SPP[13] +
P[11][17]*SPP[22] +
P[14][17]*SPP[16];
1111 nextP[3][17] =
P[3][17] +
P[0][17]*SPP[1] +
P[1][17]*SPP[19] +
P[2][17]*SPP[15] -
P[15][17]*SPP[21];
1112 nextP[4][17] =
P[4][17] +
P[15][17]*SF[22] +
P[0][17]*SPP[20] +
P[1][17]*SPP[12] +
P[2][17]*SPP[11];
1113 nextP[5][17] =
P[5][17] +
P[15][17]*SF[20] -
P[0][17]*SPP[7] +
P[1][17]*SPP[10] +
P[2][17]*SPP[0];
1114 nextP[6][17] =
P[6][17] +
P[3][17]*
dt;
1115 nextP[7][17] =
P[7][17] +
P[4][17]*
dt;
1116 nextP[8][17] =
P[8][17] +
P[5][17]*
dt;
1117 nextP[9][17] =
P[9][17];
1118 nextP[10][17] =
P[10][17];
1119 nextP[11][17] =
P[11][17];
1120 nextP[12][17] =
P[12][17];
1121 nextP[13][17] =
P[13][17];
1122 nextP[14][17] =
P[14][17];
1123 nextP[15][17] =
P[15][17];
1124 nextP[16][17] =
P[16][17];
1125 nextP[17][17] =
P[17][17];
1126 nextP[0][18] =
P[0][18]*SPP[5] -
P[1][18]*SPP[4] +
P[2][18]*SPP[8] +
P[9][18]*SPP[22] +
P[12][18]*SPP[18];
1127 nextP[1][18] =
P[1][18]*SPP[6] -
P[0][18]*SPP[2] -
P[2][18]*SPP[9] +
P[10][18]*SPP[22] +
P[13][18]*SPP[17];
1128 nextP[2][18] =
P[0][18]*SPP[14] -
P[1][18]*SPP[3] +
P[2][18]*SPP[13] +
P[11][18]*SPP[22] +
P[14][18]*SPP[16];
1129 nextP[3][18] =
P[3][18] +
P[0][18]*SPP[1] +
P[1][18]*SPP[19] +
P[2][18]*SPP[15] -
P[15][18]*SPP[21];
1130 nextP[4][18] =
P[4][18] +
P[15][18]*SF[22] +
P[0][18]*SPP[20] +
P[1][18]*SPP[12] +
P[2][18]*SPP[11];
1131 nextP[5][18] =
P[5][18] +
P[15][18]*SF[20] -
P[0][18]*SPP[7] +
P[1][18]*SPP[10] +
P[2][18]*SPP[0];
1132 nextP[6][18] =
P[6][18] +
P[3][18]*
dt;
1133 nextP[7][18] =
P[7][18] +
P[4][18]*
dt;
1134 nextP[8][18] =
P[8][18] +
P[5][18]*
dt;
1135 nextP[9][18] =
P[9][18];
1136 nextP[10][18] =
P[10][18];
1137 nextP[11][18] =
P[11][18];
1138 nextP[12][18] =
P[12][18];
1139 nextP[13][18] =
P[13][18];
1140 nextP[14][18] =
P[14][18];
1141 nextP[15][18] =
P[15][18];
1142 nextP[16][18] =
P[16][18];
1143 nextP[17][18] =
P[17][18];
1144 nextP[18][18] =
P[18][18];
1145 nextP[0][19] =
P[0][19]*SPP[5] -
P[1][19]*SPP[4] +
P[2][19]*SPP[8] +
P[9][19]*SPP[22] +
P[12][19]*SPP[18];
1146 nextP[1][19] =
P[1][19]*SPP[6] -
P[0][19]*SPP[2] -
P[2][19]*SPP[9] +
P[10][19]*SPP[22] +
P[13][19]*SPP[17];
1147 nextP[2][19] =
P[0][19]*SPP[14] -
P[1][19]*SPP[3] +
P[2][19]*SPP[13] +
P[11][19]*SPP[22] +
P[14][19]*SPP[16];
1148 nextP[3][19] =
P[3][19] +
P[0][19]*SPP[1] +
P[1][19]*SPP[19] +
P[2][19]*SPP[15] -
P[15][19]*SPP[21];
1149 nextP[4][19] =
P[4][19] +
P[15][19]*SF[22] +
P[0][19]*SPP[20] +
P[1][19]*SPP[12] +
P[2][19]*SPP[11];
1150 nextP[5][19] =
P[5][19] +
P[15][19]*SF[20] -
P[0][19]*SPP[7] +
P[1][19]*SPP[10] +
P[2][19]*SPP[0];
1151 nextP[6][19] =
P[6][19] +
P[3][19]*
dt;
1152 nextP[7][19] =
P[7][19] +
P[4][19]*
dt;
1153 nextP[8][19] =
P[8][19] +
P[5][19]*
dt;
1154 nextP[9][19] =
P[9][19];
1155 nextP[10][19] =
P[10][19];
1156 nextP[11][19] =
P[11][19];
1157 nextP[12][19] =
P[12][19];
1158 nextP[13][19] =
P[13][19];
1159 nextP[14][19] =
P[14][19];
1160 nextP[15][19] =
P[15][19];
1161 nextP[16][19] =
P[16][19];
1162 nextP[17][19] =
P[17][19];
1163 nextP[18][19] =
P[18][19];
1164 nextP[19][19] =
P[19][19];
1165 nextP[0][20] =
P[0][20]*SPP[5] -
P[1][20]*SPP[4] +
P[2][20]*SPP[8] +
P[9][20]*SPP[22] +
P[12][20]*SPP[18];
1166 nextP[1][20] =
P[1][20]*SPP[6] -
P[0][20]*SPP[2] -
P[2][20]*SPP[9] +
P[10][20]*SPP[22] +
P[13][20]*SPP[17];
1167 nextP[2][20] =
P[0][20]*SPP[14] -
P[1][20]*SPP[3] +
P[2][20]*SPP[13] +
P[11][20]*SPP[22] +
P[14][20]*SPP[16];
1168 nextP[3][20] =
P[3][20] +
P[0][20]*SPP[1] +
P[1][20]*SPP[19] +
P[2][20]*SPP[15] -
P[15][20]*SPP[21];
1169 nextP[4][20] =
P[4][20] +
P[15][20]*SF[22] +
P[0][20]*SPP[20] +
P[1][20]*SPP[12] +
P[2][20]*SPP[11];
1170 nextP[5][20] =
P[5][20] +
P[15][20]*SF[20] -
P[0][20]*SPP[7] +
P[1][20]*SPP[10] +
P[2][20]*SPP[0];
1171 nextP[6][20] =
P[6][20] +
P[3][20]*
dt;
1172 nextP[7][20] =
P[7][20] +
P[4][20]*
dt;
1173 nextP[8][20] =
P[8][20] +
P[5][20]*
dt;
1174 nextP[9][20] =
P[9][20];
1175 nextP[10][20] =
P[10][20];
1176 nextP[11][20] =
P[11][20];
1177 nextP[12][20] =
P[12][20];
1178 nextP[13][20] =
P[13][20];
1179 nextP[14][20] =
P[14][20];
1180 nextP[15][20] =
P[15][20];
1181 nextP[16][20] =
P[16][20];
1182 nextP[17][20] =
P[17][20];
1183 nextP[18][20] =
P[18][20];
1184 nextP[19][20] =
P[19][20];
1185 nextP[20][20] =
P[20][20];
1186 nextP[0][21] =
P[0][21]*SPP[5] -
P[1][21]*SPP[4] +
P[2][21]*SPP[8] +
P[9][21]*SPP[22] +
P[12][21]*SPP[18];
1187 nextP[1][21] =
P[1][21]*SPP[6] -
P[0][21]*SPP[2] -
P[2][21]*SPP[9] +
P[10][21]*SPP[22] +
P[13][21]*SPP[17];
1188 nextP[2][21] =
P[0][21]*SPP[14] -
P[1][21]*SPP[3] +
P[2][21]*SPP[13] +
P[11][21]*SPP[22] +
P[14][21]*SPP[16];
1189 nextP[3][21] =
P[3][21] +
P[0][21]*SPP[1] +
P[1][21]*SPP[19] +
P[2][21]*SPP[15] -
P[15][21]*SPP[21];
1190 nextP[4][21] =
P[4][21] +
P[15][21]*SF[22] +
P[0][21]*SPP[20] +
P[1][21]*SPP[12] +
P[2][21]*SPP[11];
1191 nextP[5][21] =
P[5][21] +
P[15][21]*SF[20] -
P[0][21]*SPP[7] +
P[1][21]*SPP[10] +
P[2][21]*SPP[0];
1192 nextP[6][21] =
P[6][21] +
P[3][21]*
dt;
1193 nextP[7][21] =
P[7][21] +
P[4][21]*
dt;
1194 nextP[8][21] =
P[8][21] +
P[5][21]*
dt;
1195 nextP[9][21] =
P[9][21];
1196 nextP[10][21] =
P[10][21];
1197 nextP[11][21] =
P[11][21];
1198 nextP[12][21] =
P[12][21];
1199 nextP[13][21] =
P[13][21];
1200 nextP[14][21] =
P[14][21];
1201 nextP[15][21] =
P[15][21];
1202 nextP[16][21] =
P[16][21];
1203 nextP[17][21] =
P[17][21];
1204 nextP[18][21] =
P[18][21];
1205 nextP[19][21] =
P[19][21];
1206 nextP[20][21] =
P[20][21];
1207 nextP[21][21] =
P[21][21];
1210 nextP[0][22] =
P[0][22]*SPP[5] -
P[1][22]*SPP[4] +
P[2][22]*SPP[8] +
P[9][22]*SPP[22] +
P[12][22]*SPP[18];
1211 nextP[1][22] =
P[1][22]*SPP[6] -
P[0][22]*SPP[2] -
P[2][22]*SPP[9] +
P[10][22]*SPP[22] +
P[13][22]*SPP[17];
1212 nextP[2][22] =
P[0][22]*SPP[14] -
P[1][22]*SPP[3] +
P[2][22]*SPP[13] +
P[11][22]*SPP[22] +
P[14][22]*SPP[16];
1213 nextP[3][22] =
P[3][22] +
P[0][22]*SPP[1] +
P[1][22]*SPP[19] +
P[2][22]*SPP[15] -
P[15][22]*SPP[21];
1214 nextP[4][22] =
P[4][22] +
P[15][22]*SF[22] +
P[0][22]*SPP[20] +
P[1][22]*SPP[12] +
P[2][22]*SPP[11];
1215 nextP[5][22] =
P[5][22] +
P[15][22]*SF[20] -
P[0][22]*SPP[7] +
P[1][22]*SPP[10] +
P[2][22]*SPP[0];
1216 nextP[6][22] =
P[6][22] +
P[3][22]*
dt;
1217 nextP[7][22] =
P[7][22] +
P[4][22]*
dt;
1218 nextP[8][22] =
P[8][22] +
P[5][22]*
dt;
1219 nextP[9][22] =
P[9][22];
1220 nextP[10][22] =
P[10][22];
1221 nextP[11][22] =
P[11][22];
1222 nextP[12][22] =
P[12][22];
1223 nextP[13][22] =
P[13][22];
1224 nextP[14][22] =
P[14][22];
1225 nextP[15][22] =
P[15][22];
1226 nextP[16][22] =
P[16][22];
1227 nextP[17][22] =
P[17][22];
1228 nextP[18][22] =
P[18][22];
1229 nextP[19][22] =
P[19][22];
1230 nextP[20][22] =
P[20][22];
1231 nextP[21][22] =
P[21][22];
1232 nextP[22][22] =
P[22][22];
1233 nextP[0][23] =
P[0][23]*SPP[5] -
P[1][23]*SPP[4] +
P[2][23]*SPP[8] +
P[9][23]*SPP[22] +
P[12][23]*SPP[18];
1234 nextP[1][23] =
P[1][23]*SPP[6] -
P[0][23]*SPP[2] -
P[2][23]*SPP[9] +
P[10][23]*SPP[22] +
P[13][23]*SPP[17];
1235 nextP[2][23] =
P[0][23]*SPP[14] -
P[1][23]*SPP[3] +
P[2][23]*SPP[13] +
P[11][23]*SPP[22] +
P[14][23]*SPP[16];
1236 nextP[3][23] =
P[3][23] +
P[0][23]*SPP[1] +
P[1][23]*SPP[19] +
P[2][23]*SPP[15] -
P[15][23]*SPP[21];
1237 nextP[4][23] =
P[4][23] +
P[15][23]*SF[22] +
P[0][23]*SPP[20] +
P[1][23]*SPP[12] +
P[2][23]*SPP[11];
1238 nextP[5][23] =
P[5][23] +
P[15][23]*SF[20] -
P[0][23]*SPP[7] +
P[1][23]*SPP[10] +
P[2][23]*SPP[0];
1239 nextP[6][23] =
P[6][23] +
P[3][23]*
dt;
1240 nextP[7][23] =
P[7][23] +
P[4][23]*
dt;
1241 nextP[8][23] =
P[8][23] +
P[5][23]*
dt;
1242 nextP[9][23] =
P[9][23];
1243 nextP[10][23] =
P[10][23];
1244 nextP[11][23] =
P[11][23];
1245 nextP[12][23] =
P[12][23];
1246 nextP[13][23] =
P[13][23];
1247 nextP[14][23] =
P[14][23];
1248 nextP[15][23] =
P[15][23];
1249 nextP[16][23] =
P[16][23];
1250 nextP[17][23] =
P[17][23];
1251 nextP[18][23] =
P[18][23];
1252 nextP[19][23] =
P[19][23];
1253 nextP[20][23] =
P[20][23];
1254 nextP[21][23] =
P[21][23];
1255 nextP[22][23] =
P[22][23];
1256 nextP[23][23] =
P[23][23];
1261 for (uint8_t colIndex=0; colIndex<=
stateIndexLim; colIndex++)
1263 for (uint8_t rowIndex=0; rowIndex<colIndex; rowIndex++)
1265 nextP[colIndex][rowIndex] = nextP[rowIndex][colIndex];
1279 if ((
P[6][6] +
P[7][7]) > 1e4f)
1281 for (uint8_t i=6; i<=7; i++)
1285 nextP[i][j] =
P[i][j];
1286 nextP[j][i] =
P[j][i];
1304 for (row=first; row<=last; row++)
1306 memset(&covMat[row][0], 0,
sizeof(covMat[0][0])*24);
1314 for (row=0; row<=23; row++)
1316 memset(&covMat[row][first], 0,
sizeof(covMat[0][0])*(1+last-first));
1370 for (uint8_t j=0; j<=i-1; j++)
1372 float temp = 0.5f*(
P[i][j] +
P[j][i]);
1445 float lat_rad =
radians(latitude*1.0e-7
f);
1472 float magHeading = atan2f(initMagNED.
y, initMagNED.
x);
1478 yaw = magDecAng - magHeading;
1510 P[19][19] =
P[18][18];
1511 P[20][20] =
P[18][18];
1512 P[21][21] =
P[18][18];
1536 for (uint8_t index=0; index<=2; index++) {
1537 varTemp[index] =
P[index][index];
1541 for (uint8_t index=0; index<=2; index++) {
1542 P[index][index] = varTemp[index];
1546 #endif // HAL_CPU_CLASS
float norm(const T first, const U second, const Params... parameters)
void to_euler(float &roll, float &pitch, float &yaw) const
uint32_t lastVelPassTime_ms
AP_Float _gpsVertVelNoise
void correctDeltaAngle(Vector3f &delAng, float delAngDT)
struct Location gpsloc_prev
uint32_t lastBaroReceived_ms
obs_ring_buffer_t< gps_elements > storedGPS
uint32_t extNavMeasTime_ms
void zeroCols(Matrix24 &covMat, uint8_t first, uint8_t last)
Quaternion quatAtLastMagReset
imu_ring_buffer_t< output_elements > storedOutput
bool extNavYawResetRequest
virtual perf_counter_t perf_alloc(perf_counter_type t, const char *name)
float get_declination() const
char prearm_fail_string[40]
void InitialiseVariables()
void UpdateStrapdownEquationsNED()
mag_elements magDataDelayed
output_elements outputDataNew
uint64_t imuSampleTime_us
bool assume_zero_sideslip(void) const
const struct Location & get_home(void) const
AP_Float _gpsHorizVelNoise
float yawInnovAtLastMagReset
obs_ring_buffer_t< range_elements > storedRange
uint32_t lastRngMeasTime_ms
ext_nav_elements extNavDataNew
AP_Float _gyroBiasProcessNoise
struct NavEKF2_core::@147 mag_state
void zeroRows(Matrix24 &covMat, uint8_t first, uint8_t last)
void from_euler(float roll, float pitch, float yaw)
void CovariancePrediction()
bool finalInflightMagInit
float beaconVehiclePosErr
void from_euler(float roll, float pitch, float yaw)
uint32_t magYawResetTimer_ms
void updateFilterStatus(void)
float storedRngMeas[2][3]
uint32_t lastDecayTime_ms
bool setup_core(NavEKF2 *_frontend, uint8_t _imu_index, uint8_t _core_index)
bool optFlowFusionDelayed
uint32_t lastHgtPassTime_ms
bool rngBcnAlignmentStarted
uint32_t lastTimeGpsReceived_ms
Quaternion calcQuatAndFieldStates(float roll, float pitch)
struct NavEKF2_core::state_elements & stateStruct
uint32_t timeAtLastAuxEKF_ms
uint32_t lastGpsVelFail_ms
uint32_t touchdownExpectedSet_ms
uint32_t takeoffExpectedSet_ms
uint32_t imuSampleTime_ms
int32_t lat
param 3 - Latitude * 10**7
output_elements outputDataDelayed
bool InitialiseFilterBootstrap(void)
obs_ring_buffer_t< tas_elements > storedTAS
uint32_t lastInnovFailTime_ms
static auto MAX(const A &one, const B &two) -> decltype(one > two ? one :two)
uint32_t lastInnovPassTime_ms
void quat2Tbn(Matrix3f &Tbn, const Quaternion &quat) const
uint8_t get_primary(void) const
const Compass * get_compass() const
static AP_InertialSensor ins
imu_elements imuDataDelayed
uint32_t lastPreAlignGpsCheckTime_ms
const Vector3f & get_accel(uint8_t i) const
uint32_t framesSincePredict
float receiverPosCov[3][3]
AP_Float _gyroScaleProcessNoise
uint32_t secondLastGpsTime_ms
void SelectVelPosFusion()
struct NavEKF2_core::@145 faultStatus
float wrap_PI(const T radian)
AP_Float _magEarthProcessNoise
uint8_t rngBcnFuseDataReportIndex
uint32_t lastHealthyMagTime_ms
uint32_t prevFlowFuseTime_ms
struct NavEKF2_core::@146 gpsCheckStatus
AP_Float _gpsHorizPosNoise
float innovationIncrement
virtual void perf_end(perf_counter_t h)
AP_Float _accelBiasProcessNoise
AidingMode PV_AidingModePrev
float posDownAtLastMagReset
AP_Float _magBodyProcessNoise
void rotation_matrix(Matrix3f &m) const
uint32_t gndHgtValidTime_ms
uint32_t rngBcnLast3DmeasTime_ms
static const uint32_t OBS_BUFFER_LENGTH
AP_Float _wndVarHgtRateScale
obs_ring_buffer_t< mag_elements > storedMag
void from_axis_angle(Vector3f v)
void SelectRngBcnFusion()
Vector3f beaconVehiclePosNED
uint32_t lastMagUpdate_us
bool use_compass(void) const
AP_HAL::Util::perf_counter_t _perf_test[10]
void UpdateFilter(bool predict)
Vector3< T > mul_transpose(const Vector3< T > &v) const
obs_ring_buffer_t< rng_bcn_elements > storedRangeBeacon
bool magStateInitComplete
void ConstrainVariances()
bool sideSlipFusionDelayed
AP_HAL::Util::perf_counter_t _perf_UpdateFilter
void StoreQuatReset(void)
obs_ring_buffer_t< baro_elements > storedBaro
AP_Float _windVelProcessNoise
void calcEarthRateNED(Vector3f &omega, int32_t latitude) const
bool finalInflightYawInit
float constrain_float(const float amt, const float low, const float high)
uint32_t lastGpsAidBadTime_ms
#define INIT_ACCEL_BIAS_UNCERTAINTY
nav_filter_status filterStatus
ext_nav_elements extNavDataDelayed
int snprintf(char *str, size_t size, const char *format,...)
virtual void perf_begin(perf_counter_t h)
uint32_t lastRngBcnPassTime_ms
static constexpr float radians(float deg)
rng_bcn_elements rngBcnDataDelayed
void alignMagStateDeclination()
Vector3f delAngCorrection
imu_ring_buffer_t< imu_elements > storedIMU
uint32_t lastTimeRngBcn_ms[10]
Vector3f outputTrackError
Quaternion inverse(void) const
obs_ring_buffer_t< ext_nav_elements > storedExtNav
bool expectGndEffectTouchdown
void controlFilterModes()
bool rngBcnAlignmentCompleted
uint8_t localFilterTimeStep_ms
AP_InertialSensor & ins()
void rotate(const Vector3f &v)
uint8_t lastRngBcnChecked
const AP_HAL::HAL & hal
-*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
bool magStateResetRequest
Receiving valid messages and 3D lock.
bool expectGndEffectTakeoff
uint32_t timeTasReceived_ms
uint32_t lastPosPassTime_ms
uint32_t lastTasPassTime_ms
uint32_t extNavLastPosResetTime_ms
uint32_t rngValidMeaTime_ms
void StoreOutputReset(void)
AP_HAL::Util::perf_counter_t _perf_CovariancePrediction
float get_loop_delta_t(void) const
void correctDeltaVelocity(Vector3f &delVel, float delVelDT)
uint32_t terrainHgtStableSet_ms
float InitialGyroBiasUncertainty(void) const
uint32_t storedRngMeasTime_ms[2][3]
uint32_t flowValidMeaTime_ms
rng_bcn_elements rngBcnDataNew
struct NavEKF2_core::@144 rngBcnFusionReport[10]
uint8_t imu_buffer_length
Vector2f lastKnownPositionNE
obs_ring_buffer_t< of_elements > storedOF
uint32_t lastPosResetD_ms
imu_elements imuDataDownSampledNew
uint32_t lastGpsCheckTime_ms
void StoreQuatRotate(Quaternion deltaQuat)