From e365102d6e7da996258519451cb2cd2c65270101 Mon Sep 17 00:00:00 2001 From: Easton Potokar Date: Mon, 9 Sep 2024 09:58:12 -0400 Subject: [PATCH] Add micro lie theory reference --- assets/references.bib | 11 +++++++++++ src/variables/mod.rs | 10 ++++++---- src/variables/traits.rs | 8 ++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 assets/references.bib diff --git a/assets/references.bib b/assets/references.bib new file mode 100644 index 0000000..c01602f --- /dev/null +++ b/assets/references.bib @@ -0,0 +1,11 @@ +@article{solaMicroLieTheory2021, + title = {A Micro {{Lie}} Theory for State Estimation in Robotics}, + author = {Sol{\`a}, Joan and Deray, Jeremie and Atchuthan, Dinesh}, + year = {2021}, + month = dec, + journal = {arXiv:1812.01537}, + eprint = {1812.01537}, + primaryclass = {cs}, + urldate = {2022-05-11}, + archiveprefix = {arXiv} +} diff --git a/src/variables/mod.rs b/src/variables/mod.rs index fce7965..02f263d 100644 --- a/src/variables/mod.rs +++ b/src/variables/mod.rs @@ -2,8 +2,9 @@ //! //! This module contains the definition of the variables that can be optimized //! using the optimization algorithms. We model each variable as a Lie group -//! $\mathcal{G}$, even if it is trivially so. Because of this, each type $X \in -//! \mathcal{G}$ must satisfy the following properties, +//! $\mathcal{G}$ [^@solaMicroLieTheory2021], even if it is trivially so. +//! Because of this, each type $X \in \mathcal{G}$ must satisfy the following +//! properties, //! //! Identity //! $$ @@ -30,8 +31,7 @@ //! X \in \mathcal{G} \implies \log(X) \in \mathfrak{g} //! $$ //! Finally, for optimization purposes, we adopt $\oplus$ and $\ominus$ -//! operators as defined in "Micro Lie Theory" by Joan Solà. By default this -//! results in, +//! operators [^@solaMicroLieTheory2021], //! //! $$ //! x \oplus \xi = x \cdot \exp(\xi) \\\\ @@ -51,6 +51,8 @@ //! [Variable] and call the [tag_variable](crate::tag_variable) macro if using //! serde. We also recommend using the [test_variable](crate::test_variable) //! macro to ensure these properties are satisfied. +//! +//! [^@solaMicroLieTheory2021]: Solà, Joan, et al. “A Micro Lie Theory for State Estimation in Robotics.” Arxiv:1812.01537, Dec. 2021 mod traits; pub use traits::{MatrixLieGroup, Variable, VariableSafe, VariableUmbrella}; diff --git a/src/variables/traits.rs b/src/variables/traits.rs index f388cc5..3e7618a 100644 --- a/src/variables/traits.rs +++ b/src/variables/traits.rs @@ -56,7 +56,7 @@ pub trait Variable: Clone + Sized + Display + Debug { /// Adds value from the tangent space to the group element /// - /// By default this uses the "right" version as found in Micro Lie Theory + /// By default this uses the "right" version [^@solaMicroLieTheory2021] /// $$ /// x \oplus \xi = x \cdot \exp(\xi) /// $$ @@ -64,6 +64,8 @@ pub trait Variable: Clone + Sized + Display + Debug { /// $$ /// x \oplus \xi = \exp(\xi) \cdot x /// $$ + /// + /// [^@solaMicroLieTheory2021]: Solà, Joan, et al. “A Micro Lie Theory for State Estimation in Robotics.” Arxiv:1812.01537, Dec. 2021 fn oplus(&self, xi: VectorViewX) -> Self { if cfg!(feature = "left") { Self::exp(xi).compose(self) @@ -74,7 +76,7 @@ pub trait Variable: Clone + Sized + Display + Debug { /// Compares two group elements in the tangent space /// - /// By default this uses the "right" version as found in Micro Lie Theory + /// By default this uses the "right" version [^@solaMicroLieTheory2021] /// $$ /// x \ominus y = \log(y^{-1} \cdot x) /// $$ @@ -82,6 +84,8 @@ pub trait Variable: Clone + Sized + Display + Debug { /// $$ /// x \ominus y = \log(x \cdot y^{-1}) /// $$ + /// + /// [^@solaMicroLieTheory2021]: Solà, Joan, et al. “A Micro Lie Theory for State Estimation in Robotics.” Arxiv:1812.01537, Dec. 2021 fn ominus(&self, y: &Self) -> VectorX { if cfg!(feature = "left") { self.compose(&y.inverse()).log()