《Modern Robotics》阅读笔记4——刚体的运动(四)
1. 旋转的指数坐标表达法
上图中,我们假设,把
p
(
0
)
p(0)
p(0)向量,沿着
ω
^
\hat{\omega}
ω^轴旋转
θ
\theta
θ,到达
p
(
θ
)
p(\theta)
p(θ)位置。(这里假设所有的量都是表达在固定坐标系下的)。我们假设旋转角速度是
1
1
1rad/s,那么这个过程花费的时间就是从
t
=
0
t=0
t=0到
t
=
θ
t=\theta
t=θ。假设
p
(
t
)
p(t)
p(t)代表了向量的轨迹,那么我们得到
p
(
t
)
p(t)
p(t)的导数的表达:
p
˙
=
ω
^
×
p
\dot{p}=\hat{\omega}\times p
p˙=ω^×p
通过简单的证明可知上式的正确性:由于我们假设了旋转角速度为
1
1
1rad/s,那么线速度就是角速度乘半径,为
∣
∣
p
∣
∣
sin
ϕ
||p||\sin\phi
∣∣p∣∣sinϕ;而上式结果也为
∣
∣
p
∣
∣
sin
ϕ
||p||\sin\phi
∣∣p∣∣sinϕ。
根据前文的介绍,上式可以写作:
p
˙
=
[
ω
^
]
p
\dot{p}=[\hat{\omega}] p
p˙=[ω^]p
这是一个矩阵的线性微分方程,它的解为:
p
(
t
)
=
e
[
ω
^
]
t
p
(
0
)
p(t)=e^{[\hat{\omega}] t} p(0)
p(t)=e[ω^]tp(0)
因为旋转角速度为
1
1
1rad/s,所以
t
t
t和
θ
\theta
θ是等价的:
p
(
θ
)
=
e
[
ω
^
]
θ
p
(
0
)
p(\theta)=e^{[\hat{\omega}]{\theta}} p(0)
p(θ)=e[ω^]θp(0)
可以看出,
e
[
ω
^
]
θ
e^{[\hat{\omega}]{\theta}}
e[ω^]θ在这里充当了旋转矩阵的角色。
又根据矩阵指数的性质:
e
[
ω
^
]
θ
=
I
+
sin
θ
[
ω
^
]
+
(
1
−
cos
θ
)
[
ω
^
]
2
e^{[\hat{\omega}] \theta}=I+\sin \theta[\hat{\omega}]+(1-\cos \theta)[\hat{\omega}]^{2}
e[ω^]θ=I+sinθ[ω^]+(1−cosθ)[ω^]2
所以有:
Rot
(
ω
^
,
θ
)
=
e
[
ω
^
]
θ
=
I
+
sin
θ
[
ω
^
]
+
(
1
−
cos
θ
)
[
ω
^
]
2
∈
S
O
(
3
)
\operatorname{Rot}(\hat{\omega}, \theta)=e^{[\hat{\omega}] \theta}=I+\sin \theta[\hat{\omega}]+(1-\cos \theta)[\hat{\omega}]^{2} \in S O(3)
Rot(ω^,θ)=e[ω^]θ=I+sinθ[ω^]+(1−cosθ)[ω^]2∈SO(3)
这也就是著名的罗德里得斯公式。也就是旋转的指数表达方法。
需要注意的是,这里也需要考虑 ω ^ \hat{\omega} ω^是表示在哪个坐标系下。如果 ω ^ \hat{\omega} ω^是表示在固定坐标系下的,那么是左乘 Rot ( ω ^ , θ ) ⋅ R \operatorname{Rot}(\hat{\omega}, \theta) \cdot R Rot(ω^,θ)⋅R;如果 ω ^ \hat{\omega} ω^是表示在体坐标系下的,那么是右乘 R ⋅ Rot ( ω ^ , θ ) R \cdot \operatorname{Rot}(\hat{\omega}, \theta) R⋅Rot(ω^,θ)。
2. 指数坐标与旋转矩阵的相互转化
上文介绍了矩阵指数运算:
exp
:
[
ω
^
]
θ
∈
s
o
(
3
)
→
R
∈
S
O
(
3
)
\exp : \quad[\hat{\omega}] \theta \in so(3) \rightarrow R \in SO(3)
exp:[ω^]θ∈so(3)→R∈SO(3)
这里新引入矩阵对数运算:
log
:
R
∈
S
O
(
3
)
→
[
ω
^
]
θ
∈
s
o
(
3
)
\log : \quad R \in SO(3) \rightarrow[\hat{\omega}] \theta \in so(3)
log:R∈SO(3)→[ω^]θ∈so(3)
指数坐标通过矩阵的指数运算就可以转换成旋转矩阵了,也就是上文的罗德里得斯公式。但如何从旋转矩阵回到指数坐标呢?
不好意思,这个问题先空着。。。以后在更。。。
3. 刚体运动的表示
刚体运动的表示包括了刚体的旋转与刚体的平移。这是在旋转的基础上,进一步的扩展。
3.1 变换矩阵——特殊欧式群
很自然的选择就是,用刚体的旋转矩阵和平移矢量来表达刚体运动。我们常常会用到的一种形式就是:齐次变换矩阵(Transformation matrix)。他和特殊欧式群的关系密不可分,其定义如下:
特殊欧式群(Special Euclidean Group)
S
E
(
3
)
SE(3)
SE(3),就是以下
4
×
4
4\times4
4×4实数矩阵
T
T
T的集合。
T
=
[
R
p
0
1
]
=
[
r
11
r
12
r
13
p
1
r
21
r
22
r
23
p
2
r
31
r
32
r
33
p
3
0
0
0
1
]
T=\left[ \begin{array}{cc}{R} & {p} \\ {0} & {1}\end{array}\right]=\left[\begin{array}{cccc}{r_{11}} & {r_{12}} & {r_{13}} & {p_{1}} \\ {r_{21}} & {r_{22}} & {r_{23}} & {p_{2}} \\ {r_{31}} & {r_{32}} & {r_{33}} & {p_{3}} \\ {0} & {0} & {0} & {1}\end{array}\right]
T=[R0p1]=⎣⎢⎢⎡r11r21r310r12r22r320r13r23r330p1p2p31⎦⎥⎥⎤
其中
R
∈
S
O
(
2
)
,
p
∈
R
2
R \in S O(2), p \in \mathbb{R}^{2}
R∈SO(2),p∈R2。
变换矩阵的性质:
- T − 1 = [ R p 0 1 ] − 1 = [ R T − R T p 0 1 ] T^{-1}=\left[ \begin{array}{cc}{R} & {p} \\ {0} & {1}\end{array}\right]^{-1}=\left[ \begin{array}{cc}{R^{T}} & {-R^{T} p} \\ {0} & {1}\end{array}\right] T−1=[R0p1]−1=[RT0−RTp1]
- 两个变换矩阵相乘还是变换矩阵
- ( T 1 T 2 ) T 3 = T 1 ( T 2 T 3 ) \left(T_{1} T_{2}\right) T_{3}=T_{1}\left(T_{2} T_{3}\right) (T1T2)T3=T1(T2T3)
- T 1 T 2 ≠ T 2 T 1 T_{1} T_{2} \neq T_{2} T_{1} T1T2̸=T2T1
- ∥ T x − T y ∥ = ∥ x − y ∥ \|T x-T y\|=\|x-y\| ∥Tx−Ty∥=∥x−y∥, ⟨ T x − T z , T y − T z ⟩ = ⟨ x − z , y − z ⟩ \langle T x-T z, T y-T z\rangle=\langle x-z, y-z\rangle ⟨Tx−Tz,Ty−Tz⟩=⟨x−z,y−z⟩,即保距保角(刚体变换)
变换矩阵的用法:
和旋转矩阵的三种用法类似,变换矩阵也有三种用法。
- 代表刚体的位姿(一种位姿表示方法)
- 改变一个向量或坐标系的参考坐标系(一个改变向量表达的参考坐标系的算子)
- 变换一个向量或坐标系的实际位置(一个转动和平移向量的操作)
3.2 Twists
简单的说,Twist是一个综合了刚体线速度和角速度(或称为spatial velocity)的六维向量。
在前文中,我们已经关于角速度和旋转矩阵的关系进行了分析。这部分中,我们要进一步考量Twist向量(spatial velocity)和变换矩阵的关系。
根据上文的介绍,我们定义{b}系(body系)在{s}系(space系或fixed系)下的表示为:
T
s
b
(
t
)
=
T
(
t
)
=
[
R
(
t
)
p
(
t
)
0
1
]
T_{s b}(t)=T(t)=\left[ \begin{array}{cc}{R(t)} & {p(t)} \\ {0} & {1}\end{array}\right]
Tsb(t)=T(t)=[R(t)0p(t)1]
其中,
R
R
R代表
R
s
b
R_{sb}
Rsb,
p
p
p代表
p
s
b
p_{sb}
psb。
参考前文中有
R
−
1
R
˙
R^{-1} \dot{R}
R−1R˙,我们可以对
T
−
1
T
˙
T^{-1} \dot{T}
T−1T˙进行分析:
T
−
1
T
˙
=
[
R
T
−
R
T
p
0
1
]
[
R
˙
p
˙
0
0
]
=
[
R
T
R
˙
R
T
p
˙
0
0
]
=
[
[
ω
b
]
v
b
0
0
]
\begin{aligned} T^{-1} \dot{T} &=\left[ \begin{array}{cc}{R^{T}} & {-R^{T} p} \\ {0} & {1}\end{array}\right] \left[ \begin{array}{cc}{\dot{R}} & {\dot{p}} \\ {0} & {0}\end{array}\right] \\ &=\left[ \begin{array}{ccc}{R^{T} \dot{R}} & {R^{T} \dot{p}} \\ {0} & {0}\end{array}\right] \\ &=\left[ \begin{array}{cc}{\left[\omega_{b}\right]} & {v_{b}} \\ {0} & {0}\end{array}\right] \end{aligned}
T−1T˙=[RT0−RTp1][R˙0p˙0]=[RTR˙0RTp˙0]=[[ωb]0vb0]
我们定义体坐标系下的Twist为:
V
b
=
[
ω
b
v
b
]
∈
R
6
\mathcal{V}_{b}=\left[ \begin{array}{c}{\omega_{b}} \\ {v_{b}}\end{array}\right] \in \mathbb{R}^{6}
Vb=[ωbvb]∈R6
因此,仿照
[
ω
]
[\omega]
[ω]的定义,我们运用twist进一步定义了如下记号:
T
−
1
T
˙
=
[
V
b
]
=
[
[
ω
b
]
v
b
0
0
]
∈
s
e
(
3
)
T^{-1} \dot{T}=\left[\mathcal{V}_{b}\right]=\left[ \begin{array}{cc}{\left[\omega_{b}\right]} & {v_{b}} \\ {0} & {0}\end{array}\right] \in {se}(3)
T−1T˙=[Vb]=[[ωb]0vb0]∈se(3)
与之类似,我们可以反过来分析
T
˙
T
−
1
\dot{T} T^{-1}
T˙T−1:
T
˙
T
−
1
=
[
R
˙
p
˙
0
0
]
[
R
T
−
R
T
p
0
1
]
=
[
R
˙
R
T
p
˙
−
R
˙
R
T
p
0
0
]
=
[
[
ω
s
]
v
s
0
0
]
\begin{aligned} \dot{T} T^{-1} &=\left[ \begin{array}{cc}{\dot{R}} & {\dot{p}} \\ {0} & {0}\end{array}\right] \left[ \begin{array}{cc}{R^{T}} & {-R^{T} p} \\ {0} & {1}\end{array}\right] \\ &=\left[ \begin{array}{cc}{\dot{R} R^{T}} & {\dot{p}-\dot{R} R^{T} p} \\ {0} & {0}\end{array}\right] \\ &=\left[ \begin{array}{cc}{\left[\omega_{s}\right]} & {v_{s}} \\ {0} & {0}\end{array}\right] \end{aligned}
T˙T−1=[R˙0p˙0][RT0−RTp1]=[R˙RT0p˙−R˙RTp0]=[[ωs]0vs0]
这里需要注意,为什么
v
s
=
p
˙
−
R
˙
R
T
p
v_s=\dot{p}-\dot{R} R^{T} p
vs=p˙−R˙RTp成立呢?
先看下面这幅图:
v
s
v_s
vs这个速度表达的含义可以通过这幅图说明。可以想象有一个边界无限大的运动刚体(即图中椭圆),它与{b}系固连。而
v
s
v_s
vs代表的就是,在某一个瞬时时刻,这个刚体上恰好与{s}系原点对应的那一点的瞬时速度在{s}系下的表示。所以
v
s
v_s
vs应包含两部分,一部分就是{b}系原点与{s}系原点的相对速度,以及{s}系原点相对于{b}系旋转引起的速度。
v
s
=
p
˙
+
v
r
o
t
=
p
˙
+
R
T
⋅
(
ω
b
×
p
b
)
=
p
˙
+
R
T
⋅
[
ω
b
×
(
−
R
p
)
]
=
p
˙
+
R
T
ω
b
×
(
−
R
T
R
p
)
=
p
˙
−
ω
s
×
p
=
p
˙
−
R
˙
R
T
p
\begin{aligned} v_s &= \dot{p}+v_{rot} \\ &= \dot{p}+R^T \cdot (\omega_b\times p_b) \\ &= \dot{p}+R^T \cdot [\omega_b\times (-Rp)]\\ &= \dot{p}+R^T \omega_b \times (-R^TRp) \\ &= \dot{p} - \omega_s \times p \\ &= \dot{p} - \dot{R} R^{T} p \\ \end{aligned}
vs=p˙+vrot=p˙+RT⋅(ωb×pb)=p˙+RT⋅[ωb×(−Rp)]=p˙+RTωb×(−RTRp)=p˙−ωs×p=p˙−R˙RTp
我们定义固定坐标系下的Twist为(spatial twist):
V
s
=
[
ω
s
v
s
]
∈
R
6
,
[
V
s
]
=
[
[
ω
s
]
v
s
0
0
]
=
T
˙
T
−
1
∈
s
e
(
3
)
\mathcal{V}_{s}=\left[ \begin{array}{c}{\omega_{s}} \\ {v_{s}}\end{array}\right] \in \mathbb{R}^{6},\left[\mathcal{V}_{s}\right]=\left[ \begin{array}{cc}{\left[\omega_{s}\right]} & {v_{s}} \\ {0} & {0}\end{array}\right]=\dot{T} T^{-1} \in {se}(3)
Vs=[ωsvs]∈R6,[Vs]=[[ωs]0vs0]=T˙T−1∈se(3)
根据以上定义,进一步的,我们可以分析body twist
V
b
\mathcal{V}_{b}
Vb和spatial twist
V
s
\mathcal{V}_{s}
Vs的关系:
[
V
b
]
=
T
−
1
T
˙
=
T
−
1
[
V
s
]
T
\begin{aligned}\left[\mathcal{V}_{b}\right] &=T^{-1} \dot{T} \\ &=T^{-1}\left[\mathcal{V}_{s}\right] T \end{aligned}
[Vb]=T−1T˙=T−1[Vs]T
[
V
s
]
=
T
[
V
b
]
T
−
1
\left[\mathcal{V}_{s}\right]=T\left[\mathcal{V}_{b}\right] T^{-1}
[Vs]=T[Vb]T−1
V
s
=
[
R
[
ω
b
]
R
T
−
R
[
ω
b
]
R
T
p
+
R
v
b
0
0
]
\mathcal{V}_{s}=\left[ \begin{array}{cc}{R\left[\omega_{b}\right] R^{T}} & {-R\left[\omega_{b}\right] R^{T} p+R v_{b}} \\ {0} & {0}\end{array}\right]
Vs=[R[ωb]RT0−R[ωb]RTp+Rvb0]
最终,我们可以得到二者的关系为:
[
ω
s
v
s
]
=
[
R
0
[
p
]
R
R
]
[
ω
b
v
b
]
\left[ \begin{array}{c}{\omega_{s}} \\ {v_{s}}\end{array}\right]=\left[ \begin{array}{cc}{R} & {0} \\ {[p] R} & {R}\end{array}\right] \left[ \begin{array}{c}{\omega_{b}} \\ {v_{b}}\end{array}\right]
[ωsvs]=[R[p]R0R][ωbvb]
为了表示方便起见,这里又要引入一个新的定义:adjoint representation
[
A
d
T
]
\left[\mathrm{Ad}_{T}\right]
[AdT]
[
A
d
T
]
=
[
R
0
[
p
∣
R
R
]
∈
R
6
×
6
\left[\mathrm{Ad}_{T}\right]=\left[ \begin{array}{cc}{R} & {0} \\ {[p | R} & {R}\end{array}\right] \in \mathbb{R}^{6 \times 6}
[AdT]=[R[p∣R0R]∈R6×6
[
A
d
T
]
\left[\mathrm{Ad}_{T}\right]
[AdT]的性质如下:
- Ad T 1 ( Ad T 2 ( V ) ) = Ad T 1 T 2 ( V ) \operatorname{Ad}_{T_{1}}\left(\operatorname{Ad}_{T_{2}}(\mathcal{V})\right)=\operatorname{Ad}_{T_{1} T_{2}}(\mathcal{V}) AdT1(AdT2(V))=AdT1T2(V)
- [ A d T 1 ] [ A d T 2 ] V = [ A d T 1 T 2 ] V \left[\mathrm{Ad}_{T_{1}}\right]\left[\mathrm{Ad}_{T_{2}}\right] \mathcal{V}=\left[\mathrm{Ad}_{T_{1} T_{2}}\right] \mathcal{V} [AdT1][AdT2]V=[AdT1T2]V
- [ A d T ] − 1 = [ A d T − 1 ] \left[\mathrm{Ad}_{T}\right]^{-1}=\left[\mathrm{Ad}_{T^{-1}}\right] [AdT]−1=[AdT−1]
- Ad T − 1 ( Ad T ( V ) ) = Ad T − 1 T ( V ) = Ad I ( V ) ) = V \operatorname{Ad}_{T-1}\left(\operatorname{Ad}_{T}(\mathcal{V})\right)=\operatorname{Ad}_{T-1} T(\mathcal{V})=\operatorname{Ad}_{I}(\mathcal{V}))=\mathcal{V} AdT−1(AdT(V))=AdT−1T(V)=AdI(V))=V
所以,最终,
V
b
\mathcal{V}_{b}
Vb和spatial twist
V
s
\mathcal{V}_{s}
Vs的关系为:
V
s
=
[
ω
s
v
s
]
=
[
R
0
[
p
]
R
R
]
[
ω
b
v
b
]
=
[
A
d
T
s
b
]
V
b
\mathcal{V}_{s}=\left[ \begin{array}{c}{\omega_{s}} \\ {v_{s}}\end{array}\right]=\left[ \begin{array}{cc}{R} & {0} \\ {[p] R} & {R}\end{array}\right] \left[ \begin{array}{c}{\omega_{b}} \\ {v_{b}}\end{array}\right]=\left[\mathrm{Ad}_{T_{s b}}\right] \mathcal{V}_{b}
Vs=[ωsvs]=[R[p]R0R][ωbvb]=[AdTsb]Vb
V
b
=
[
ω
b
v
b
]
=
[
R
T
0
−
R
T
[
p
]
R
T
]
[
ω
s
v
s
]
=
[
A
d
T
b
s
]
V
s
\mathcal{V}_{b}=\left[ \begin{array}{c}{\omega_{b}} \\ {v_{b}}\end{array}\right]=\left[ \begin{array}{cc}{R^{T}} & {0} \\ {-R^{T}[p]} & {R^{T}}\end{array}\right] \left[ \begin{array}{c}{\omega_{s}} \\ {v_{s}}\end{array}\right]=\left[\mathrm{Ad}_{T_{\mathrm{bs}}}\right] \mathcal{V}_{s}
Vb=[ωbvb]=[RT−RT[p]0RT][ωsvs]=[AdTbs]Vs