ekf2: fix joseph covariance update for Schmidt-Kalman filter

If part of the Kalman gain is zeroed, the first step of the joseph
update does not produce a symmetrical matrix.
This commit is contained in:
bresch
2024-03-07 15:11:47 +01:00
committed by Mathieu Bresciani
parent 1e253a9626
commit 421f13e4b5
3 changed files with 50 additions and 10 deletions
+18
View File
@@ -162,6 +162,24 @@ public:
return res;
}
// Using this function reduces the number of temporary variables needed to compute A * B.T
template<size_t P>
Matrix<Type, M, M> multiplyByTranspose(const Matrix<Type, P, N> &other) const
{
Matrix<Type, M, P> res;
const Matrix<Type, M, N> &self = *this;
for (size_t i = 0; i < M; i++) {
for (size_t k = 0; k < P; k++) {
for (size_t j = 0; j < N; j++) {
res(i, k) += self(i, j) * other(k, j);
}
}
}
return res;
}
// Element-wise multiplication
Matrix<Type, M, N> emult(const Matrix<Type, M, N> &other) const
{