The special Euclidean group

LieGroups.SpecialEuclideanGroup β€” Type
SpecialEuclideanGroup{T}

The special Euclidean group $\mathrm{SE}(n) = \mathrm{SO}(n) ⋉ \mathcal T(n)$ is the Lie group consisting of the LeftSemidirectProductGroupOperation of the SpecialOrthogonalGroup and the TranslationGroup together with the GroupOperationAction{LeftGroupOperationAction}.

To be precise, the group operation is defined on $\mathrm{SO}(n) ⋉ \mathcal T(n)$ as follows:

\[(r_1, t_1) β‹… (r_2, t_2) = (r_1∘r_2, t_1 + r_1β‹…t_2),\]

where $r_1,r_2 ∈ \mathrm{SO}(n)$ and $t_1,t_2 ∈ \mathcal T(n)$

Analogously you can write this on elements of $\mathrm{SO}(n) β‹Š \mathcal T(n)$ as

\[(t_1, r_1) β‹… (t_2, r_2) = (t_1 + r_1β‹…s_2, r_1∘r_2)\]

Both these cases can be represented in a single matrix in affine form

\[g = \begin{pmatrix} r & t\\ \mathbf{0}_n^{\mathrm{T}} & 1\end{pmatrix}, \qquad r ∈ \mathrm{SO}(n), t ∈ \mathcal T(n),\]

where $\mathbf{0}_n ∈ ℝ^n$ denotes the vector containing zeros.

We refer also in general to elements on $\mathrm{SE}(n)$ as $g$ and their rotation and translation components as $r$ and $t$, respectively.

Constructor

SpecialEuclideanGroup(n::Int; variant=:left, kwargs...)
SpecialOrthogonalGroup(n; kwargs...) ⋉ TranslationGroup(n; kwargs...)
TranslationGroup(n; kwargs...) β‹Š SpecialOrthogonalGroup(n; kwargs...)

Generate special Euclidean group $\mathrm{SE}(n) = \mathrm{SO}(n) ⋉ \mathcal T(n)$, where the first constructor is equivalent to the second.

All keyword arguments in kwargs... are passed on to Rotations as well.

The default representation for $\mathrm{SE}(n)$ is the affine form. Alternatively you can use the ArrayPartition from RecursiveArrayTools.jl to work on $(r,t)$. or for $\mathcal T(n) β‹Š \mathrm{SO}(n)$ using the ArrayPartitions $(t,r)$; which corresponds to setting variant=:right in the first constructor.

source

Representation of points and tangent vectors

LieGroups.SpecialEuclideanMatrixPoint β€” Type
SpecialEuclideanMatrixPoint <: AbstractLieGroupPoint

represent a point on some LieGroup by an affine matrix.

\[\begin{pmatrix} M & v\\ \mathbf{0}_n^{\mathrm{T}} & 1\end{pmatrix} ∈ ℝ^{(n+1)Γ—(n+1)}, \qquad M ∈ ℝ^{nΓ—n}, v ∈ \mathcal T(n),\]

where $\mathbf{0}_n ∈ ℝ^n$ denotes the vector containing zeros.

source
LieGroups.SpecialEuclideanMatrixTangentVector β€” Type
SpecialEuclideanMatrixTangentVector <: AbstractLieAlgebraTangentVector

represent a tangent vector on some LieGroup by a matrix of the form

\[\begin{pmatrix} M & v\\ \mathbf{0}_n^{\mathrm{T}} & 0\end{pmatrix} ∈ ℝ^{(n+1)Γ—(n+1)}, \qquad M ∈ ℝ^{nΓ—n}, v ∈ \mathcal T(n),\]

where $\mathbf{0}_n ∈ ℝ^n$ denotes the vector containing zeros.

While this tangent vector itself is not an affine matrix itself, it can be used for the Lie algebra of the affine group

source

Specific functions

Base.exp β€” Method
exp(G::SpecialEuclidean, X)
exp!(G::SpecialEuclidean, g, X)

Compute the Lie group exponential function on the SpecialEuclideanGroup G$=\mathrm{SE}(2)$ using a TypeParameter{Tuple{2}} for dispatch.

The Lie algebra vector $X = (Y, v) ∈ \mathfrak se(2)$ consists of a rotation component $Y ∈ \mathfrak so(2)$ and a translation component $v ∈ \mathfrak t(2)$, so we can use vee on $\mathrm{SO}(2)$ to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$)

For $Ξ± β‰  0$ define

