刚体变换
定义
一个映射g:
R
3
→
R
3
\R^3 \to \R^3
R3→R3如果满足一下两个特性,则是刚体变换
1. 长度保持不变:
∥
g
(
p
)
−
g
(
q
)
=
∥
p
−
q
∥
\Vert g(p)-g(q)=\Vert p-q\Vert
∥g(p)−g(q)=∥p−q∥, 所有
p
,
q
∈
R
3
p,q\in\R^3
p,q∈R3
2. 叉乘保持不变:
g
∗
(
v
×
w
)
=
g
∗
(
v
)
×
g
∗
(
w
)
g_*(v×w)=g_*(v)×g_*(w)
g∗(v×w)=g∗(v)×g∗(w),所有向量
v
,
w
∈
R
3
v,w\in\R^3
v,w∈R3
旋转矩阵
A坐标系
X A = [ 1 0 ] T X_A=[1\ 0]^T XA=[1 0]T
Y A = [ 0 1 ] T Y_A =[0\ 1]^T YA=[0 1]T
在A坐标系下的B坐标系
X B = c o s θ ∥ X A ∥ X A + s i n θ ∥ X A ∥ Y A = [ c o s θ 0 0 ] T + [ 0 s i n θ 0 ] T = [ c o s θ s i n θ 0 ] T X_B=cos\theta \|X_A\|X_A+sin\theta\|X_A\| Y_A=[cos\theta \ 0 \ 0]^T+[0\ sin\theta\ 0]^T=[cos\theta \ sin\theta \ 0]^T XB=cosθ∥XA∥XA+sinθ∥XA∥YA=[cosθ 0 0]T+[0 sinθ 0]T=[cosθ sinθ 0]T
Y B = − s i n θ ∥ Y A ∥ X A + c o s θ ∥ Y A ∥ Y A = [ − s i n θ 0 0 ] T + [ 0 c o s θ 0 ] T = [ − s i n θ c o s θ 0 ] T Y_B=-sin\theta \|Y_A\|X_A+cos\theta \|Y_A\|Y_A=[-sin\theta \ 0 \ 0]^T+[0\ cos\theta\ 0]^T=[-sin\theta \ cos\theta \ 0]^T YB=−sinθ∥YA∥XA+cosθ∥YA∥YA=[−sinθ 0 0]T+[0 cosθ 0]T=[−sinθ cosθ 0]T
构造矩阵
将 X B Y B X_B\ Y_B XB YB放到一个矩阵里 R a b = [ X B Y B ] R_{ab}=[X_B \ Y_B] Rab=[XB YB],将之称为旋转矩阵
意义
将一个点的坐标值在不同的基底下进行变换
P点在B坐标系下为 P B ( a , b ) P_B(a,b) PB(a,b),可以进行一下变换
P = [ X B Y B ] [ a b ] = a X B + b Y B = ( c o s θ X A + s i n θ Y A ) a + ( − s i n θ X A + c o s θ Y A ) b = [ X A Y A ] [ c o s θ − s i n θ s i n θ c o s θ ] [ a b ] = [ X A Y A ] R a b [ a b ] P=[X_B\ Y_B]\begin{bmatrix} a \\b\\ \end{bmatrix}\\ \ \ \ \ =aX_B+bY_B \\ \ \ \ \ =(cos\theta X_A+sin\theta Y_A)a+(-sin\theta X_A+cos\theta Y_A)b\\ \ \ \ \ =[X_A\ Y_A]\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \\ \end{bmatrix}\begin{bmatrix} a \\b \\ \end{bmatrix}\\ \ \ \ \ =[X_A\ Y_A]R_{ab}\begin{bmatrix} a \\b \\ \end{bmatrix} P=[XB YB][ab] =aXB+bYB =(cosθXA+sinθYA)a+(−sinθXA+cosθYA)b =[XA YA][cosθsinθ−sinθcosθ][ab] =[XA YA]Rab[ab]
可以看到,我们把基底从 [ X B Y B ] [X_B\ Y_B] [XB YB]换成了 [ X A Y A ] [X_A\ Y_A] [XA YA],也就是同一个点,在B坐标系下的坐标为 [ a b ] T [a \ b]^T [a b]T,在A坐标系下的坐标为 R [ a b ] T R[a \ b]^T R[a b]T,可以理解为是空间中同一个点在不同的坐标系中(坐标系旋转了)的表示,也可以理解为同一个坐标系下,是点在运动(假设坐标系没动,那么动的就是点)。
平移变换
刚体变换除了旋转外还有平移运动,假设变换后的坐标系B的原点在原来坐标系A下为 P A B = [ x 1 y 1 ] T P_{AB}=[x_1 \ y_1]^T PAB=[x1 y1]T则
P A = R A B P B + P A B P_A=R_{AB}P_B+P_{AB} PA=RABPB+PAB
结合以上的推导,我们可以将刚体变换写成齐次坐标的形式
P A = [ R A B P A B 0 1 ] [ P B 1 ] P_A=\begin{bmatrix} R_{AB} & P_{AB}\\ 0 & 1\end{bmatrix}\begin{bmatrix} P_{B} \\ 1\end{bmatrix} PA=[RAB0PAB1][PB1]
以上的推导同样可以拓展到三维空间里
绕Z轴旋转的旋转矩阵
R Z ( θ ) = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] R_Z(\theta)=\begin{bmatrix} cos\theta & -sin\theta &0\\ sin\theta & cos\theta & 0 \\0&0&1\end{bmatrix} RZ(θ)=⎣⎡cosθsinθ0−sinθcosθ0001⎦⎤
绕Y轴旋转的旋转矩阵
R Y ( θ ) = [ c o s θ 0 s i n θ 0 1 0 − s i n θ 0 c o s θ ] R_Y(\theta)=\begin{bmatrix} cos\theta &0& sin\theta \\ 0&1&0\\ -sin\theta &0& cos\theta \end{bmatrix} RY(θ)=⎣⎡cosθ0−sinθ010sinθ0cosθ⎦⎤
绕X轴旋转的旋转矩阵
R X ( θ ) = [ 1 0 0 0 c o s θ − s i n θ 0 s i n θ c o s θ ] R_X(\theta)=\begin{bmatrix} 1&0&0\\0&cos\theta&-sin\theta \\0&sin\theta&cos\theta\end{bmatrix} RX(θ)=⎣⎡1000cosθsinθ0−sinθcosθ⎦⎤