# 三维空间刚体运动

# 旋转矩阵

# 点和向量,坐标系

a=[e1,e2,e3][a1a2a3]=a1e1+a2e2+a3e3\bold{a} = \begin{bmatrix}e_1 , e_2 , e_3\end{bmatrix}\begin{bmatrix}a_1\\a_2\\a_3\end{bmatrix} = a_1e_1 + a_2e_2 + a_3e_3

(e1,e2,e3)(e_1,e_2,e_3)为线性空间的基

# 左手系和右手系

左手系和右手系

对于a,bR3\bold{a,b}\in \Bbb{R}^3内积可以写成ab=aTb=i=13aibi=abcos<a,b>\bold{a\cdot b} = a^Tb=\displaystyle\sum_{i=1}^3 a_ib_i =\bold{|a||b|cos<a,b>}

外积可以写成

a×b=ijka1a2a3b1b2b3=(a2b3a3b2)i+(a3b1a1b3)j+(a1b2a2b1)k \bold{a \times b} = \begin{vmatrix} i & j & k \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ \end{vmatrix} = {(a_2b_3-a_3b_2)i + (a_3b_1-a_1b_3)j + (a_1b_2 - a_2b_1)k}

结果用向量表示就是[a2b3a3b2a3b1a1b3a1b2a2b1]\begin{bmatrix}a_2b_3-a_3b_2\\a_3b_1-a_1b_3\\a_1b_2 - a_2b_1\end{bmatrix}

所以

a×b=[0a3a2a30a1a2a10]bab \bold{a\times b} = \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} \bold{b} \triangleq \bold{a^\wedge b}

引入符号\triangleq,把a\bold{a} 写成一个反对称矩阵(Skew-symmetric),这样可以把外积a×b\bold{a\times b}写成矩阵与向量的乘法aba^\wedge b,把它变成线性运算。
外积只对三维向量存在定义,还能用外积表示向量的旋转

# 坐标系间的欧式变换

两个坐标系之间的旋转关系,再加上平移,统称为坐标系之间的变换关系,在机器人的运动过程中,常见的做法是设定一个惯性坐标系(世界坐标系),可以认为它是固定不动的,如下图中的xw,yw,zwx_w,y_w,z_w定义的坐标系。同时,相机或者机器人则是一个移动的坐标系,例如xc,yc,zcx_c,y_c,z_c定义的坐标系

坐标系

相机视野中某个向量p\bold{p},坐标为pc\bold{p}_c,而从世界坐标系下看,他的坐标是pw\bold{p}_w。这两个坐标的转换需要先得到该点针对机器人坐标系的坐标值,再根据机器人的位姿转换到世界坐标系中,这个转换关系由一个矩阵T\bold{T}来描述

相机运动是一个刚体运动,它保证了同一个向量在各个坐标系下的长度和夹角都不会发生变化。这种变换称为欧式变换

假设某个单位正交基(e1,e2,e3)(\bold{e}_1,\bold{e}_2,\bold{e}_3)经过一次旋转变成了(e1,e2,e3)(\bold{e}_1^{\prime},\bold{e}_2^{\prime},\bold{e}_3^{\prime})。那么对于同一个向量a\bold{a}(注意这个向量并没有随着坐标系的旋转而发生运动),它在两个坐标系下的坐标为[a1,a2,a3]T[a_1,a_2,a_3]^T[a1,a2,a3]T[a_1^{\prime},a_2^{\prime},a_3^{\prime}]^T
根据坐标的定义,有:

[e1,e2,e3][a1a2a3]=[e1,e2,e3][a1a2a3][a1a2a3]=[e1Te1e1Te1e1Te1e1Te1e1Te1e1Te1e1Te1e1Te1e1Te1][a1a2a3]Ra \begin{align} [\bold{e}_1,\bold{e}_2,\bold{e}_3] \begin{bmatrix} a_1\\ a_2\\ a_3 \end{bmatrix} &= [\bold{e}_1^{\prime},\bold{e}_2^{\prime},\bold{e}_3^{\prime}] \begin{bmatrix} a_1^{\prime} \\ a_2^{\prime} \\ a_3^{\prime} \\ \end{bmatrix} \\\\ \begin{bmatrix} a_1\\ a_2\\ a_3 \end{bmatrix} &= \begin{bmatrix} \bold{e}_1^T\bold{e}_1^{\prime} & \bold{e}_1^T\bold{e}_1^{\prime} & \bold{e}_1^T\bold{e}_1^{\prime} \\ \bold{e}_1^T\bold{e}_1^{\prime} & \bold{e}_1^T\bold{e}_1^{\prime} & \bold{e}_1^T\bold{e}_1^{\prime} \\ \bold{e}_1^T\bold{e}_1^{\prime} & \bold{e}_1^T\bold{e}_1^{\prime} & \bold{e}_1^T\bold{e}_1^{\prime} \end{bmatrix} \begin{bmatrix} a_1^{\prime} \\ a_2^{\prime} \\ a_3^{\prime} \\ \end{bmatrix} \triangleq \bold{Ra^{\prime}} \end{align}

R\bold{R}描述了旋转本身,称为旋转矩阵
旋转矩阵是行列式为11的正交矩阵,反之,行列式为11的正交矩阵也是一个旋转矩阵
旋转矩阵的集合定义如下:

SO(n)={RRn×nRRT=I,det(R)=1} SO(n) = \{\bold{R} \in \Bbb{R}^{n\times n}|\bold{R}\bold{R}^T = \bold{I},det(\bold{R})=1\}

SO(n)SO(n)是特殊的正交群,旋转矩阵可以描述相机的旋转

因为旋转矩阵为正交阵,它的逆描述了一个相反的旋转,即

a=R1a=RTa \bold{a}^{\prime} = \bold{R}^{-1}a = \bold{R}^T\bold{a}

在世界坐标系中的向量a\bold{a},经过一次旋转R\bold{R}和一个平移t\bold{t}后,得到aa^{\prime},有

a=Ra+t a^{\prime} = \bold{R}a + \bold{t}

# 变换矩阵与齐次坐标系

引入齐次坐标和变换矩阵重写式以解决多次变换后过于复杂的问题

[a1]=[RtOT1][a1]T[a1] \begin{bmatrix} \bold{a}^{\prime} \\ 1 \end{bmatrix} = \begin{bmatrix} \bold{R} & \bold {t} \\ \bold{O}^T & 1 \end{bmatrix} \begin{bmatrix} \bold{a} \\ 1 \end{bmatrix} \triangleq \bold{T}\begin{bmatrix} \bold{a} \\ 1 \end{bmatrix}

变换矩阵T\bold{T},左上角为旋转矩阵,右侧为平移向量,左下角为0\bold{0}向量,右下角为1。这种矩阵又称为特殊欧氏群(Special Euclidean Group)

SE(3)={T=[RtOT1]R4×4RSO(3),t(R)3} SE(3) = \left\{ \bold{T} = \begin{bmatrix} \bold{R} & \bold{t} \\ \bold{O}^T & 1 \end{bmatrix} \in \Bbb{R}^{4\times 4} | \bold{R} \in SO(3),t\in \Bbb(R)^3 \right\}

该矩阵的逆表示一个反向的变换

T1=[RTRTtOT1] \bold{T}^{-1} = \begin{bmatrix} \bold{R}^T & -\bold{R}^T\bold{t} \\ \bold{O}^T & 1 \end{bmatrix}

# 四元数

复平面(Complex plane)

旋转 (opens new window)

四元数(Quaternion) 是Hamilton找到的一种扩展的复数。它既是紧凑的,也没有奇异性

一个四元数 q\bold{q} 拥有一个实部和三个虚部

q=q0+q1i+q2j+q3k \bold{q} = q_0 + q_1i + q_2j + q_3k

三个虚部i,j,ki,j,k满足的关系:

{i2=j2=k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j \begin{cases} i^2 = j^2 = k^2 = -1 \\ ij = k ,ji = -k \\ jk = i ,kj = -i \\ ki = j ,ik = -j \end{cases}

四元数的其他表达方式,ss为实部,v\bold{v}为虚部

q=[s,v],s=q0R,v=[q1,q2,q3]TR3 \bold{q} = [s,\bold{v}] , s = q_0 \in \Bbb{R} ,\bold{v} = [q_1,q_2,q_3]^T \in \Bbb{R}^3

如果一个四元数虚部为 0\bold{0},称之为实四元数。反之,若它的实部为 0,称之为虚四元数