\[U_Ξ± = \frac{\sinΞ±}{Ξ±}I_2 + \frac{1-\cosΞ±}{Ξ±^2}Y,\]

and $U_0 = I_2$, where $I_2$ is the identity matrix.

Then the result $g=(R,t)$ is given by

\[R = \exp_{\mathrm{SO}(2)}Y ∈ \mathrm{SO}(2), \quad \text{ and } \quad t = U_αv ∈ \mathcal T(2).\]

This result can be computed in-place of g.

source
Base.exp β€” Method
exp(G::SpecialEuclidean, X)
exp!(G::SpecialEuclidean, g, X)

Compute the Lie group exponential function on the SpecialEuclideanGroup G$=\mathrm{SE}(3)$ using a TypeParameter{Tuple{3}} for dispatch.

Since $X = (Y, v) ∈ \mathfrak se(3)$ consists of a rotation component $Y ∈ \mathfrak se(3)$ and a translation component $v ∈ \mathfrak t(3)$, we can use vee on $\mathrm{SO}(3)$ computing the coefficients norm to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$).

For $Ξ± β‰  0$ define

\[U_Ξ± = I_3 + \frac{1-\cosΞ±}{Ξ±^2}Y + \frac{Ξ±-\sinΞ±}{Ξ±^3}Y^2,\]

and $U_0 = I_3$, where $I_2$ is the identity matrix.

Then the result $g=(R,t)$ is given by

\[R = \exp_{\mathrm{SO}(3)}Y ∈ \mathrm{SO}(3), \quad \text{ and } \quad t = U_αv ∈ \mathcal T(3).\]

This result can be computed in-place of g.

source
Base.getindex β€” Method
g[G::SpecialEuclideanGroup,s]
getindex(g, G::SpecialEuclideanGroup, s)
X[𝔀,s]
getindex(g, 𝔀, s)

Access sub-parts of a SpecialEuclideanGroup G or its Lie algebra 𝔀. where s can be an index :Rotation, :Translation to access the single parts. Use : to access all submanifold components as a unified tuple.

source
Base.getindex β€” Method
g[G::SpecialEuclideanGroup,s]
getindex(g, G::SpecialEuclideanGroup, s)
X[𝔀,s]
getindex(g, 𝔀, s)

Access sub-parts of a SpecialEuclideanGroup G or its Lie algebra 𝔀. where s can be an index :Rotation, :Translation to access the single parts. Use : to access all submanifold components as a unified tuple.

source
Base.getindex β€” Method
g[G::SpecialEuclideanGroup,s]
getindex(g, G::SpecialEuclideanGroup, s)
X[𝔀,s]
getindex(g, 𝔀, s)

Access sub-parts of a SpecialEuclideanGroup G or its Lie algebra 𝔀. where s can be an index :Rotation, :Translation to access the single parts. Use : to access all submanifold components as a unified tuple.

source
Base.inv β€” Method
inv(G::SpecialEuclideanGroup, g)
inv(G::SpecialEuclideanGroup, h, g)

Compute the inverse element of a $g ∈ \mathrm{SE}(n)$ from the SpecialEuclideanGroup(n).

In affine form, $g = \begin{pmatrix} r & t\\ \mathbf{0}_n^{\mathrm{T}} & 1\end{pmatrix}$, where $\mathbf{0}_n ∈ ℝ^n$ denotes the vector containing zeros.

The inverse reads

\[g^{-1} = \begin{pmatrix} r^{\mathrm{T}} & -r^{\mathrm{T}}t\\ \mathbf{0}_n^{\mathrm{T}} & 1\end{pmatrix}.\]

This computation can be done in-place of h.

source
Base.log β€” Method
log(G::SpecialEuclidean, g)
log!(G::SpecialEuclidean, X, g)

Compute the Lie group logarithm function on the SpecialEuclideanGroup G$=\mathrm{SE}(2)$, and G uses a TypeParameter{Tuple{2}} for dispatch.

Since $g=(R,t) ∈ \mathrm{SE}(2)$ consists of a rotation component $R ∈ \mathrm{SO}(2)$ and a translation component $t ∈ \mathcal T(2)$, we first compute $Y = \log_{\mathrm{SO}(2)}R$. Then we can use vee on $\mathrm{SO}(2)$ to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$)

For $Ξ± β‰  0$ define

\[V_Ξ± = \frac{Ξ±}{2} \begin{pmatrix} \frac{\sinΞ±}{1-\cosΞ±} & 1\\ -1 & \frac{\sinΞ±}{1-\cosΞ±}\end{pmatrix}\]

