The special Galilean group

LieGroups.RotationBoostAction β€” Type
RotationBoostAction

The group action of the semidirect product of spatial rotations and velocity boosts ($(R, v) \in SO(n) ⋉ ℝⁿ$) on the space of events (position, time) ($(p, t) \in ℝⁿ Γ— ℝ$). See [Kel25, section 4.1] and apply!.

source
LieGroups.SpecialGalileanGroup β€” Method
SpecialGalileanGroup(n::Int)

Construct the special Galilean group SGal(n) as a nested semidirect product: $(SO(n) ⋉ ℝⁿ) ⋉ (ℝⁿ Γ— ℝ)$ where $R ∈ SO(n)$ are spatial rotations, $v ∈ ℝⁿ$ are velocity boosts, and $(p, t) ∈ (ℝⁿ Γ— ℝ)$ are the (position, time) events. The affine representation of the group is given by the matrix:

\[\mathrm{SGal}(3) = \begin{bmatrix} R & v & p \\ 0 & 1 & t \\ 0 & 0 & 1 \end{bmatrix} \subset \mathbb{R}^{5\times 5}\]

And the ArrayPartition representation as: $((R, v), (p, t))$

The group operation (compose) is given by:

\[((R_1, v_1), (p_1, t_1)) \circ ((R_2, v_2), (p_2, t_2)) = ((R_1 R_2, v_1 + R_1 v_2), (p_1 + v_1 t_2 + R_1 p_2, t_1 + t_2))\]

and the identity element (identity_element) is $((I_n, \mathbf{0}), (\mathbf{0}, 0))$.

Technical Detail

The ArrayPartition (default) implementation requires RecursiveArrayTools.jl to be loaded. The matrix representation is not implemented yet.

[Kel25]

source
Base.exp β€” Method
LieGroups.exp(M::SpecialGalileanGroup, X)
LieGroups.exp!(M::SpecialGalileanGroup, h, X)

Compute the Lie group exponential function on the SpecialGalileanGroup(3), where X is an element of the Lie algebra.

The closed-form expression for the matrix exponential from [Kel25, section 6] is used.

\[\exp X = \exp{\begin{bmatrix} \boldsymbol{\phi}^\wedge & \nu & \rho \\ 0 & 0 & \iota \\ 0 & 0 & 0 \end{bmatrix}} = \begin{bmatrix} C & Dν & Dρ + Eνι \\ 0 & 1 & ι \\ 0 & 0 & 1 \end{bmatrix},\]

where

\[C = I_3 + \sin(\phi)\, \mathbf{u}^{\wedge} + \bigl(1 - \cos(\phi)\bigr)\, \mathbf{u}^{\wedge}\mathbf{u}^{\wedge}, \\ D = I_3 + \frac{1 - \cos(\phi)}{\phi} \, \mathbf{u}^{\wedge} + \frac{\phi - \sin(\phi)}{\phi} \, \mathbf{u}^{\wedge}\mathbf{u}^{\wedge}, \\ E = \tfrac12 I_3 + \frac{\phi - \sin(\phi)}{\phi^2} \, \mathbf{u}^{\wedge} + \frac{\phi^2 + 2\cos(\phi) - 2}{2\phi^2} \, \mathbf{u}^{\wedge}\mathbf{u}^{\wedge}.\]

$\boldsymbol{\phi}=\phi \mathbf{u}$ is the angle-axis rotation parameterization with $\phi = \|\boldsymbol{\phi}\|$ and $\mathbf{u} = \boldsymbol{\phi}/\phi$.

The computation can be done in-place of h.

source
Base.log β€” Method
LieGroups.log(M::SpecialGalileanGroup, g)
LieGroups.log!(M::SpecialGalileanGroup, X, g)

Compute the Lie group logarithm function on the SpecialGalileanGroup(3), where g is a group element.

The closed-form expression from [Kel25, section 6] is used.

The computation can be done in-place of X.

