gtsam
Loading...
Searching...
No Matches
ABC.h File Reference

Core components for Attitude-Bias-Calibration systems. More...

Go to the source code of this file.

Classes

struct  gtsam::abc::State< N >
 Minimal state manifold for the biased attitude system: ξ = (R, b, S). More...
struct  gtsam::abc::Symmetry< N >
 Right action φ_ξ(X) = (R A, Aᵀ(b − a), Aᵀ C B) on the state manifold. More...
struct  gtsam::abc::Symmetry< N >::Orbit
struct  gtsam::abc::Lift< N >
 Implements the lift Λ(ξ,u) from the paper: Λ encodes the lifted dynamics on G induced by the biased gyroscope input u = (ω,0). More...
struct  gtsam::abc::InputAction< N >
 Encodes the partially applied input action ψ_u(X) = Aᵀ(ω − a), used to compute A(X,u) and Φ(X,u). More...
struct  gtsam::abc::OutputAction< N >
 Functor encoding the right action ρ_y(X) on direction measurements y, parameterized by the sensor index. More...
struct  gtsam::abc::Innovation< N >
struct  gtsam::traits< abc::State< N > >
struct  gtsam::traits< const abc::State< N > >

Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.

Typedefs

template<size_t N>
using gtsam::abc::Calibrations = PowerLieGroup<Rot3, static_cast<int>(N)>
 Bundle of calibration rotations modeled as a Lie group.
template<size_t n>
using gtsam::abc::Group = ProductLieGroup<Pose3, Calibrations<n>>
 Symmetry group G = Pose3 × Calibrations<n>.

Functions

Vector6 gtsam::abc::toInputVector (const Vector3 &w)
 Convert a measured angular velocity ω into the mathematical input (ω, 0).
template<size_t N>
State< N >::TangentVector gtsam::abc::dynamics (const Vector3 &omega, const State< N > &xi)
 Continuous-time dynamics on the manifold M = SO(3) x R^3 x SO(3)^N, as in Eq.
template<size_t N>
Matrix gtsam::abc::inputProcessNoise (const Matrix &Sigma6)
template<size_t N>
Matrix gtsam::abc::stateMatrixA (const typename InputAction< N >::Orbit &psi_u, const Group< N > &X_hat)
 Compute the state matrix A(X_hat).
template<size_t N>
Matrix gtsam::abc::inputMatrixB (const Group< N > &g)
 Compute the input matrix B(X_hat).
template<size_t N>
Matrix gtsam::abc::measurementMatrixC (const Unit3 &d, int index)
 Compute the measurement matrix C(φ_y).
template<size_t N>
Matrix3 gtsam::abc::outputMatrixD (const Group< N > &X_hat, int index)

Variables

template<size_t N>
auto gtsam::abc::asTriple
 Unpack g into A, a, and B.

Detailed Description

Core components for Attitude-Bias-Calibration systems.

This file contains fundamental components and utilities for the ABC system based on the paper "Overcoming Bias: Equivariant Filter Design for Biased Attitude Estimation with Online Calibration" by Fornasier et al.

We follow the paper's notation: the physical state is ξ = ((R,b), C) ∈ M, the symmetry group element is X = ((A,a), B) ∈ G, and the right actions φ_ξ(X) and ρ_y(X) drive the equivariant filter update. See Eqs. (4), (7), (14b), and (23)–(24) in Fornasier et al. (2022) for the continuous-time dynamics, lift Λ(ξ,u), output action, and EqF update.

This header is intentionally small so it can serve as a reference implementation for users who want to plug their own manifold into EquivariantFilter. Everything below is exercised by gtsam_unstable/geometry/tests/testABC.cpp and the examples/AbcEquivariantFilterExample.cpp demo: 1) a State manifold with retract/localCoordinates, 2) the symmetry Group and its action on the state, 3) lift/input/output actions needed by EquivariantFilter, 4) a handful of helpers for linearization (A/B/C matrices and process noise embedding). If you copy this file as a template, avoid adding extra behaviour the tests do not cover, so the example remains trustworthy.

Author
Darshan Rajasekaran
Jennifer Oum
Rohan Bansal
Frank Dellaert
Date
2025

Typedef Documentation

◆ Group

template<size_t n>
using gtsam::abc::Group = ProductLieGroup<Pose3, Calibrations<n>>

Symmetry group G = Pose3 × Calibrations<n>.

Pose3 handles the SE(3)-like part acting on (R, b) and Calibrations<n> handles the N extrinsic rotations.

Function Documentation

◆ dynamics()

template<size_t N>
State< N >::TangentVector gtsam::abc::dynamics ( const Vector3 & omega,
const State< N > & xi )
inline

Continuous-time dynamics on the manifold M = SO(3) x R^3 x SO(3)^N, as in Eq.

(2) of the paper. Given state ξ = (R, b, S) and body angular velocity ω, the state derivative is: Ṙ = R (ω - b)^ ḃ = 0 Ṡ_i = 0 We represent the tangent as a vector with components (δθ, δb, δσ_i).

Variable Documentation

◆ asTriple

template<size_t N>
auto gtsam::abc::asTriple
Initial value:
= [](const Group<N>& g)
-> std::tuple<const Rot3&, const Vector3&, const Calibrations<N>&> {
return std::tie(g.first.rotation(), g.first.translation(), g.second);
}
ProductLieGroup< Pose3, Calibrations< n > > Group
Symmetry group G = Pose3 × Calibrations<n>.
Definition ABC.h:150
PowerLieGroup< Rot3, static_cast< int >(N)> Calibrations
Bundle of calibration rotations modeled as a Lie group.
Definition ABC.h:63
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:65

Unpack g into A, a, and B.