and $V_0 = I_2$, where $I_2$ is the identity matrix. Note that this is the inverse of $U_Ξ±$ as given in the group exponential

Then the result $X = (Y, v) ∈ \mathfrak se(2)$ is given by $Y ∈ \mathfrak so(2)$ as computed above and

\[v = V_αr ∈ \mathcal T(2),\]

where $v$ is computed in-place without setting up $V_Ξ±$

This result can be computed in-place of g.

source
Base.log β€” Method
log(G::SpecialEuclidean, g)
log!(G::SpecialEuclidean, X, g)

Compute the Lie group logarithm function on the SpecialEuclideanGroup G$=\mathrm{SE}(3)$, where e is the Identity on $\mathrm{SE}(3)$ G uses a TypeParameter{Tuple{3}} for dispatch.

Since $g=(R,t) ∈ \mathrm{SE}(3)$ consists of a rotation component $R ∈ \mathrm{SO}(3)$ and a translation component $t ∈ \mathcal T(2)$, we first compute $Y = \log_{\mathrm{SO}(3)}R$. Then we can use vee on $\mathrm{SO}(3)$ to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$)

For $Ξ± β‰  0$ define

\[V_Ξ± = I_3 - \frac{1}{2}Y + Ξ² Y^2, \quad\text{ where } Ξ² = \frac{1}{Ξ±^2} - \frac{1 + \cos(Ξ±)}{2Ξ±\sin(Ξ±)}\]

and $V_0 = I_3$, where $I_3$ is the identity matrix. Note that this is the inverse of $U_Ξ±$ as given in the group exponential

Then the result $X = (Y, v) ∈ \mathfrak se(3)$ is given by $Y ∈ \mathfrak so(3)$ as computed above and $v = V_α t ∈ \mathfrak t(3)$.

This result can be computed in-place of X.

source
LieGroups.init_constants! β€” Method
init_constants!(G::SpecialEuclidean, g)
init_Constants!(𝔰𝔒::LieAlgebra{ℝ, SpecialEuclideanGroupOperation, SpecialEuclidean}, X)

Initialize the constant elements of g or X.

The matrix representation of $g∈\mathrm{SE}(n)$ has a last row, that contains zeros, besides the diagonal element, which is $g_{n+1,n+1} = 1$.

The matrix representation of $X∈\mathfrak se(n)$ has a last row that contains zeros.

this function sets these entries accordingly.

Per default for other representations, this function does not change entries for them.

source
LieGroups.init_constants! β€” Method
init_constants!(G::SpecialEuclidean, g)
init_Constants!(𝔰𝔒::LieAlgebra{ℝ, SpecialEuclideanGroupOperation, SpecialEuclidean}, X)

Initialize the constant elements of g or X.

The matrix representation of $g∈\mathrm{SE}(n)$ has a last row, that contains zeros, besides the diagonal element, which is $g_{n+1,n+1} = 1$.

The matrix representation of $X∈\mathfrak se(n)$ has a last row that contains zeros.

this function sets these entries accordingly.

Per default for other representations, this function does not change entries for them.

source
LieGroups.inv! β€” Method
inv(G::SpecialEuclideanGroup, g)
inv(G::SpecialEuclideanGroup, h, g)

Compute the inverse element of a $g ∈ \mathrm{SE}(n)$ from the SpecialEuclideanGroup(n).

In affine form, $g = \begin{pmatrix} r & t\\ \mathbf{0}_n^{\mathrm{T}} & 1\end{pmatrix}$, where $\mathbf{0}_n ∈ ℝ^n$ denotes the vector containing zeros.

The inverse reads

\[g^{-1} = \begin{pmatrix} r^{\mathrm{T}} & -r^{\mathrm{T}}t\\ \mathbf{0}_n^{\mathrm{T}} & 1\end{pmatrix}.\]

This computation can be done in-place of h.

source
ManifoldsBase.exp! β€” Method
exp(G::SpecialEuclidean, X)
exp!(G::SpecialEuclidean, g, X)

Compute the Lie group exponential function on the SpecialEuclideanGroup G$=\mathrm{SE}(3)$ using a TypeParameter{Tuple{3}} for dispatch.

Since $X = (Y, v) ∈ \mathfrak se(3)$ consists of a rotation component $Y ∈ \mathfrak se(3)$ and a translation component $v ∈ \mathfrak t(3)$, we can use vee on $\mathrm{SO}(3)$ computing the coefficients norm to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$).

For $Ξ± β‰  0$ define

