gtsam
Loading...
Searching...
No Matches
ABCEquivariantFilter.h
Go to the documentation of this file.
1
14
15#pragma once
16
17#include <gtsam/base/Matrix.h>
18#include <gtsam/base/Vector.h>
20#include <gtsam/geometry/Rot3.h>
21#include <gtsam/geometry/Unit3.h>
24
25namespace gtsam {
26namespace abc {
27
44template <size_t N>
46 : public gtsam::EquivariantFilter<State<N>, Symmetry<N>> {
47 public:
49
58 : AbcEquivariantFilter(Matrix::Identity(6 + 3 * N, 6 + 3 * N)) {}
59
68 explicit AbcEquivariantFilter(const Matrix& Sigma0)
69 : gtsam::EquivariantFilter<State<N>, Symmetry<N>>(State<N>::identity(),
70 Sigma0) {}
71
83 void predict(const Vector3& omega, const Matrix6& inputCovariance,
84 double dt) {
85 const Matrix Q = inputProcessNoise<N>(inputCovariance);
86 const Vector6 u = toInputVector(omega);
87 const Lift<N> lift_u(u);
88 const typename InputAction<N>::Orbit psi_u(u);
89
90 const Group<N> X_hat = this->groupEstimate();
91 const Matrix A = stateMatrixA<N>(psi_u, X_hat);
92 const Matrix B = inputMatrixB<N>(X_hat);
93 const Matrix Qc = B * Q * B.transpose();
94
95 this->template predictWithJacobian<2>(lift_u, A, Qc, dt);
96 }
97
111 void update(const Unit3& y, const Unit3& d, const Matrix3& R, int cal_idx) {
112 const Innovation<N> innovation(y, d, cal_idx);
113 const Group<N> X_hat = this->groupEstimate();
114 const Matrix3 D = outputMatrixD<N>(X_hat, cal_idx);
115 const Matrix3 R_adjusted = D * R * D.transpose();
116 this->template update<Vector3>(innovation, Z_3x1, R_adjusted);
117 }
118
123 Rot3 attitude() const { return this->state().R; }
124
129 Vector3 bias() const { return this->state().b; }
130
136 Rot3 calibration(size_t i) const { return this->state().S[i]; }
137};
138
139} // namespace abc
140} // namespace gtsam
typedef and functions to augment Eigen's MatrixXd
Macros for Vector constants to avoid excessive template instantiation.
typedef and functions to augment Eigen's VectorXd
3D rotation represented as a rotation matrix or quaternion
Equivariant Filter (EqF) implementation.
Core components for Attitude-Bias-Calibration systems.
Matrix stateMatrixA(const typename InputAction< N >::Orbit &psi_u, const Group< N > &X_hat)
Compute the state matrix A(X_hat).
Definition ABC.h:338
Vector6 toInputVector(const Vector3 &w)
Convert a measured angular velocity ω into the mathematical input (ω, 0).
Definition ABC.h:57
ProductLieGroup< Pose3, Calibrations< n > > Group
Symmetry group G = Pose3 × Calibrations<n>.
Definition ABC.h:150
Matrix inputMatrixB(const Group< N > &g)
Compute the input matrix B(X_hat).
Definition ABC.h:354
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:65
Represents a 3D point on a unit sphere.
Definition Unit3.h:44
Equivariant Filter (EqF) for state estimation on Lie groups.
Definition EquivariantFilter.h:50
EquivariantFilter(const State< N > &xi_ref, const CovarianceM &Sigma, const G &X0=traits< G >::Identity())
Definition EquivariantFilter.h:157
void predictWithJacobian(const Lift &lift_u, const MatrixM &A, const MatrixM &Qc, double dt)
Definition EquivariantFilter.h:313
const G & groupEstimate() const
Definition EquivariantFilter.h:208
Minimal state manifold for the biased attitude system: ξ = (R, b, S).
Definition ABC.h:74
Right action φ_ξ(X) = (R A, Aᵀ(b − a), Aᵀ C B) on the state manifold.
Definition ABC.h:170
Implements the lift Λ(ξ,u) from the paper: Λ encodes the lifted dynamics on G induced by the biased g...
Definition ABC.h:268
Definition ABC.h:419
Rot3 calibration(size_t i) const
Get calibration estimate for a specific sensor.
Definition ABCEquivariantFilter.h:136
Vector3 bias() const
Get current gyroscope bias estimate.
Definition ABCEquivariantFilter.h:129
Rot3 attitude() const
Get current attitude estimate.
Definition ABCEquivariantFilter.h:123
void update(const Unit3 &y, const Unit3 &d, const Matrix3 &R, int cal_idx)
Measurement update using a direction observation.
Definition ABCEquivariantFilter.h:111
AbcEquivariantFilter()
Default constructor with identity initial covariance.
Definition ABCEquivariantFilter.h:57
AbcEquivariantFilter(const Matrix &Sigma0)
Construct filter with custom initial covariance.
Definition ABCEquivariantFilter.h:68
void predict(const Vector3 &omega, const Matrix6 &inputCovariance, double dt)
Prediction step using gyroscope measurements.
Definition ABCEquivariantFilter.h:83