The Euclidean group in 3-dimensional space is known as SE(3)—the group of rigid-body motions in 3D. This has applications in kinematics, computer vision, robotics, etc. SE(3) is a Lie group, and has a corresponding Lie algebra representing the tangent space at the identity—the space of rigid-body velocities.
This group is generally represented as a homogeneous transformation matrix: a 4×4 matrix with the top-left 3×3 block a rotation matrix—an element of SO(3), the top-right 3×1 block a translation vector, and the bottom row being [0 0 0 1].
Exponential map[edit]
The exponential map on SE(3) is given by the matrix exponential and matrix logarithm. The logarithm turns the rotation part into a cross product matrix corresponding to the axis-angle representation of the rotation.
To compute
:
let
![{\displaystyle S={\begin{bmatrix}[\omega ]_{\times }&v\\0&0\end{bmatrix}}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9Bags4nqzFzNFCatm3yqe3yqdFnqo5ajJEatK4ntw2zga4zteOoNCQ)
if
, there is no rotation and the result is
. Otherwise, the result is:
.
In practice the full equation breaks down numerically near
and so terms should be replaced by a polynomial expansion.
Alternately, we can replace the S expressions with more-basic identities :
From Rodrigues' rotation formula we have:
where
.
And then compute t:
![{\displaystyle t={\frac {(I-R)\omega \times v+v\cdot \omega \omega }{\theta ^{2}}}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8PzDo4atG2ngwPngo1njCPa2aPzjG0ajdFzDe4zjrEzDa1oNs4zNaN)
which simplifies to
.
Note that
![{\displaystyle I-R=I-I-\sin \theta [\mathbf {k} ]_{\times }-(1-\cos \theta )(\mathbf {k} \mathbf {k} ^{\top }-I)}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO82aDnCoNaQnDKPzte2ngvBnArBatGOo2hCatGPnqa4otoQajBBoDlC)
![{\displaystyle I-R=-\sin \theta [\mathbf {k} ]_{\times }-(1-\cos \theta )(\mathbf {k} \mathbf {k} ^{\top }-I)}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO81o2oQata3zjzCo2eOzAi5zgrFnge3oAaQzjeNajm0zjs0otK1zNi0)
and so
![{\displaystyle (I-R)[\omega ]_{\times }={\frac {-\sin \theta }{\theta }}[\omega ]_{\times }^{2}+(1-\cos \theta )(\mathbf {k} \mathbf {k} ^{\top }[\omega ]_{\times }-[\omega ]_{\times })}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO81aqdAa2eOyjBByjCPajlCntvEzjm2nje2ngw4ajdFzjC0ngrAoNw2)
![{\displaystyle (I-R)[\omega ]_{\times }={\frac {-\sin \theta }{\theta }}[\omega ]_{\times }^{2}+(1-\cos \theta )[\omega ]_{\times }}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9BzNKNytG1nAe1ngo2ythCytvDnjaPzDlCnjvFygoPyta2zAaPzgiN)
To compute
:
First,
![{\displaystyle \omega :=\log(R)}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8NzjBAyjoPaNGPntdFatrBzjo2a2ePaAaQaNG0aNvBoAoOzti3ytCN)
according to the Rodrigues' rotation formula. Note that there are numerical issues around zero and around
.
If
(no rotation) then
and we are done. Otherwise, it's complicated:
We first find the screw representation of the transformation. We have the
part, so we need to find a point, u, on the screw axis. The action of the transformation, of course, will move points in a screw motion about that axis...
We'll transform a point, p, and take the perpendicular bisector to the segment between
and
where
is p transformed projected back onto the plane through x that intersects p.
Let:
- p be any point
![{\displaystyle p':=Rp+t}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8Pnte4yjC4oNiPato4nthCnDnFyjdBoAw0oqhFotGNntmOzNwPzDBE)
![{\displaystyle p'':=p'-((p'-p)\cdot {\hat {x}}){\hat {x}}=p'{\hat {x}}{\hat {x}}^{\top }(p'-p)=(I-{\hat {x}}{\hat {x}}^{\top })p'+{\hat {x}}{\hat {x}}^{\top }p}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9Aati0nDnAzjeOnAs5zAdEnjw0njC5aAe0a2w4ntJAaAa0agdCo2nD)
Let
, the distance from p to the middle of the line to ![{\displaystyle p''}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO83zjePaNzBnjrBzjiNzAw2nqi4zjK0nti0oNG3otaQoAeNoqo3oAa4)
, the height of the trangle formed by the center of rotation, p, and
.
![{\displaystyle {\vec {a}}:={\hat {x}}\times (p''-p)}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9BytKOaAnAotmPaqsPzNlEoqzBotG0njnDzjmOzDm5yqa1njwPzNw1)
where
is on the screw axis, not necessarily perpendicular to
.
So in general,
![{\displaystyle u={\bar {u}}+\alpha {\hat {x}}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8PoDa1aDJEzjGPoNe3oAi4oAiQnAa1oAo1yga1oDaPnqoOzNzDzDJA)
and
![{\displaystyle ({\bar {u}}+\alpha {\hat {x}})\cdot {\hat {x}}=0\Rightarrow \alpha {\hat {x}}\cdot {\hat {x}}=-{\bar {u}}\cdot {\hat {x}}=\Rightarrow \alpha =-{\frac {{\bar {u}}\cdot {\hat {x}}}{{\hat {x}}\cdot {\hat {x}}}}=-{\hat {u}}\cdot {\hat {x}}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO84njm5zDdDztzCaNJEnjm2atKOaDsQztoNathFnqe0njFDnjvAytwP)
so if we enforce that u is perpendicular to
, we have
.
Since p is arbitrary, we can let it be the zero vector. Then we have
.
Now, the v component of the 6-vector we are looking for is not u, it is:
(why?)
We can substitute to expand this out:
![{\displaystyle \omega \times u=\theta [{\hat {x}}]_{\times }u}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8NajKOzNe2zArCnta2atFEaqa1o2sOnjC0oqwOoDJCyjvBygi1njJB)
since
is the vector in the direction of the unit vector
with magnitude
. So we can plug in the u from above. Also, note that:
![{\displaystyle {\hat {x}}{\hat {x}}^{\top }=I+[{\hat {x}}]^{2}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9Anga2oNoPytoPaNe0oNrEothDotvAzgi0a2sNoqa4ztwOoNlAzNdD)
and:
![{\displaystyle [{\hat {x}}]_{\times }{\hat {x}}{\hat {x}}^{\top }=0}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9FoNmOoAe3njrCyqnBzNBByjFFngs2zNw5yqoQntBDotsQzDm1atCP)
so we have
![{\displaystyle \omega \times u=\theta [{\hat {x}}]_{\times }u}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8NajKOzNe2zArCnta2atFEaqa1o2sOnjC0oqwOoDJCyjvBygi1njJB)
![{\displaystyle \omega \times u=\theta [{\hat {x}}]_{\times }\left(I-{\hat {x}}{\hat {x}}^{\top }+{\frac {[{\hat {x}}]_{\times }}{\tan {\frac {\theta }{2}}}}\right){\frac {t}{2}}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO83aNoPoAi3otK2ngs5ajlBztnAytdDotC0nAi4ajC2aje0zgzEaAaN)
![{\displaystyle \omega \times u=\theta \left([{\hat {x}}]_{\times }+{\frac {[{\hat {x}}]_{\times }^{2}}{\tan {\frac {\theta }{2}}}}\right){\frac {t}{2}}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8QyjnEzNdBoNC5otJEztG4otvCnAdFotG3oDK4ytw3oqw5oNnDzje4)
So including the full expression for v, we get:
![{\displaystyle v=\left(-{\frac {\theta }{2}}\left([{\hat {x}}]_{\times }+{\frac {[{\hat {x}}]_{\times }^{2}}{\tan {\frac {\theta }{2}}}}\right)t+{\hat {x}}{\hat {x}}^{\top }t\right)}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8NyqeQageQzAnBzDhAaDGNaqo3yqs4otoOoAw1ata4aNCNz2sNotw1)
![{\displaystyle v=\left(-{\frac {\theta }{2}}\left([{\hat {x}}]_{\times }+{\frac {[{\hat {x}}]_{\times }^{2}}{\tan {\frac {\theta }{2}}}}\right)+{\hat {x}}{\hat {x}}^{\top }\right)t}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8Nati1oNrDntoNaAw1aDiPaAi3nqeOoqi5zteQzDnAzjs4atrAytdB)
![{\displaystyle v=\left(-{\frac {\theta }{2}}[{\hat {x}}]_{\times }+{\frac {-\theta }{2\tan {\frac {\theta }{2}}}}+{\hat {x}}{\hat {x}}^{\top }\right)t}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO82aDhCnjFCnqe0oAiQzghBz2hEnjoPotwNztw3a2rCzNi3ztw1athA)
![{\displaystyle v=\left(I+{\frac {-\theta }{2}}[{\hat {x}}]_{\times }+\left(1-{\frac {\theta }{2\tan {\frac {\theta }{2}}}}\right)[{\hat {x}}]_{\times }^{2}\right)t}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9Eyqs0aDi0aAwPaNrDzDzFaqnCotoNytaQzqs1yjiQa2o0zNK4zNGO)
.
Finally, if you want to rearrange that into a form shown in other papers, you can apply the half angle formula for tangent:
![{\displaystyle \tan {\frac {\theta }{2}}={\frac {\sin \theta }{1+\cos \theta }}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO9ByqwOaDo4zNFFz2dCzjrDntrCztrBntnAzgiPzge1aqi1nDsOzjJA)
so
![{\displaystyle ={\frac {1}{\theta ^{2}}}{\frac {2\sin \theta -\theta (1+\cos \theta )}{2\sin \theta }}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8Oa2dCntaNaNs2yqi1o2i1yjw1zDw5otaQoNa2ago2nqi2nAo3nAeN)
![{\displaystyle ={\frac {2\sin \theta -\theta (1+\cos \theta )}{2\theta ^{2}\sin \theta }}}](https://amansaja.com/index.php?q=Mfv0Kfa6bO93MqTXLqrCMqiSL3dZb2hQMu9Onpz0p3oPb21BngBFb21FJgGRKArSngrOb3z2nO8PaNm0ntaQo2o3aNGPntw0zteQyga4zNiPngoQaqnAzNnDoDa0otw2)
which is found in various references such as http://www.kramirez.net/Robotica/Material/Libros/A%20mathematical%20Introduction%20to%20Robotic%20manipulation.pdf p. 414.
Note: In practice the full equation breaks down numerically near
and so terms should be replaced by a polynomial expansion.
See also[edit]
External links[edit]