刚体变换及其连续合成
刚体(rigid body)的姿态:
位姿(pose)包括位置(position)和方向(orientation)。
- 为了表示位置和指向,考虑在刚体上建立一个固连在刚体上的标准正交坐标系。
- 位置,即坐标,用刚体坐标系原点相对参考坐标系基向量的分量表示,一般参考坐标系基向量是正交的单位向量。
- 方向,即指向,用刚体坐标系各轴相对参考坐标系基向量的分量表示,如三维空间,需要三个单位向量表示,每个单位向量都是刚体坐标系的轴相对参考坐标系的方向余弦(即在参考坐标系各个基向量上的投影)。
旋转矩阵
表示刚体坐标系方向的三个单位向量组成了3x3矩阵 R R R , R R R 的每列为当前坐标系的轴在参考坐标系基向量下的分量。因为每列都是单位的,正交的,因此矩阵 R R R 是正交阵。
右手坐标系下 R R R 的行列式 d e t ( R ) = 1 det(R)=1 det(R)=1,左手坐标系下, d e t ( R ) = − 1 det(R)=-1 det(R)=−1。
R R R 的逆矩阵为 R R R 的转置矩阵, R − 1 = R T R^{-1}=R^{T} R−1=RT,即 R − 1 ⋅ R T = I R^{-1}·R^{T}=I R−1⋅RT=I。
基本旋转
不考虑平移的情况下,即坐标系原点重合时,通过上述定义的 R R R 矩阵,其每列表示的是刚体坐标系基向量在参考坐标系下的余弦。
旋转矩阵 R R R 的物理含义是:将参考坐标系旋转到与刚体坐标系重合所需要的旋转。
向量的旋转
向量,可以通过其在参考坐标系各轴基向量的分量来表达。同一个向量在不同参考坐标系下的坐标表达是不同的。
对于同一个点 P P P,我们已知 P 0 P_{0} P0 为其在参考坐标系 O 0 O_{0} O0 的坐标表示, P 1 P_{1} P1 为其在刚体坐标系 O 1 O_{1} O1 下的坐标表示, R 1 0 R_{1}^{0} R10 表示坐标系 O 0 O_{0} O0 到 O 1 O_{1} O1 的旋转,即 O 0 O_{0} O0 旋转到 O 1 O_{1} O1 重合所需要的旋转。则两个向量之间的转换关系如下:
P 0 = R 1 0 ⋅ P 1 P_{0}=R_{1}^{0} · P_{1} P0=R10⋅P1
因此,至此可以总结一个旋转矩阵 R R R 具有的三个等价的几何学意义:
- R R R 描述了两个坐标系之间的相对指向。其列向量为旋转后的坐标系的轴关于原来坐标系中各轴的方向余弦。
- R R R 表示了同一点 P P P 在两个坐标系下的坐标转换矩阵。
- R R R 是在一个坐标系下,对向量进行旋转的算子。
连续旋转变换矩阵的合成
完整的旋转可以表示为若干次旋转的合成,且由于每次旋转之后当前坐标系已经不是初始坐标系了,因此多次旋转合成分为每次相对原始固定坐标系旋转,可称为绕静坐标系旋转,和每次都相对当前新坐标系旋转,称为绕动坐标系旋转。
若 R 1 0 R_{1}^{0} R10 表示 O 0 O_{0} O0 到 O 1 O_{1} O1 的旋转, R 2 1 R_{2}^{1} R21 表示 O 1 O_{1} O1 到 O 2 O_{2} O2 的旋转,则:
- 绕动坐标系旋转,合成原则为连续右乘,即:
R 2 0 = R 1 0 ⋅ R 2 1 R_{2}^{0}=R_{1}^{0}·R_{2}^{1} R20=R10⋅R21
- 绕静坐标系旋转,合成原则为连续左乘,即:
R 2 0 ‾ = R 2 1 ‾ ⋅ R 1 0 \overline{R_{2}^{0}}=\overline{R_{2}^{1}}·R_{1}^{0} R20=R21⋅R10
在第二次旋转中, R 2 1 R_{2}^{1} R21 与 R 2 1 ‾ \overline{R_{2}^{1}} R21 不同, R 2 1 R_{2}^{1} R21 指的是相对当前坐标系( O 1 O_{1} O1 )将 O 1 O_{1} O1 旋转到 与 O 2 O_{2} O2 重合需要的旋转矩阵,而 R 2 1 ‾ \overline{R_{2}^{1}} R21 指的是相对静坐标系( O 0 O_{0} O0 )将 O 1 O_{1} O1 旋转到 与 O 2 O_{2} O2 重合需要的旋转矩阵。
同理,最终得到的 R 2 0 R_{2}^{0} R20 与 R 2 0 ‾ \overline{R_{2}^{0}} R20 涵义亦不同。
连续左乘、右乘的左右是合成旋转矩阵的方向,从第一个矩阵 R 1 0 R_{1}^{0} R10 开始算起。
值得注意的是,相对固定坐标系的旋转序列和相对当前(运动)坐标系的旋转序列,导致的最终刚体坐标系指向是不一致的(一般来说)。但是两者的影响是互换的,容易从旋转矩阵的合成公式看出:沿着固定坐标系沿着 X − Y − Z X-Y-Z X−Y−Z 序列进行旋转,其结果与沿着运动坐标系进行 Z − Y − X Z-Y-X Z−Y−X 反向序列旋转得到的结果是一致的。
欧拉角表示
旋转矩阵9个元素是冗余的,对于特殊正交群 S O ( m ) SO(m) SO(m),最简表达需要m(m-1)/2个参数,一种通过3个参数表达旋转的方式是欧拉角,即沿着坐标系三个轴顺序转动的合成来表达一个旋转。
由于相邻两次旋转要求不是平行的轴,因此在27种顺序组合中,有效的顺序组合有12种,两种经典的欧拉角顺序是ZYZ和ZYX角。
以ZYX角为例:
R = R z ⋅ R y ⋅ R x R=R_{z}·R_{y}·R_{x} R=Rz⋅Ry⋅Rx
可以从两个方向进行解读:
- 沿着Z-Y-X顺序,相对动坐标系,从 R z R_{z} Rz 开始连续右乘;
- 沿着X-Y-Z顺序,相对静坐标系,从 R x R_{x} Rx 开始连续左乘。
连续齐次变换矩阵的合成
因为刚体变换不仅涉及到上述旋转,还涉及到平移变换,因此在连续变换过程中,表达会变得越来越繁琐,不能直接合成,使用齐次变换可以直接对连续的若干次刚体变换进行合成。
A j i A_{j}^{i} Aji 表示坐标系 O i O_{i} Oi 变换到和坐标系 O j O_{j} Oj 重合的齐次矩阵。则:
A n 0 = A 1 0 ⋅ A 2 1 ⋅ ⋅ ⋅ A n n − 1 A_{n}^{0}=A_{1}^{0} · A_{2}^{1} ··· A_{n}^{n-1} An0=A10⋅A21⋅⋅⋅Ann−1
P 0 = A 1 0 ⋅ A 2 1 ⋅ ⋅ ⋅ A n n − 1 ⋅ P n P_{0}=A_{1}^{0} · A_{2}^{1} ··· A_{n}^{n-1} · P_{n} P0=A10⋅A21⋅⋅⋅Ann−1⋅Pn
可以从两个方向进行解读:
- 计算一系列齐次变换的等价变换时,理解为将坐标系从原始坐标系变换到终了坐标系,因此是从 A 1 0 A_{1}^{0} A10 开始,是右乘,是动坐标系。比如知道机器人7个连杆两两之间的齐次变换,求末端工具坐标系位姿,则 A 6 0 = A 1 0 ⋅ A 2 1 ⋅ A 3 2 ⋅ A 4 3 ⋅ A 5 4 ⋅ A 6 5 A_{6}^{0}=A_{1}^{0} · A_{2}^{1} · A_{3}^{2} · A_{4}^{3} · A_{5}^{4} · A_{6}^{5} A60=A10⋅A21⋅A32⋅A43⋅A54⋅A65,从机器人基坐标系,连乘到最后一个连杆的齐次变换矩阵。
- 计算一个向量的变换时,理解为针对一点 P P P ,进行一系列齐次坐标变换,因此是从 P n P_{n} Pn 和 A n n − 1 A_{n}^{n-1} Ann−1 开始,是对点 P P P 不断左乘。比如将一个向量从末端坐标系转换到机器人基坐标系,则在计算的时候,从最后一个连杆的齐次变换开始,不断在向量上左乘,如:
P 0 = A 6 0 ⋅ P 6 = A 1 0 ⋅ A 2 1 ⋅ A 3 2 ⋅ A 4 3 ⋅ A 5 4 ⋅ A 6 5 ⋅ P 6 P_{0}=A_{6}^{0} · P_{6}=A_{1}^{0} · A_{2}^{1} · A_{3}^{2} · A_{4}^{3} · A_{5}^{4} · A_{6}^{5} · P_{6} P0=A60⋅P6=A10⋅A21⋅A32⋅A43⋅A54⋅A65⋅P6
- 值得注意的是,以上 R j i R_{j}^{i} Rji ,含义均为坐标系 O i O_{i} Oi 变换到与 O j O_{j} Oj 重合的齐次变换(旋转变换)。其可以用于左乘 O j O_{j} Oj 下的向量 P j P_{j} Pj 将其转换到 O i O_{i} Oi 坐标系下得到 P i P_{i} Pi 。其每列为 O j O_{j} Oj 各轴在 O i O_{i} Oi 基向量下的余弦值(亦即,基向量上的投影)。