#include "pose.h" namespace { #define DIM 18 #define EDIM 18 #define MEDIM 18 typedef void (*Hfun)(double *, double *, double *); const static double MAHA_THRESH_4 = 7.814727903251177; const static double MAHA_THRESH_10 = 7.814727903251177; const static double MAHA_THRESH_13 = 7.814727903251177; const static double MAHA_THRESH_14 = 7.814727903251177; /****************************************************************************** * Code generated with SymPy 1.14.0 * * * * See http://www.sympy.org/ for more information. * * * * This file is part of 'ekf' * ******************************************************************************/ void err_fun(double *nom_x, double *delta_x, double *out_7783868612103190645) { out_7783868612103190645[0] = delta_x[0] + nom_x[0]; out_7783868612103190645[1] = delta_x[1] + nom_x[1]; out_7783868612103190645[2] = delta_x[2] + nom_x[2]; out_7783868612103190645[3] = delta_x[3] + nom_x[3]; out_7783868612103190645[4] = delta_x[4] + nom_x[4]; out_7783868612103190645[5] = delta_x[5] + nom_x[5]; out_7783868612103190645[6] = delta_x[6] + nom_x[6]; out_7783868612103190645[7] = delta_x[7] + nom_x[7]; out_7783868612103190645[8] = delta_x[8] + nom_x[8]; out_7783868612103190645[9] = delta_x[9] + nom_x[9]; out_7783868612103190645[10] = delta_x[10] + nom_x[10]; out_7783868612103190645[11] = delta_x[11] + nom_x[11]; out_7783868612103190645[12] = delta_x[12] + nom_x[12]; out_7783868612103190645[13] = delta_x[13] + nom_x[13]; out_7783868612103190645[14] = delta_x[14] + nom_x[14]; out_7783868612103190645[15] = delta_x[15] + nom_x[15]; out_7783868612103190645[16] = delta_x[16] + nom_x[16]; out_7783868612103190645[17] = delta_x[17] + nom_x[17]; } void inv_err_fun(double *nom_x, double *true_x, double *out_6605006959385105646) { out_6605006959385105646[0] = -nom_x[0] + true_x[0]; out_6605006959385105646[1] = -nom_x[1] + true_x[1]; out_6605006959385105646[2] = -nom_x[2] + true_x[2]; out_6605006959385105646[3] = -nom_x[3] + true_x[3]; out_6605006959385105646[4] = -nom_x[4] + true_x[4]; out_6605006959385105646[5] = -nom_x[5] + true_x[5]; out_6605006959385105646[6] = -nom_x[6] + true_x[6]; out_6605006959385105646[7] = -nom_x[7] + true_x[7]; out_6605006959385105646[8] = -nom_x[8] + true_x[8]; out_6605006959385105646[9] = -nom_x[9] + true_x[9]; out_6605006959385105646[10] = -nom_x[10] + true_x[10]; out_6605006959385105646[11] = -nom_x[11] + true_x[11]; out_6605006959385105646[12] = -nom_x[12] + true_x[12]; out_6605006959385105646[13] = -nom_x[13] + true_x[13]; out_6605006959385105646[14] = -nom_x[14] + true_x[14]; out_6605006959385105646[15] = -nom_x[15] + true_x[15]; out_6605006959385105646[16] = -nom_x[16] + true_x[16]; out_6605006959385105646[17] = -nom_x[17] + true_x[17]; } void H_mod_fun(double *state, double *out_4214017023834556037) { out_4214017023834556037[0] = 1.0; out_4214017023834556037[1] = 0.0; out_4214017023834556037[2] = 0.0; out_4214017023834556037[3] = 0.0; out_4214017023834556037[4] = 0.0; out_4214017023834556037[5] = 0.0; out_4214017023834556037[6] = 0.0; out_4214017023834556037[7] = 0.0; out_4214017023834556037[8] = 0.0; out_4214017023834556037[9] = 0.0; out_4214017023834556037[10] = 0.0; out_4214017023834556037[11] = 0.0; out_4214017023834556037[12] = 0.0; out_4214017023834556037[13] = 0.0; out_4214017023834556037[14] = 0.0; out_4214017023834556037[15] = 0.0; out_4214017023834556037[16] = 0.0; out_4214017023834556037[17] = 0.0; out_4214017023834556037[18] = 0.0; out_4214017023834556037[19] = 1.0; out_4214017023834556037[20] = 0.0; out_4214017023834556037[21] = 0.0; out_4214017023834556037[22] = 0.0; out_4214017023834556037[23] = 0.0; out_4214017023834556037[24] = 0.0; out_4214017023834556037[25] = 0.0; out_4214017023834556037[26] = 0.0; out_4214017023834556037[27] = 0.0; out_4214017023834556037[28] = 0.0; out_4214017023834556037[29] = 0.0; out_4214017023834556037[30] = 0.0; out_4214017023834556037[31] = 0.0; out_4214017023834556037[32] = 0.0; out_4214017023834556037[33] = 0.0; out_4214017023834556037[34] = 0.0; out_4214017023834556037[35] = 0.0; out_4214017023834556037[36] = 0.0; out_4214017023834556037[37] = 0.0; out_4214017023834556037[38] = 1.0; out_4214017023834556037[39] = 0.0; out_4214017023834556037[40] = 0.0; out_4214017023834556037[41] = 0.0; out_4214017023834556037[42] = 0.0; out_4214017023834556037[43] = 0.0; out_4214017023834556037[44] = 0.0; out_4214017023834556037[45] = 0.0; out_4214017023834556037[46] = 0.0; out_4214017023834556037[47] = 0.0; out_4214017023834556037[48] = 0.0; out_4214017023834556037[49] = 0.0; out_4214017023834556037[50] = 0.0; out_4214017023834556037[51] = 0.0; out_4214017023834556037[52] = 0.0; out_4214017023834556037[53] = 0.0; out_4214017023834556037[54] = 0.0; out_4214017023834556037[55] = 0.0; out_4214017023834556037[56] = 0.0; out_4214017023834556037[57] = 1.0; out_4214017023834556037[58] = 0.0; out_4214017023834556037[59] = 0.0; out_4214017023834556037[60] = 0.0; out_4214017023834556037[61] = 0.0; out_4214017023834556037[62] = 0.0; out_4214017023834556037[63] = 0.0; out_4214017023834556037[64] = 0.0; out_4214017023834556037[65] = 0.0; out_4214017023834556037[66] = 0.0; out_4214017023834556037[67] = 0.0; out_4214017023834556037[68] = 0.0; out_4214017023834556037[69] = 0.0; out_4214017023834556037[70] = 0.0; out_4214017023834556037[71] = 0.0; out_4214017023834556037[72] = 0.0; out_4214017023834556037[73] = 0.0; out_4214017023834556037[74] = 0.0; out_4214017023834556037[75] = 0.0; out_4214017023834556037[76] = 1.0; out_4214017023834556037[77] = 0.0; out_4214017023834556037[78] = 0.0; out_4214017023834556037[79] = 0.0; out_4214017023834556037[80] = 0.0; out_4214017023834556037[81] = 0.0; out_4214017023834556037[82] = 0.0; out_4214017023834556037[83] = 0.0; out_4214017023834556037[84] = 0.0; out_4214017023834556037[85] = 0.0; out_4214017023834556037[86] = 0.0; out_4214017023834556037[87] = 0.0; out_4214017023834556037[88] = 0.0; out_4214017023834556037[89] = 0.0; out_4214017023834556037[90] = 0.0; out_4214017023834556037[91] = 0.0; out_4214017023834556037[92] = 0.0; out_4214017023834556037[93] = 0.0; out_4214017023834556037[94] = 0.0; out_4214017023834556037[95] = 1.0; out_4214017023834556037[96] = 0.0; out_4214017023834556037[97] = 0.0; out_4214017023834556037[98] = 0.0; out_4214017023834556037[99] = 0.0; out_4214017023834556037[100] = 0.0; out_4214017023834556037[101] = 0.0; out_4214017023834556037[102] = 0.0; out_4214017023834556037[103] = 0.0; out_4214017023834556037[104] = 0.0; out_4214017023834556037[105] = 0.0; out_4214017023834556037[106] = 0.0; out_4214017023834556037[107] = 0.0; out_4214017023834556037[108] = 0.0; out_4214017023834556037[109] = 0.0; out_4214017023834556037[110] = 0.0; out_4214017023834556037[111] = 0.0; out_4214017023834556037[112] = 0.0; out_4214017023834556037[113] = 0.0; out_4214017023834556037[114] = 1.0; out_4214017023834556037[115] = 0.0; out_4214017023834556037[116] = 0.0; out_4214017023834556037[117] = 0.0; out_4214017023834556037[118] = 0.0; out_4214017023834556037[119] = 0.0; out_4214017023834556037[120] = 0.0; out_4214017023834556037[121] = 0.0; out_4214017023834556037[122] = 0.0; out_4214017023834556037[123] = 0.0; out_4214017023834556037[124] = 0.0; out_4214017023834556037[125] = 0.0; out_4214017023834556037[126] = 0.0; out_4214017023834556037[127] = 0.0; out_4214017023834556037[128] = 0.0; out_4214017023834556037[129] = 0.0; out_4214017023834556037[130] = 0.0; out_4214017023834556037[131] = 0.0; out_4214017023834556037[132] = 0.0; out_4214017023834556037[133] = 1.0; out_4214017023834556037[134] = 0.0; out_4214017023834556037[135] = 0.0; out_4214017023834556037[136] = 0.0; out_4214017023834556037[137] = 0.0; out_4214017023834556037[138] = 0.0; out_4214017023834556037[139] = 0.0; out_4214017023834556037[140] = 0.0; out_4214017023834556037[141] = 0.0; out_4214017023834556037[142] = 0.0; out_4214017023834556037[143] = 0.0; out_4214017023834556037[144] = 0.0; out_4214017023834556037[145] = 0.0; out_4214017023834556037[146] = 0.0; out_4214017023834556037[147] = 0.0; out_4214017023834556037[148] = 0.0; out_4214017023834556037[149] = 0.0; out_4214017023834556037[150] = 0.0; out_4214017023834556037[151] = 0.0; out_4214017023834556037[152] = 1.0; out_4214017023834556037[153] = 0.0; out_4214017023834556037[154] = 0.0; out_4214017023834556037[155] = 0.0; out_4214017023834556037[156] = 0.0; out_4214017023834556037[157] = 0.0; out_4214017023834556037[158] = 0.0; out_4214017023834556037[159] = 0.0; out_4214017023834556037[160] = 0.0; out_4214017023834556037[161] = 0.0; out_4214017023834556037[162] = 0.0; out_4214017023834556037[163] = 0.0; out_4214017023834556037[164] = 0.0; out_4214017023834556037[165] = 0.0; out_4214017023834556037[166] = 0.0; out_4214017023834556037[167] = 0.0; out_4214017023834556037[168] = 0.0; out_4214017023834556037[169] = 0.0; out_4214017023834556037[170] = 0.0; out_4214017023834556037[171] = 1.0; out_4214017023834556037[172] = 0.0; out_4214017023834556037[173] = 0.0; out_4214017023834556037[174] = 0.0; out_4214017023834556037[175] = 0.0; out_4214017023834556037[176] = 0.0; out_4214017023834556037[177] = 0.0; out_4214017023834556037[178] = 0.0; out_4214017023834556037[179] = 0.0; out_4214017023834556037[180] = 0.0; out_4214017023834556037[181] = 0.0; out_4214017023834556037[182] = 0.0; out_4214017023834556037[183] = 0.0; out_4214017023834556037[184] = 0.0; out_4214017023834556037[185] = 0.0; out_4214017023834556037[186] = 0.0; out_4214017023834556037[187] = 0.0; out_4214017023834556037[188] = 0.0; out_4214017023834556037[189] = 0.0; out_4214017023834556037[190] = 1.0; out_4214017023834556037[191] = 0.0; out_4214017023834556037[192] = 0.0; out_4214017023834556037[193] = 0.0; out_4214017023834556037[194] = 0.0; out_4214017023834556037[195] = 0.0; out_4214017023834556037[196] = 0.0; out_4214017023834556037[197] = 0.0; out_4214017023834556037[198] = 0.0; out_4214017023834556037[199] = 0.0; out_4214017023834556037[200] = 0.0; out_4214017023834556037[201] = 0.0; out_4214017023834556037[202] = 0.0; out_4214017023834556037[203] = 0.0; out_4214017023834556037[204] = 0.0; out_4214017023834556037[205] = 0.0; out_4214017023834556037[206] = 0.0; out_4214017023834556037[207] = 0.0; out_4214017023834556037[208] = 0.0; out_4214017023834556037[209] = 1.0; out_4214017023834556037[210] = 0.0; out_4214017023834556037[211] = 0.0; out_4214017023834556037[212] = 0.0; out_4214017023834556037[213] = 0.0; out_4214017023834556037[214] = 0.0; out_4214017023834556037[215] = 0.0; out_4214017023834556037[216] = 0.0; out_4214017023834556037[217] = 0.0; out_4214017023834556037[218] = 0.0; out_4214017023834556037[219] = 0.0; out_4214017023834556037[220] = 0.0; out_4214017023834556037[221] = 0.0; out_4214017023834556037[222] = 0.0; out_4214017023834556037[223] = 0.0; out_4214017023834556037[224] = 0.0; out_4214017023834556037[225] = 0.0; out_4214017023834556037[226] = 0.0; out_4214017023834556037[227] = 0.0; out_4214017023834556037[228] = 1.0; out_4214017023834556037[229] = 0.0; out_4214017023834556037[230] = 0.0; out_4214017023834556037[231] = 0.0; out_4214017023834556037[232] = 0.0; out_4214017023834556037[233] = 0.0; out_4214017023834556037[234] = 0.0; out_4214017023834556037[235] = 0.0; out_4214017023834556037[236] = 0.0; out_4214017023834556037[237] = 0.0; out_4214017023834556037[238] = 0.0; out_4214017023834556037[239] = 0.0; out_4214017023834556037[240] = 0.0; out_4214017023834556037[241] = 0.0; out_4214017023834556037[242] = 0.0; out_4214017023834556037[243] = 0.0; out_4214017023834556037[244] = 0.0; out_4214017023834556037[245] = 0.0; out_4214017023834556037[246] = 0.0; out_4214017023834556037[247] = 1.0; out_4214017023834556037[248] = 0.0; out_4214017023834556037[249] = 0.0; out_4214017023834556037[250] = 0.0; out_4214017023834556037[251] = 0.0; out_4214017023834556037[252] = 0.0; out_4214017023834556037[253] = 0.0; out_4214017023834556037[254] = 0.0; out_4214017023834556037[255] = 0.0; out_4214017023834556037[256] = 0.0; out_4214017023834556037[257] = 0.0; out_4214017023834556037[258] = 0.0; out_4214017023834556037[259] = 0.0; out_4214017023834556037[260] = 0.0; out_4214017023834556037[261] = 0.0; out_4214017023834556037[262] = 0.0; out_4214017023834556037[263] = 0.0; out_4214017023834556037[264] = 0.0; out_4214017023834556037[265] = 0.0; out_4214017023834556037[266] = 1.0; out_4214017023834556037[267] = 0.0; out_4214017023834556037[268] = 0.0; out_4214017023834556037[269] = 0.0; out_4214017023834556037[270] = 0.0; out_4214017023834556037[271] = 0.0; out_4214017023834556037[272] = 0.0; out_4214017023834556037[273] = 0.0; out_4214017023834556037[274] = 0.0; out_4214017023834556037[275] = 0.0; out_4214017023834556037[276] = 0.0; out_4214017023834556037[277] = 0.0; out_4214017023834556037[278] = 0.0; out_4214017023834556037[279] = 0.0; out_4214017023834556037[280] = 0.0; out_4214017023834556037[281] = 0.0; out_4214017023834556037[282] = 0.0; out_4214017023834556037[283] = 0.0; out_4214017023834556037[284] = 0.0; out_4214017023834556037[285] = 1.0; out_4214017023834556037[286] = 0.0; out_4214017023834556037[287] = 0.0; out_4214017023834556037[288] = 0.0; out_4214017023834556037[289] = 0.0; out_4214017023834556037[290] = 0.0; out_4214017023834556037[291] = 0.0; out_4214017023834556037[292] = 0.0; out_4214017023834556037[293] = 0.0; out_4214017023834556037[294] = 0.0; out_4214017023834556037[295] = 0.0; out_4214017023834556037[296] = 0.0; out_4214017023834556037[297] = 0.0; out_4214017023834556037[298] = 0.0; out_4214017023834556037[299] = 0.0; out_4214017023834556037[300] = 0.0; out_4214017023834556037[301] = 0.0; out_4214017023834556037[302] = 0.0; out_4214017023834556037[303] = 0.0; out_4214017023834556037[304] = 1.0; out_4214017023834556037[305] = 0.0; out_4214017023834556037[306] = 0.0; out_4214017023834556037[307] = 0.0; out_4214017023834556037[308] = 0.0; out_4214017023834556037[309] = 0.0; out_4214017023834556037[310] = 0.0; out_4214017023834556037[311] = 0.0; out_4214017023834556037[312] = 0.0; out_4214017023834556037[313] = 0.0; out_4214017023834556037[314] = 0.0; out_4214017023834556037[315] = 0.0; out_4214017023834556037[316] = 0.0; out_4214017023834556037[317] = 0.0; out_4214017023834556037[318] = 0.0; out_4214017023834556037[319] = 0.0; out_4214017023834556037[320] = 0.0; out_4214017023834556037[321] = 0.0; out_4214017023834556037[322] = 0.0; out_4214017023834556037[323] = 1.0; } void f_fun(double *state, double dt, double *out_446156685689757577) { out_446156685689757577[0] = atan2((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), -(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1])); out_446156685689757577[1] = asin(sin(dt*state[7])*cos(state[0])*cos(state[1]) - sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1]) + sin(state[1])*cos(dt*state[7])*cos(dt*state[8])); out_446156685689757577[2] = atan2(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), -(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2])); out_446156685689757577[3] = dt*state[12] + state[3]; out_446156685689757577[4] = dt*state[13] + state[4]; out_446156685689757577[5] = dt*state[14] + state[5]; out_446156685689757577[6] = state[6]; out_446156685689757577[7] = state[7]; out_446156685689757577[8] = state[8]; out_446156685689757577[9] = state[9]; out_446156685689757577[10] = state[10]; out_446156685689757577[11] = state[11]; out_446156685689757577[12] = state[12]; out_446156685689757577[13] = state[13]; out_446156685689757577[14] = state[14]; out_446156685689757577[15] = state[15]; out_446156685689757577[16] = state[16]; out_446156685689757577[17] = state[17]; } void F_fun(double *state, double dt, double *out_1314145057723334901) { out_1314145057723334901[0] = ((-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*cos(state[0])*cos(state[1]) - sin(state[0])*cos(dt*state[6])*cos(dt*state[7])*cos(state[1]))*(-(sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) - sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)) + ((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*cos(state[0])*cos(state[1]) - sin(dt*state[6])*sin(state[0])*cos(dt*state[7])*cos(state[1]))*(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)); out_1314145057723334901[1] = ((-sin(dt*state[6])*sin(dt*state[8]) - sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*cos(state[1]) - (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*sin(state[1]) - sin(state[1])*cos(dt*state[6])*cos(dt*state[7])*cos(state[0]))*(-(sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) - sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)) + (-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))*(-(sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*sin(state[1]) + (-sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) + sin(dt*state[8])*cos(dt*state[6]))*cos(state[1]) - sin(dt*state[6])*sin(state[1])*cos(dt*state[7])*cos(state[0]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)); out_1314145057723334901[2] = 0; out_1314145057723334901[3] = 0; out_1314145057723334901[4] = 0; out_1314145057723334901[5] = 0; out_1314145057723334901[6] = (-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))*(dt*cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]) + (-dt*sin(dt*state[6])*sin(dt*state[8]) - dt*sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-dt*sin(dt*state[6])*cos(dt*state[8]) + dt*sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)) + (-(sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) - sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))*(-dt*sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]) + (-dt*sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) - dt*cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (dt*sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - dt*sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)); out_1314145057723334901[7] = (-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))*(-dt*sin(dt*state[6])*sin(dt*state[7])*cos(state[0])*cos(state[1]) + dt*sin(dt*state[6])*sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1]) - dt*sin(dt*state[6])*sin(state[1])*cos(dt*state[7])*cos(dt*state[8]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)) + (-(sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) - sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))*(-dt*sin(dt*state[7])*cos(dt*state[6])*cos(state[0])*cos(state[1]) + dt*sin(dt*state[8])*sin(state[0])*cos(dt*state[6])*cos(dt*state[7])*cos(state[1]) - dt*sin(state[1])*cos(dt*state[6])*cos(dt*state[7])*cos(dt*state[8]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)); out_1314145057723334901[8] = ((dt*sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + dt*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (dt*sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - dt*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]))*(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)) + ((dt*sin(dt*state[6])*sin(dt*state[8]) + dt*sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (-dt*sin(dt*state[6])*cos(dt*state[8]) + dt*sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]))*(-(sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) + (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) - sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]))/(pow(-(sin(dt*state[6])*sin(dt*state[8]) + sin(dt*state[7])*cos(dt*state[6])*cos(dt*state[8]))*sin(state[1]) + (-sin(dt*state[6])*cos(dt*state[8]) + sin(dt*state[7])*sin(dt*state[8])*cos(dt*state[6]))*sin(state[0])*cos(state[1]) + cos(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2) + pow((sin(dt*state[6])*sin(dt*state[7])*sin(dt*state[8]) + cos(dt*state[6])*cos(dt*state[8]))*sin(state[0])*cos(state[1]) - (sin(dt*state[6])*sin(dt*state[7])*cos(dt*state[8]) - sin(dt*state[8])*cos(dt*state[6]))*sin(state[1]) + sin(dt*state[6])*cos(dt*state[7])*cos(state[0])*cos(state[1]), 2)); out_1314145057723334901[9] = 0; out_1314145057723334901[10] = 0; out_1314145057723334901[11] = 0; out_1314145057723334901[12] = 0; out_1314145057723334901[13] = 0; out_1314145057723334901[14] = 0; out_1314145057723334901[15] = 0; out_1314145057723334901[16] = 0; out_1314145057723334901[17] = 0; out_1314145057723334901[18] = (-sin(dt*state[7])*sin(state[0])*cos(state[1]) - sin(dt*state[8])*cos(dt*state[7])*cos(state[0])*cos(state[1]))/sqrt(1 - pow(sin(dt*state[7])*cos(state[0])*cos(state[1]) - sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1]) + sin(state[1])*cos(dt*state[7])*cos(dt*state[8]), 2)); out_1314145057723334901[19] = (-sin(dt*state[7])*sin(state[1])*cos(state[0]) + sin(dt*state[8])*sin(state[0])*sin(state[1])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))/sqrt(1 - pow(sin(dt*state[7])*cos(state[0])*cos(state[1]) - sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1]) + sin(state[1])*cos(dt*state[7])*cos(dt*state[8]), 2)); out_1314145057723334901[20] = 0; out_1314145057723334901[21] = 0; out_1314145057723334901[22] = 0; out_1314145057723334901[23] = 0; out_1314145057723334901[24] = 0; out_1314145057723334901[25] = (dt*sin(dt*state[7])*sin(dt*state[8])*sin(state[0])*cos(state[1]) - dt*sin(dt*state[7])*sin(state[1])*cos(dt*state[8]) + dt*cos(dt*state[7])*cos(state[0])*cos(state[1]))/sqrt(1 - pow(sin(dt*state[7])*cos(state[0])*cos(state[1]) - sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1]) + sin(state[1])*cos(dt*state[7])*cos(dt*state[8]), 2)); out_1314145057723334901[26] = (-dt*sin(dt*state[8])*sin(state[1])*cos(dt*state[7]) - dt*sin(state[0])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))/sqrt(1 - pow(sin(dt*state[7])*cos(state[0])*cos(state[1]) - sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1]) + sin(state[1])*cos(dt*state[7])*cos(dt*state[8]), 2)); out_1314145057723334901[27] = 0; out_1314145057723334901[28] = 0; out_1314145057723334901[29] = 0; out_1314145057723334901[30] = 0; out_1314145057723334901[31] = 0; out_1314145057723334901[32] = 0; out_1314145057723334901[33] = 0; out_1314145057723334901[34] = 0; out_1314145057723334901[35] = 0; out_1314145057723334901[36] = ((sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[7]))*((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) - (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) - sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)) + ((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[7]))*(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)); out_1314145057723334901[37] = (-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))*(-sin(dt*state[7])*sin(state[2])*cos(state[0])*cos(state[1]) + sin(dt*state[8])*sin(state[0])*sin(state[2])*cos(dt*state[7])*cos(state[1]) - sin(state[1])*sin(state[2])*cos(dt*state[7])*cos(dt*state[8]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)) + ((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) - (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) - sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))*(-sin(dt*state[7])*cos(state[0])*cos(state[1])*cos(state[2]) + sin(dt*state[8])*sin(state[0])*cos(dt*state[7])*cos(state[1])*cos(state[2]) - sin(state[1])*cos(dt*state[7])*cos(dt*state[8])*cos(state[2]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)); out_1314145057723334901[38] = ((-sin(state[0])*sin(state[2]) - sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))*(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)) + ((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (-sin(state[0])*sin(state[1])*sin(state[2]) - cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) - sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))*((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) - (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) - sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)); out_1314145057723334901[39] = 0; out_1314145057723334901[40] = 0; out_1314145057723334901[41] = 0; out_1314145057723334901[42] = 0; out_1314145057723334901[43] = (-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))*(dt*(sin(state[0])*cos(state[2]) - sin(state[1])*sin(state[2])*cos(state[0]))*cos(dt*state[7]) - dt*(sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[7])*sin(dt*state[8]) - dt*sin(dt*state[7])*sin(state[2])*cos(dt*state[8])*cos(state[1]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)) + ((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) - (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) - sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))*(dt*(-sin(state[0])*sin(state[2]) - sin(state[1])*cos(state[0])*cos(state[2]))*cos(dt*state[7]) - dt*(sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[7])*sin(dt*state[8]) - dt*sin(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)); out_1314145057723334901[44] = (dt*(sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*cos(dt*state[7])*cos(dt*state[8]) - dt*sin(dt*state[8])*sin(state[2])*cos(dt*state[7])*cos(state[1]))*(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)) + (dt*(sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*cos(dt*state[7])*cos(dt*state[8]) - dt*sin(dt*state[8])*cos(dt*state[7])*cos(state[1])*cos(state[2]))*((-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) - (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) - sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]))/(pow(-(sin(state[0])*sin(state[2]) + sin(state[1])*cos(state[0])*cos(state[2]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*cos(state[2]) - sin(state[2])*cos(state[0]))*sin(dt*state[8])*cos(dt*state[7]) + cos(dt*state[7])*cos(dt*state[8])*cos(state[1])*cos(state[2]), 2) + pow(-(-sin(state[0])*cos(state[2]) + sin(state[1])*sin(state[2])*cos(state[0]))*sin(dt*state[7]) + (sin(state[0])*sin(state[1])*sin(state[2]) + cos(state[0])*cos(state[2]))*sin(dt*state[8])*cos(dt*state[7]) + sin(state[2])*cos(dt*state[7])*cos(dt*state[8])*cos(state[1]), 2)); out_1314145057723334901[45] = 0; out_1314145057723334901[46] = 0; out_1314145057723334901[47] = 0; out_1314145057723334901[48] = 0; out_1314145057723334901[49] = 0; out_1314145057723334901[50] = 0; out_1314145057723334901[51] = 0; out_1314145057723334901[52] = 0; out_1314145057723334901[53] = 0; out_1314145057723334901[54] = 0; out_1314145057723334901[55] = 0; out_1314145057723334901[56] = 0; out_1314145057723334901[57] = 1; out_1314145057723334901[58] = 0; out_1314145057723334901[59] = 0; out_1314145057723334901[60] = 0; out_1314145057723334901[61] = 0; out_1314145057723334901[62] = 0; out_1314145057723334901[63] = 0; out_1314145057723334901[64] = 0; out_1314145057723334901[65] = 0; out_1314145057723334901[66] = dt; out_1314145057723334901[67] = 0; out_1314145057723334901[68] = 0; out_1314145057723334901[69] = 0; out_1314145057723334901[70] = 0; out_1314145057723334901[71] = 0; out_1314145057723334901[72] = 0; out_1314145057723334901[73] = 0; out_1314145057723334901[74] = 0; out_1314145057723334901[75] = 0; out_1314145057723334901[76] = 1; out_1314145057723334901[77] = 0; out_1314145057723334901[78] = 0; out_1314145057723334901[79] = 0; out_1314145057723334901[80] = 0; out_1314145057723334901[81] = 0; out_1314145057723334901[82] = 0; out_1314145057723334901[83] = 0; out_1314145057723334901[84] = 0; out_1314145057723334901[85] = dt; out_1314145057723334901[86] = 0; out_1314145057723334901[87] = 0; out_1314145057723334901[88] = 0; out_1314145057723334901[89] = 0; out_1314145057723334901[90] = 0; out_1314145057723334901[91] = 0; out_1314145057723334901[92] = 0; out_1314145057723334901[93] = 0; out_1314145057723334901[94] = 0; out_1314145057723334901[95] = 1; out_1314145057723334901[96] = 0; out_1314145057723334901[97] = 0; out_1314145057723334901[98] = 0; out_1314145057723334901[99] = 0; out_1314145057723334901[100] = 0; out_1314145057723334901[101] = 0; out_1314145057723334901[102] = 0; out_1314145057723334901[103] = 0; out_1314145057723334901[104] = dt; out_1314145057723334901[105] = 0; out_1314145057723334901[106] = 0; out_1314145057723334901[107] = 0; out_1314145057723334901[108] = 0; out_1314145057723334901[109] = 0; out_1314145057723334901[110] = 0; out_1314145057723334901[111] = 0; out_1314145057723334901[112] = 0; out_1314145057723334901[113] = 0; out_1314145057723334901[114] = 1; out_1314145057723334901[115] = 0; out_1314145057723334901[116] = 0; out_1314145057723334901[117] = 0; out_1314145057723334901[118] = 0; out_1314145057723334901[119] = 0; out_1314145057723334901[120] = 0; out_1314145057723334901[121] = 0; out_1314145057723334901[122] = 0; out_1314145057723334901[123] = 0; out_1314145057723334901[124] = 0; out_1314145057723334901[125] = 0; out_1314145057723334901[126] = 0; out_1314145057723334901[127] = 0; out_1314145057723334901[128] = 0; out_1314145057723334901[129] = 0; out_1314145057723334901[130] = 0; out_1314145057723334901[131] = 0; out_1314145057723334901[132] = 0; out_1314145057723334901[133] = 1; out_1314145057723334901[134] = 0; out_1314145057723334901[135] = 0; out_1314145057723334901[136] = 0; out_1314145057723334901[137] = 0; out_1314145057723334901[138] = 0; out_1314145057723334901[139] = 0; out_1314145057723334901[140] = 0; out_1314145057723334901[141] = 0; out_1314145057723334901[142] = 0; out_1314145057723334901[143] = 0; out_1314145057723334901[144] = 0; out_1314145057723334901[145] = 0; out_1314145057723334901[146] = 0; out_1314145057723334901[147] = 0; out_1314145057723334901[148] = 0; out_1314145057723334901[149] = 0; out_1314145057723334901[150] = 0; out_1314145057723334901[151] = 0; out_1314145057723334901[152] = 1; out_1314145057723334901[153] = 0; out_1314145057723334901[154] = 0; out_1314145057723334901[155] = 0; out_1314145057723334901[156] = 0; out_1314145057723334901[157] = 0; out_1314145057723334901[158] = 0; out_1314145057723334901[159] = 0; out_1314145057723334901[160] = 0; out_1314145057723334901[161] = 0; out_1314145057723334901[162] = 0; out_1314145057723334901[163] = 0; out_1314145057723334901[164] = 0; out_1314145057723334901[165] = 0; out_1314145057723334901[166] = 0; out_1314145057723334901[167] = 0; out_1314145057723334901[168] = 0; out_1314145057723334901[169] = 0; out_1314145057723334901[170] = 0; out_1314145057723334901[171] = 1; out_1314145057723334901[172] = 0; out_1314145057723334901[173] = 0; out_1314145057723334901[174] = 0; out_1314145057723334901[175] = 0; out_1314145057723334901[176] = 0; out_1314145057723334901[177] = 0; out_1314145057723334901[178] = 0; out_1314145057723334901[179] = 0; out_1314145057723334901[180] = 0; out_1314145057723334901[181] = 0; out_1314145057723334901[182] = 0; out_1314145057723334901[183] = 0; out_1314145057723334901[184] = 0; out_1314145057723334901[185] = 0; out_1314145057723334901[186] = 0; out_1314145057723334901[187] = 0; out_1314145057723334901[188] = 0; out_1314145057723334901[189] = 0; out_1314145057723334901[190] = 1; out_1314145057723334901[191] = 0; out_1314145057723334901[192] = 0; out_1314145057723334901[193] = 0; out_1314145057723334901[194] = 0; out_1314145057723334901[195] = 0; out_1314145057723334901[196] = 0; out_1314145057723334901[197] = 0; out_1314145057723334901[198] = 0; out_1314145057723334901[199] = 0; out_1314145057723334901[200] = 0; out_1314145057723334901[201] = 0; out_1314145057723334901[202] = 0; out_1314145057723334901[203] = 0; out_1314145057723334901[204] = 0; out_1314145057723334901[205] = 0; out_1314145057723334901[206] = 0; out_1314145057723334901[207] = 0; out_1314145057723334901[208] = 0; out_1314145057723334901[209] = 1; out_1314145057723334901[210] = 0; out_1314145057723334901[211] = 0; out_1314145057723334901[212] = 0; out_1314145057723334901[213] = 0; out_1314145057723334901[214] = 0; out_1314145057723334901[215] = 0; out_1314145057723334901[216] = 0; out_1314145057723334901[217] = 0; out_1314145057723334901[218] = 0; out_1314145057723334901[219] = 0; out_1314145057723334901[220] = 0; out_1314145057723334901[221] = 0; out_1314145057723334901[222] = 0; out_1314145057723334901[223] = 0; out_1314145057723334901[224] = 0; out_1314145057723334901[225] = 0; out_1314145057723334901[226] = 0; out_1314145057723334901[227] = 0; out_1314145057723334901[228] = 1; out_1314145057723334901[229] = 0; out_1314145057723334901[230] = 0; out_1314145057723334901[231] = 0; out_1314145057723334901[232] = 0; out_1314145057723334901[233] = 0; out_1314145057723334901[234] = 0; out_1314145057723334901[235] = 0; out_1314145057723334901[236] = 0; out_1314145057723334901[237] = 0; out_1314145057723334901[238] = 0; out_1314145057723334901[239] = 0; out_1314145057723334901[240] = 0; out_1314145057723334901[241] = 0; out_1314145057723334901[242] = 0; out_1314145057723334901[243] = 0; out_1314145057723334901[244] = 0; out_1314145057723334901[245] = 0; out_1314145057723334901[246] = 0; out_1314145057723334901[247] = 1; out_1314145057723334901[248] = 0; out_1314145057723334901[249] = 0; out_1314145057723334901[250] = 0; out_1314145057723334901[251] = 0; out_1314145057723334901[252] = 0; out_1314145057723334901[253] = 0; out_1314145057723334901[254] = 0; out_1314145057723334901[255] = 0; out_1314145057723334901[256] = 0; out_1314145057723334901[257] = 0; out_1314145057723334901[258] = 0; out_1314145057723334901[259] = 0; out_1314145057723334901[260] = 0; out_1314145057723334901[261] = 0; out_1314145057723334901[262] = 0; out_1314145057723334901[263] = 0; out_1314145057723334901[264] = 0; out_1314145057723334901[265] = 0; out_1314145057723334901[266] = 1; out_1314145057723334901[267] = 0; out_1314145057723334901[268] = 0; out_1314145057723334901[269] = 0; out_1314145057723334901[270] = 0; out_1314145057723334901[271] = 0; out_1314145057723334901[272] = 0; out_1314145057723334901[273] = 0; out_1314145057723334901[274] = 0; out_1314145057723334901[275] = 0; out_1314145057723334901[276] = 0; out_1314145057723334901[277] = 0; out_1314145057723334901[278] = 0; out_1314145057723334901[279] = 0; out_1314145057723334901[280] = 0; out_1314145057723334901[281] = 0; out_1314145057723334901[282] = 0; out_1314145057723334901[283] = 0; out_1314145057723334901[284] = 0; out_1314145057723334901[285] = 1; out_1314145057723334901[286] = 0; out_1314145057723334901[287] = 0; out_1314145057723334901[288] = 0; out_1314145057723334901[289] = 0; out_1314145057723334901[290] = 0; out_1314145057723334901[291] = 0; out_1314145057723334901[292] = 0; out_1314145057723334901[293] = 0; out_1314145057723334901[294] = 0; out_1314145057723334901[295] = 0; out_1314145057723334901[296] = 0; out_1314145057723334901[297] = 0; out_1314145057723334901[298] = 0; out_1314145057723334901[299] = 0; out_1314145057723334901[300] = 0; out_1314145057723334901[301] = 0; out_1314145057723334901[302] = 0; out_1314145057723334901[303] = 0; out_1314145057723334901[304] = 1; out_1314145057723334901[305] = 0; out_1314145057723334901[306] = 0; out_1314145057723334901[307] = 0; out_1314145057723334901[308] = 0; out_1314145057723334901[309] = 0; out_1314145057723334901[310] = 0; out_1314145057723334901[311] = 0; out_1314145057723334901[312] = 0; out_1314145057723334901[313] = 0; out_1314145057723334901[314] = 0; out_1314145057723334901[315] = 0; out_1314145057723334901[316] = 0; out_1314145057723334901[317] = 0; out_1314145057723334901[318] = 0; out_1314145057723334901[319] = 0; out_1314145057723334901[320] = 0; out_1314145057723334901[321] = 0; out_1314145057723334901[322] = 0; out_1314145057723334901[323] = 1; } void h_4(double *state, double *unused, double *out_3131871851783197102) { out_3131871851783197102[0] = state[6] + state[9]; out_3131871851783197102[1] = state[7] + state[10]; out_3131871851783197102[2] = state[8] + state[11]; } void H_4(double *state, double *unused, double *out_7985824233678463609) { out_7985824233678463609[0] = 0; out_7985824233678463609[1] = 0; out_7985824233678463609[2] = 0; out_7985824233678463609[3] = 0; out_7985824233678463609[4] = 0; out_7985824233678463609[5] = 0; out_7985824233678463609[6] = 1; out_7985824233678463609[7] = 0; out_7985824233678463609[8] = 0; out_7985824233678463609[9] = 1; out_7985824233678463609[10] = 0; out_7985824233678463609[11] = 0; out_7985824233678463609[12] = 0; out_7985824233678463609[13] = 0; out_7985824233678463609[14] = 0; out_7985824233678463609[15] = 0; out_7985824233678463609[16] = 0; out_7985824233678463609[17] = 0; out_7985824233678463609[18] = 0; out_7985824233678463609[19] = 0; out_7985824233678463609[20] = 0; out_7985824233678463609[21] = 0; out_7985824233678463609[22] = 0; out_7985824233678463609[23] = 0; out_7985824233678463609[24] = 0; out_7985824233678463609[25] = 1; out_7985824233678463609[26] = 0; out_7985824233678463609[27] = 0; out_7985824233678463609[28] = 1; out_7985824233678463609[29] = 0; out_7985824233678463609[30] = 0; out_7985824233678463609[31] = 0; out_7985824233678463609[32] = 0; out_7985824233678463609[33] = 0; out_7985824233678463609[34] = 0; out_7985824233678463609[35] = 0; out_7985824233678463609[36] = 0; out_7985824233678463609[37] = 0; out_7985824233678463609[38] = 0; out_7985824233678463609[39] = 0; out_7985824233678463609[40] = 0; out_7985824233678463609[41] = 0; out_7985824233678463609[42] = 0; out_7985824233678463609[43] = 0; out_7985824233678463609[44] = 1; out_7985824233678463609[45] = 0; out_7985824233678463609[46] = 0; out_7985824233678463609[47] = 1; out_7985824233678463609[48] = 0; out_7985824233678463609[49] = 0; out_7985824233678463609[50] = 0; out_7985824233678463609[51] = 0; out_7985824233678463609[52] = 0; out_7985824233678463609[53] = 0; } void h_10(double *state, double *unused, double *out_4732705393461985535) { out_4732705393461985535[0] = 9.8100000000000005*sin(state[1]) - state[4]*state[8] + state[5]*state[7] + state[12] + state[15]; out_4732705393461985535[1] = -9.8100000000000005*sin(state[0])*cos(state[1]) + state[3]*state[8] - state[5]*state[6] + state[13] + state[16]; out_4732705393461985535[2] = -9.8100000000000005*cos(state[0])*cos(state[1]) - state[3]*state[7] + state[4]*state[6] + state[14] + state[17]; } void H_10(double *state, double *unused, double *out_25842791302237901) { out_25842791302237901[0] = 0; out_25842791302237901[1] = 9.8100000000000005*cos(state[1]); out_25842791302237901[2] = 0; out_25842791302237901[3] = 0; out_25842791302237901[4] = -state[8]; out_25842791302237901[5] = state[7]; out_25842791302237901[6] = 0; out_25842791302237901[7] = state[5]; out_25842791302237901[8] = -state[4]; out_25842791302237901[9] = 0; out_25842791302237901[10] = 0; out_25842791302237901[11] = 0; out_25842791302237901[12] = 1; out_25842791302237901[13] = 0; out_25842791302237901[14] = 0; out_25842791302237901[15] = 1; out_25842791302237901[16] = 0; out_25842791302237901[17] = 0; out_25842791302237901[18] = -9.8100000000000005*cos(state[0])*cos(state[1]); out_25842791302237901[19] = 9.8100000000000005*sin(state[0])*sin(state[1]); out_25842791302237901[20] = 0; out_25842791302237901[21] = state[8]; out_25842791302237901[22] = 0; out_25842791302237901[23] = -state[6]; out_25842791302237901[24] = -state[5]; out_25842791302237901[25] = 0; out_25842791302237901[26] = state[3]; out_25842791302237901[27] = 0; out_25842791302237901[28] = 0; out_25842791302237901[29] = 0; out_25842791302237901[30] = 0; out_25842791302237901[31] = 1; out_25842791302237901[32] = 0; out_25842791302237901[33] = 0; out_25842791302237901[34] = 1; out_25842791302237901[35] = 0; out_25842791302237901[36] = 9.8100000000000005*sin(state[0])*cos(state[1]); out_25842791302237901[37] = 9.8100000000000005*sin(state[1])*cos(state[0]); out_25842791302237901[38] = 0; out_25842791302237901[39] = -state[7]; out_25842791302237901[40] = state[6]; out_25842791302237901[41] = 0; out_25842791302237901[42] = state[4]; out_25842791302237901[43] = -state[3]; out_25842791302237901[44] = 0; out_25842791302237901[45] = 0; out_25842791302237901[46] = 0; out_25842791302237901[47] = 0; out_25842791302237901[48] = 0; out_25842791302237901[49] = 0; out_25842791302237901[50] = 1; out_25842791302237901[51] = 0; out_25842791302237901[52] = 0; out_25842791302237901[53] = 1; } void h_13(double *state, double *unused, double *out_3855617401361447493) { out_3855617401361447493[0] = state[3]; out_3855617401361447493[1] = state[4]; out_3855617401361447493[2] = state[5]; } void H_13(double *state, double *unused, double *out_2850288631714387078) { out_2850288631714387078[0] = 0; out_2850288631714387078[1] = 0; out_2850288631714387078[2] = 0; out_2850288631714387078[3] = 1; out_2850288631714387078[4] = 0; out_2850288631714387078[5] = 0; out_2850288631714387078[6] = 0; out_2850288631714387078[7] = 0; out_2850288631714387078[8] = 0; out_2850288631714387078[9] = 0; out_2850288631714387078[10] = 0; out_2850288631714387078[11] = 0; out_2850288631714387078[12] = 0; out_2850288631714387078[13] = 0; out_2850288631714387078[14] = 0; out_2850288631714387078[15] = 0; out_2850288631714387078[16] = 0; out_2850288631714387078[17] = 0; out_2850288631714387078[18] = 0; out_2850288631714387078[19] = 0; out_2850288631714387078[20] = 0; out_2850288631714387078[21] = 0; out_2850288631714387078[22] = 1; out_2850288631714387078[23] = 0; out_2850288631714387078[24] = 0; out_2850288631714387078[25] = 0; out_2850288631714387078[26] = 0; out_2850288631714387078[27] = 0; out_2850288631714387078[28] = 0; out_2850288631714387078[29] = 0; out_2850288631714387078[30] = 0; out_2850288631714387078[31] = 0; out_2850288631714387078[32] = 0; out_2850288631714387078[33] = 0; out_2850288631714387078[34] = 0; out_2850288631714387078[35] = 0; out_2850288631714387078[36] = 0; out_2850288631714387078[37] = 0; out_2850288631714387078[38] = 0; out_2850288631714387078[39] = 0; out_2850288631714387078[40] = 0; out_2850288631714387078[41] = 1; out_2850288631714387078[42] = 0; out_2850288631714387078[43] = 0; out_2850288631714387078[44] = 0; out_2850288631714387078[45] = 0; out_2850288631714387078[46] = 0; out_2850288631714387078[47] = 0; out_2850288631714387078[48] = 0; out_2850288631714387078[49] = 0; out_2850288631714387078[50] = 0; out_2850288631714387078[51] = 0; out_2850288631714387078[52] = 0; out_2850288631714387078[53] = 0; } void h_14(double *state, double *unused, double *out_2052081526966194460) { out_2052081526966194460[0] = state[6]; out_2052081526966194460[1] = state[7]; out_2052081526966194460[2] = state[8]; } void H_14(double *state, double *unused, double *out_4903035801383091313) { out_4903035801383091313[0] = 0; out_4903035801383091313[1] = 0; out_4903035801383091313[2] = 0; out_4903035801383091313[3] = 0; out_4903035801383091313[4] = 0; out_4903035801383091313[5] = 0; out_4903035801383091313[6] = 1; out_4903035801383091313[7] = 0; out_4903035801383091313[8] = 0; out_4903035801383091313[9] = 0; out_4903035801383091313[10] = 0; out_4903035801383091313[11] = 0; out_4903035801383091313[12] = 0; out_4903035801383091313[13] = 0; out_4903035801383091313[14] = 0; out_4903035801383091313[15] = 0; out_4903035801383091313[16] = 0; out_4903035801383091313[17] = 0; out_4903035801383091313[18] = 0; out_4903035801383091313[19] = 0; out_4903035801383091313[20] = 0; out_4903035801383091313[21] = 0; out_4903035801383091313[22] = 0; out_4903035801383091313[23] = 0; out_4903035801383091313[24] = 0; out_4903035801383091313[25] = 1; out_4903035801383091313[26] = 0; out_4903035801383091313[27] = 0; out_4903035801383091313[28] = 0; out_4903035801383091313[29] = 0; out_4903035801383091313[30] = 0; out_4903035801383091313[31] = 0; out_4903035801383091313[32] = 0; out_4903035801383091313[33] = 0; out_4903035801383091313[34] = 0; out_4903035801383091313[35] = 0; out_4903035801383091313[36] = 0; out_4903035801383091313[37] = 0; out_4903035801383091313[38] = 0; out_4903035801383091313[39] = 0; out_4903035801383091313[40] = 0; out_4903035801383091313[41] = 0; out_4903035801383091313[42] = 0; out_4903035801383091313[43] = 0; out_4903035801383091313[44] = 1; out_4903035801383091313[45] = 0; out_4903035801383091313[46] = 0; out_4903035801383091313[47] = 0; out_4903035801383091313[48] = 0; out_4903035801383091313[49] = 0; out_4903035801383091313[50] = 0; out_4903035801383091313[51] = 0; out_4903035801383091313[52] = 0; out_4903035801383091313[53] = 0; } #include #include typedef Eigen::Matrix DDM; typedef Eigen::Matrix EEM; typedef Eigen::Matrix DEM; void predict(double *in_x, double *in_P, double *in_Q, double dt) { typedef Eigen::Matrix RRM; double nx[DIM] = {0}; double in_F[EDIM*EDIM] = {0}; // functions from sympy f_fun(in_x, dt, nx); F_fun(in_x, dt, in_F); EEM F(in_F); EEM P(in_P); EEM Q(in_Q); RRM F_main = F.topLeftCorner(MEDIM, MEDIM); P.topLeftCorner(MEDIM, MEDIM) = (F_main * P.topLeftCorner(MEDIM, MEDIM)) * F_main.transpose(); P.topRightCorner(MEDIM, EDIM - MEDIM) = F_main * P.topRightCorner(MEDIM, EDIM - MEDIM); P.bottomLeftCorner(EDIM - MEDIM, MEDIM) = P.bottomLeftCorner(EDIM - MEDIM, MEDIM) * F_main.transpose(); P = P + dt*Q; // copy out state memcpy(in_x, nx, DIM * sizeof(double)); memcpy(in_P, P.data(), EDIM * EDIM * sizeof(double)); } // note: extra_args dim only correct when null space projecting // otherwise 1 template void update(double *in_x, double *in_P, Hfun h_fun, Hfun H_fun, Hfun Hea_fun, double *in_z, double *in_R, double *in_ea, double MAHA_THRESHOLD) { typedef Eigen::Matrix ZZM; typedef Eigen::Matrix ZDM; typedef Eigen::Matrix XEM; //typedef Eigen::Matrix EZM; typedef Eigen::Matrix X1M; typedef Eigen::Matrix XXM; double in_hx[ZDIM] = {0}; double in_H[ZDIM * DIM] = {0}; double in_H_mod[EDIM * DIM] = {0}; double delta_x[EDIM] = {0}; double x_new[DIM] = {0}; // state x, P Eigen::Matrix z(in_z); EEM P(in_P); ZZM pre_R(in_R); // functions from sympy h_fun(in_x, in_ea, in_hx); H_fun(in_x, in_ea, in_H); ZDM pre_H(in_H); // get y (y = z - hx) Eigen::Matrix pre_y(in_hx); pre_y = z - pre_y; X1M y; XXM H; XXM R; if (Hea_fun){ typedef Eigen::Matrix ZAM; double in_Hea[ZDIM * EADIM] = {0}; Hea_fun(in_x, in_ea, in_Hea); ZAM Hea(in_Hea); XXM A = Hea.transpose().fullPivLu().kernel(); y = A.transpose() * pre_y; H = A.transpose() * pre_H; R = A.transpose() * pre_R * A; } else { y = pre_y; H = pre_H; R = pre_R; } // get modified H H_mod_fun(in_x, in_H_mod); DEM H_mod(in_H_mod); XEM H_err = H * H_mod; // Do mahalobis distance test if (MAHA_TEST){ XXM a = (H_err * P * H_err.transpose() + R).inverse(); double maha_dist = y.transpose() * a * y; if (maha_dist > MAHA_THRESHOLD){ R = 1.0e16 * R; } } // Outlier resilient weighting double weight = 1;//(1.5)/(1 + y.squaredNorm()/R.sum()); // kalman gains and I_KH XXM S = ((H_err * P) * H_err.transpose()) + R/weight; XEM KT = S.fullPivLu().solve(H_err * P.transpose()); //EZM K = KT.transpose(); TODO: WHY DOES THIS NOT COMPILE? //EZM K = S.fullPivLu().solve(H_err * P.transpose()).transpose(); //std::cout << "Here is the matrix rot:\n" << K << std::endl; EEM I_KH = Eigen::Matrix::Identity() - (KT.transpose() * H_err); // update state by injecting dx Eigen::Matrix dx(delta_x); dx = (KT.transpose() * y); memcpy(delta_x, dx.data(), EDIM * sizeof(double)); err_fun(in_x, delta_x, x_new); Eigen::Matrix x(x_new); // update cov P = ((I_KH * P) * I_KH.transpose()) + ((KT.transpose() * R) * KT); // copy out state memcpy(in_x, x.data(), DIM * sizeof(double)); memcpy(in_P, P.data(), EDIM * EDIM * sizeof(double)); memcpy(in_z, y.data(), y.rows() * sizeof(double)); } } extern "C" { void pose_update_4(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<3, 3, 0>(in_x, in_P, h_4, H_4, NULL, in_z, in_R, in_ea, MAHA_THRESH_4); } void pose_update_10(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<3, 3, 0>(in_x, in_P, h_10, H_10, NULL, in_z, in_R, in_ea, MAHA_THRESH_10); } void pose_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<3, 3, 0>(in_x, in_P, h_13, H_13, NULL, in_z, in_R, in_ea, MAHA_THRESH_13); } void pose_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<3, 3, 0>(in_x, in_P, h_14, H_14, NULL, in_z, in_R, in_ea, MAHA_THRESH_14); } void pose_err_fun(double *nom_x, double *delta_x, double *out_7783868612103190645) { err_fun(nom_x, delta_x, out_7783868612103190645); } void pose_inv_err_fun(double *nom_x, double *true_x, double *out_6605006959385105646) { inv_err_fun(nom_x, true_x, out_6605006959385105646); } void pose_H_mod_fun(double *state, double *out_4214017023834556037) { H_mod_fun(state, out_4214017023834556037); } void pose_f_fun(double *state, double dt, double *out_446156685689757577) { f_fun(state, dt, out_446156685689757577); } void pose_F_fun(double *state, double dt, double *out_1314145057723334901) { F_fun(state, dt, out_1314145057723334901); } void pose_h_4(double *state, double *unused, double *out_3131871851783197102) { h_4(state, unused, out_3131871851783197102); } void pose_H_4(double *state, double *unused, double *out_7985824233678463609) { H_4(state, unused, out_7985824233678463609); } void pose_h_10(double *state, double *unused, double *out_4732705393461985535) { h_10(state, unused, out_4732705393461985535); } void pose_H_10(double *state, double *unused, double *out_25842791302237901) { H_10(state, unused, out_25842791302237901); } void pose_h_13(double *state, double *unused, double *out_3855617401361447493) { h_13(state, unused, out_3855617401361447493); } void pose_H_13(double *state, double *unused, double *out_2850288631714387078) { H_13(state, unused, out_2850288631714387078); } void pose_h_14(double *state, double *unused, double *out_2052081526966194460) { h_14(state, unused, out_2052081526966194460); } void pose_H_14(double *state, double *unused, double *out_4903035801383091313) { H_14(state, unused, out_4903035801383091313); } void pose_predict(double *in_x, double *in_P, double *in_Q, double dt) { predict(in_x, in_P, in_Q, dt); } } const EKF pose = { .name = "pose", .kinds = { 4, 10, 13, 14 }, .feature_kinds = { }, .f_fun = pose_f_fun, .F_fun = pose_F_fun, .err_fun = pose_err_fun, .inv_err_fun = pose_inv_err_fun, .H_mod_fun = pose_H_mod_fun, .predict = pose_predict, .hs = { { 4, pose_h_4 }, { 10, pose_h_10 }, { 13, pose_h_13 }, { 14, pose_h_14 }, }, .Hs = { { 4, pose_H_4 }, { 10, pose_H_10 }, { 13, pose_H_13 }, { 14, pose_H_14 }, }, .updates = { { 4, pose_update_4 }, { 10, pose_update_10 }, { 13, pose_update_13 }, { 14, pose_update_14 }, }, .Hes = { }, .sets = { }, .extra_routines = { }, }; ekf_lib_init(pose)