source
LieGroups.apply! β€” Method
LieGroups.apply!(A::GroupAction{RotationBoostAction}, k, g, h)

Apply the action of the rotation-boost semidirect product group (SO(n) ⋉ ℝⁿ) on an event $(p, t)$. Given group element $g = (R, v)$ and event $h = (p, t)$, computes the transformed event $k = (Rp + vt, t)$. See [Kel25, section 4.1].

source
LieGroups.jacobian_exp β€” Function
jacobian_exp(G::SpecialGalileanGroup, X, ::DefaultLieAlgebraOrthogonalBasis)
jacobian_exp!(G::SpecialGalileanGroup, J, X, ::DefaultLieAlgebraOrthogonalBasis)

Compute the Jacobian of the Lie group exponential in a basis of the Lie algebra on the SpecialGalileanGroup(3).

The closed form of the left Jacobian $\mathbf{J}_β„“$ from [Kel25, section 8, equations (31)–(36)] is used. In the coordinate order $ΞΎ = (ρ, Ξ½, Ο•, ΞΉ)$ (see hat) it has the block structure

\[\mathbf{J}_β„“(ΞΎ) = \begin{pmatrix} \mathbf{D} & -\mathbf{L}ΞΉ & \mathbf{N} & \mathbf{E}Ξ½ \\ \mathbf{0} & \mathbf{D} & \mathbf{M} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{D} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & 1 \end{pmatrix} ∈ ℝ^{10Γ—10},\]

where $\mathbf{D}$ is the left Jacobian of $\mathrm{SO}(3)$, $\mathbf{E}$ and $\mathbf{L}$ are given by [Kel25, equations (19) and (32)], $\mathbf{M}$ and $\mathbf{N} = \mathbf{N}_1 - \mathbf{N}_2$ by [Kel25, equations (33)–(36)]. Consistent with the convention used for jacobian_exp on the other groups (the left-trivialized differential of the exponential), this function returns the right Jacobian $\mathbf{J}_r(ΞΎ) = \mathbf{J}_β„“(-ΞΎ)$.

For small rotation angles the Jacobian is evaluated by truncating the series $\mathbf{J}_β„“(ΞΎ) = \sum_{n β‰₯ 0} \frac{1}{(n+1)!} \operatorname{ad}_ΞΎ^n$ of the adjoint matrix [Kel25, equation (28)], which is numerically robust there.

source
LieGroups.jacobian_exp! β€” Function
jacobian_exp(G::SpecialGalileanGroup, X, ::DefaultLieAlgebraOrthogonalBasis)
jacobian_exp!(G::SpecialGalileanGroup, J, X, ::DefaultLieAlgebraOrthogonalBasis)

Compute the Jacobian of the Lie group exponential in a basis of the Lie algebra on the SpecialGalileanGroup(3).

The closed form of the left Jacobian $\mathbf{J}_β„“$ from [Kel25, section 8, equations (31)–(36)] is used. In the coordinate order $ΞΎ = (ρ, Ξ½, Ο•, ΞΉ)$ (see hat) it has the block structure

\[\mathbf{J}_β„“(ΞΎ) = \begin{pmatrix} \mathbf{D} & -\mathbf{L}ΞΉ & \mathbf{N} & \mathbf{E}Ξ½ \\ \mathbf{0} & \mathbf{D} & \mathbf{M} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{D} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & 1 \end{pmatrix} ∈ ℝ^{10Γ—10},\]

where $\mathbf{D}$ is the left Jacobian of $\mathrm{SO}(3)$, $\mathbf{E}$ and $\mathbf{L}$ are given by [Kel25, equations (19) and (32)], $\mathbf{M}$ and $\mathbf{N} = \mathbf{N}_1 - \mathbf{N}_2$ by [Kel25, equations (33)–(36)]. Consistent with the convention used for jacobian_exp on the other groups (the left-trivialized differential of the exponential), this function returns the right Jacobian $\mathbf{J}_r(ΞΎ) = \mathbf{J}_β„“(-ΞΎ)$.

