The special Galilean group
LieGroups.RotationBoostAction β Type
RotationBoostActionThe 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!.
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))$.
The ArrayPartition (default) implementation requires RecursiveArrayTools.jl to be loaded. The matrix representation is not implemented yet.
[Kel25]
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.
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.
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].
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.