| 210 | // For Pose EKF ---------------------- |
| 211 | |
| 212 | mat Jplus1(const colvec& X1, const colvec& X2) { |
| 213 | colvec X3 = pose_update(X1, X2); |
| 214 | mat R1 = ypr_to_R(X1.rows(3, 5)); |
| 215 | mat R2 = ypr_to_R(X2.rows(3, 5)); |
| 216 | mat R3 = ypr_to_R(X3.rows(3, 5)); |
| 217 | colvec o1 = R1.col(1); |
| 218 | colvec a1 = R1.col(2); |
| 219 | colvec o2 = R2.col(1); |
| 220 | colvec a2 = R2.col(2); |
| 221 | |
| 222 | mat I = eye<mat>(3, 3); |
| 223 | mat Z = zeros<mat>(3, 3); |
| 224 | |
| 225 | double Marr[9] = { -(X3(2 - 1) - X1(2 - 1)), (X3(3 - 1) - X1(3 - 1)) * cos(X1(4 - 1)), |
| 226 | a1(1 - 1) * X2(2 - 1) - o1(1 - 1) * X2(3 - 1), X3(1 - 1) - X1(1 - 1), |
| 227 | (X3(3 - 1) - X1(3 - 1)) * sin(X1(4 - 1)), |
| 228 | a1(2 - 1) * X2(2 - 1) - o1(2 - 1) * X2(3 - 1), 0, |
| 229 | -X2(1 - 1) * cos(X1(5 - 1)) - X2(2 - 1) * sin(X1(5 - 1)) * sin(X1(6 - 1)) - |
| 230 | X2(3 - 1) * sin(X1(5 - 1)) * cos(X1(6 - 1)), |
| 231 | a1(3 - 1) * X2(2 - 1) - o1(3 - 1) * X2(3 - 1) }; |
| 232 | mat M(3, 3); |
| 233 | for (int i = 0; i < 9; i++) |
| 234 | M(i) = Marr[i]; |
| 235 | M = trans(M); |
| 236 | |
| 237 | double K1arr[9] = { 1, |
| 238 | sin(X3(5 - 1)) * sin(X3(4 - 1) - X1(4 - 1)) / cos(X3(5 - 1)), |
| 239 | (o2(1 - 1) * sin(X3(6 - 1)) + a2(1 - 1) * cos(X3(6 - 1))) / cos(X3(5 - 1)), |
| 240 | 0, |
| 241 | cos(X3(4 - 1) - X1(4 - 1)), |
| 242 | -cos(X1(5 - 1)) * sin(X3(4 - 1) - X1(4 - 1)), |
| 243 | 0, |
| 244 | sin(X3(4 - 1) - X1(4 - 1)) / cos(X3(5 - 1)), |
| 245 | cos(X1(5 - 1)) * cos(X3(4 - 1) - X1(4 - 1)) / cos(X3(5 - 1)) }; |
| 246 | mat K1(3, 3); |
| 247 | for (int i = 0; i < 9; i++) |
| 248 | K1(i) = K1arr[i]; |
| 249 | K1 = trans(K1); |
| 250 | |
| 251 | mat J1 = join_cols(join_rows(I, M), join_rows(Z, K1)); |
| 252 | return J1; |
| 253 | } |
| 254 | |
| 255 | mat Jplus2(const colvec& X1, const colvec& X2) { |
| 256 | colvec X3 = pose_update(X1, X2); |
nothing calls this directly
no test coverage detected