For small rotation angles the Jacobian is evaluated by truncating the series $\mathbf{J}_β„“(ΞΎ) = \sum_{n β‰₯ 0} \frac{1}{(n+1)!} \operatorname{ad}_ΞΎ^n$ of the adjoint matrix [Kel25, equation (28)], which is numerically robust there.

source
ManifoldsBase.exp! β€” Method
LieGroups.exp(M::SpecialGalileanGroup, X)
LieGroups.exp!(M::SpecialGalileanGroup, h, X)

Compute the Lie group exponential function on the SpecialGalileanGroup(3), where X is an element of the Lie algebra.

The closed-form expression for the matrix exponential from [Kel25, section 6] is used.

\[\exp X = \exp{\begin{bmatrix} \boldsymbol{\phi}^\wedge & \nu & \rho \\ 0 & 0 & \iota \\ 0 & 0 & 0 \end{bmatrix}} = \begin{bmatrix} C & Dν & Dρ + Eνι \\ 0 & 1 & ι \\ 0 & 0 & 1 \end{bmatrix},\]

where

\[C = I_3 + \sin(\phi)\, \mathbf{u}^{\wedge} + \bigl(1 - \cos(\phi)\bigr)\, \mathbf{u}^{\wedge}\mathbf{u}^{\wedge}, \\ D = I_3 + \frac{1 - \cos(\phi)}{\phi} \, \mathbf{u}^{\wedge} + \frac{\phi - \sin(\phi)}{\phi} \, \mathbf{u}^{\wedge}\mathbf{u}^{\wedge}, \\ E = \tfrac12 I_3 + \frac{\phi - \sin(\phi)}{\phi^2} \, \mathbf{u}^{\wedge} + \frac{\phi^2 + 2\cos(\phi) - 2}{2\phi^2} \, \mathbf{u}^{\wedge}\mathbf{u}^{\wedge}.\]

$\boldsymbol{\phi}=\phi \mathbf{u}$ is the angle-axis rotation parameterization with $\phi = \|\boldsymbol{\phi}\|$ and $\mathbf{u} = \boldsymbol{\phi}/\phi$.

The computation can be done in-place of h.