\[U_Ξ± = I_3 + \frac{1-\cosΞ±}{Ξ±^2}Y + \frac{Ξ±-\sinΞ±}{Ξ±^3}Y^2,\]

and $U_0 = I_3$, where $I_2$ is the identity matrix.

Then the result $g=(R,t)$ is given by

\[R = \exp_{\mathrm{SO}(3)}Y ∈ \mathrm{SO}(3), \quad \text{ and } \quad t = U_αv ∈ \mathcal T(3).\]

This result can be computed in-place of g.

source
ManifoldsBase.exp! β€” Method
exp(G::SpecialEuclidean, X)
exp!(G::SpecialEuclidean, g, X)

Compute the Lie group exponential function on the SpecialEuclideanGroup G$=\mathrm{SE}(2)$ using a TypeParameter{Tuple{2}} for dispatch.

The Lie algebra vector $X = (Y, v) ∈ \mathfrak se(2)$ consists of a rotation component $Y ∈ \mathfrak so(2)$ and a translation component $v ∈ \mathfrak t(2)$, so we can use vee on $\mathrm{SO}(2)$ to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$)

For $Ξ± β‰  0$ define

\[U_Ξ± = \frac{\sinΞ±}{Ξ±}I_2 + \frac{1-\cosΞ±}{Ξ±^2}Y,\]

and $U_0 = I_2$, where $I_2$ is the identity matrix.

Then the result $g=(R,t)$ is given by

\[R = \exp_{\mathrm{SO}(2)}Y ∈ \mathrm{SO}(2), \quad \text{ and } \quad t = U_αv ∈ \mathcal T(2).\]

This result can be computed in-place of g.

source
ManifoldsBase.log! β€” Method
log(G::SpecialEuclidean, g)
log!(G::SpecialEuclidean, X, g)

Compute the Lie group logarithm function on the SpecialEuclideanGroup G$=\mathrm{SE}(2)$, and G uses a TypeParameter{Tuple{2}} for dispatch.

Since $g=(R,t) ∈ \mathrm{SE}(2)$ consists of a rotation component $R ∈ \mathrm{SO}(2)$ and a translation component $t ∈ \mathcal T(2)$, we first compute $Y = \log_{\mathrm{SO}(2)}R$. Then we can use vee on $\mathrm{SO}(2)$ to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$)

For $Ξ± β‰  0$ define

\[V_Ξ± = \frac{Ξ±}{2} \begin{pmatrix} \frac{\sinΞ±}{1-\cosΞ±} & 1\\ -1 & \frac{\sinΞ±}{1-\cosΞ±}\end{pmatrix}\]

and $V_0 = I_2$, where $I_2$ is the identity matrix. Note that this is the inverse of $U_Ξ±$ as given in the group exponential

Then the result $X = (Y, v) ∈ \mathfrak se(2)$ is given by $Y ∈ \mathfrak so(2)$ as computed above and

\[v = V_αr ∈ \mathcal T(2),\]

where $v$ is computed in-place without setting up $V_Ξ±$

This result can be computed in-place of g.

source
ManifoldsBase.log! β€” Method
log(G::SpecialEuclidean, g)
log!(G::SpecialEuclidean, X, g)

Compute the Lie group logarithm function on the SpecialEuclideanGroup G$=\mathrm{SE}(3)$, where e is the Identity on $\mathrm{SE}(3)$ G uses a TypeParameter{Tuple{3}} for dispatch.

Since $g=(R,t) ∈ \mathrm{SE}(3)$ consists of a rotation component $R ∈ \mathrm{SO}(3)$ and a translation component $t ∈ \mathcal T(2)$, we first compute $Y = \log_{\mathrm{SO}(3)}R$. Then we can use vee on $\mathrm{SO}(3)$ to obtain the angle of rotation $α$ (or alternatively using $\sqrt{2}α = \lVert Y \rVert_{}$)

For $Ξ± β‰  0$ define

\[V_Ξ± = I_3 - \frac{1}{2}Y + Ξ² Y^2, \quad\text{ where } Ξ² = \frac{1}{Ξ±^2} - \frac{1 + \cos(Ξ±)}{2Ξ±\sin(Ξ±)}\]

and $V_0 = I_3$, where $I_3$ is the identity matrix. Note that this is the inverse of $U_Ξ±$ as given in the group exponential

Then the result $X = (Y, v) ∈ \mathfrak se(3)$ is given by $Y ∈ \mathfrak so(3)$ as computed above and $v = V_α t ∈ \mathfrak t(3)$.

This result can be computed in-place of X.

source