source
ManifoldsBase.hat! β€” Method
X = hat(𝔀::LieAlgebra{ℝ,LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, c)
hat!(𝔀::LieAlgebra{ℝ,LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, X, c)

Compute the hat map $(β‹…)^{\wedge} : ℝ^{10} β†’ 𝔀$ that turns a vector of coordinates c into a tangent vector in the Lie algebra.

\[\begin{bmatrix} \rho \\ \nu \\ \phi \\ \iota \end{bmatrix}^\wedge = \begin{bmatrix} \phi^\wedge & \nu & \rho \\ 0 & 0 & \iota \\ 0 & 0 & 0 \end{bmatrix} \in \mathbb{R}^{5\times 5}\]

The basis is defined in eq 14 of [Kel25].

This can be computed in-place of X.

source
ManifoldsBase.hat β€” Method
X = hat(𝔀::LieAlgebra{ℝ,LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, c)
hat!(𝔀::LieAlgebra{ℝ,LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, X, c)

Compute the hat map $(β‹…)^{\wedge} : ℝ^{10} β†’ 𝔀$ that turns a vector of coordinates c into a tangent vector in the Lie algebra.

\[\begin{bmatrix} \rho \\ \nu \\ \phi \\ \iota \end{bmatrix}^\wedge = \begin{bmatrix} \phi^\wedge & \nu & \rho \\ 0 & 0 & \iota \\ 0 & 0 & 0 \end{bmatrix} \in \mathbb{R}^{5\times 5}\]

The basis is defined in eq 14 of [Kel25].

This can be computed in-place of X.

source
ManifoldsBase.log! β€” Method
LieGroups.log(M::SpecialGalileanGroup, g)
LieGroups.log!(M::SpecialGalileanGroup, X, g)

Compute the Lie group logarithm function on the SpecialGalileanGroup(3), where g is a group element.

The closed-form expression from [Kel25, section 6] is used.

The computation can be done in-place of X.

source
ManifoldsBase.vee! β€” Method
c = vee(𝔀::LieAlgebra{ℝ,<:LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, X)
vee!(𝔀::LieAlgebra{ℝ,LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, c, X)

Compute the vee map $(β‹…)^{\vee}: \mathfrak g β†’ ℝ^{10}$ that maps a tangent vector from the Lie algebra to a vector of coordinates c.

\[\begin{bmatrix} \phi^\wedge & \nu & \rho \\ 0 & 0 & \iota \\ 0 & 0 & 0 \end{bmatrix}^\vee = \begin{bmatrix} \rho \\ \nu \\ \phi \\ \iota \end{bmatrix} \in \mathbb{R}^{10}\]

The basis is defined in eq 14 of [Kel25].

This can be computed in-place of c.

source
ManifoldsBase.vee β€” Method
c = vee(𝔀::LieAlgebra{ℝ,<:LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, X)
vee!(𝔀::LieAlgebra{ℝ,LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, c, X)

Compute the vee map $(β‹…)^{\vee}: \mathfrak g β†’ ℝ^{10}$ that maps a tangent vector from the Lie algebra to a vector of coordinates c.

\[\begin{bmatrix} \phi^\wedge & \nu & \rho \\ 0 & 0 & \iota \\ 0 & 0 & 0 \end{bmatrix}^\vee = \begin{bmatrix} \rho \\ \nu \\ \phi \\ \iota \end{bmatrix} \in \mathbb{R}^{10}\]

The basis is defined in eq 14 of [Kel25].

This can be computed in-place of c.

source
LieGroups.lie_bracket! β€” Method
lie_bracket(π”°π”€π”žπ”©::LieAlgebra{ℝ,<:LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, X, Y)
lie_bracket!(π”°π”€π”žπ”©::LieAlgebra{ℝ,<:LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, Z, X, Y)

Compute the Lie bracket $[X, Y] = XY - YX$ of two tangent vectors X, Y of the Lie algebra of the SpecialGalileanGroup(3), i.e. the matrix commutator of their $5Γ—5$ hat representations.

In the $((\Omega, \nu), (\rho, \iota))$ block form (see hat) this reduces to

\[[X, Y] = \bigl( (\Omega_X \Omega_Y - \Omega_Y \Omega_X,\ \Omega_X \nu_Y - \Omega_Y \nu_X),\ (\Omega_X \rho_Y - \Omega_Y \rho_X + \iota_Y \nu_X - \iota_X \nu_Y,\ 0) \bigr).\]

The basis is defined in eq. (14) of [Kel25].

This can be computed in-place of Z.

source
LieGroups.lie_bracket β€” Method
lie_bracket(π”°π”€π”žπ”©::LieAlgebra{ℝ,<:LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, X, Y)
lie_bracket!(π”°π”€π”žπ”©::LieAlgebra{ℝ,<:LeftSpecialGalileanGroupOperation,<:SpecialGalileanGroup}, Z, X, Y)

Compute the Lie bracket $[X, Y] = XY - YX$ of two tangent vectors X, Y of the Lie algebra of the SpecialGalileanGroup(3), i.e. the matrix commutator of their $5Γ—5$ hat representations.

In the $((\Omega, \nu), (\rho, \iota))$ block form (see hat) this reduces to

\[[X, Y] = \bigl( (\Omega_X \Omega_Y - \Omega_Y \Omega_X,\ \Omega_X \nu_Y - \Omega_Y \nu_X),\ (\Omega_X \rho_Y - \Omega_Y \rho_X + \iota_Y \nu_X - \iota_X \nu_Y,\ 0) \bigr).\]

The basis is defined in eq. (14) of [Kel25].

This can be computed in-place of Z.

source