一般来说,三维空间中的刚体具有 **六个自由度**:三个旋转自由度和三个平移自由度。
刚体的位置和方向可以通过在其上附着坐标系来描述。
描述刚体位置和方向的一种常见方法是在其上附着坐标系。在定义参考坐标系后,刚体的位置和方向完全由坐标系原点的位置及其轴线相对于参考坐标系的方位确定。
**旋转矩阵** 描述了两个这样的坐标系的相对方位。这个 3 × 3 矩阵的列由一个坐标系相对于另一个参考坐标系的轴线上的单位向量组成。因此,坐标系 { b } {\displaystyle \{b\}} 相对于参考坐标系 { a } {\displaystyle \{a\}} 的相对方位由旋转矩阵 a b R {\displaystyle _{a}^{b}R\,} 给出。
b a R = ( a x b a y b a z b ) = ( x b ⋅ x a y b ⋅ x a z b ⋅ x a x b ⋅ y a y b ⋅ y a z b ⋅ y a x b ⋅ z a y b ⋅ z a z b ⋅ z a ) {\displaystyle _{b}^{a}R={\begin{pmatrix}_{a}x^{b}&_{a}y^{b}&_{a}z^{b}\end{pmatrix}}={\begin{pmatrix}x^{b}\cdot x^{a}&y^{b}\cdot x^{a}&z^{b}\cdot x^{a}\\x^{b}\cdot y^{a}&y^{b}\cdot y^{a}&z^{b}\cdot y^{a}\\x^{b}\cdot z^{a}&y^{b}\cdot z^{a}&z^{b}\cdot z^{a}\end{pmatrix}}}
旋转矩阵可以 **用两种方式解释**
作为将第一个坐标系 **旋转** 到第二个坐标系的表示(**主动** 解释)。
作为两个坐标系之间相互 **方位** 的表示(**被动** 解释)。
点 p {\displaystyle p} 相对于参考坐标系 { a } {\displaystyle \{a\}} 的坐标,其坐标相对于具有相同原点的坐标系 { b } {\displaystyle \{b\}} 已知,可以按如下方式计算: a p = b a R b p {\displaystyle _{a}p=\,_{b}^{a}R\,_{b}p} .
旋转矩阵的一些可能具有实际价值的性质是
a b R {\displaystyle _{a}^{b}R\,} 的列向量相互正交。
矩阵 a b R {\displaystyle _{a}^{b}R\,} 的列向量长度等于 1。
旋转矩阵是对刚体姿态的非最小描述。也就是说,它使用 9 个数字来表示姿态,而不是仅使用 3 个数字。(上述两个属性对应于 9 个矩阵元素之间的 6 个关系。因此,只有 3 个是独立的。)但是,非最小表示通常具有一些数值优势,因为它们不表现出坐标奇点。
由于 a b R {\displaystyle _{a}^{b}R\,} 是正交的, b a R = a b R − 1 = a b R T {\displaystyle _{b}^{a}R=\,_{a}^{b}R^{-1}=\,_{a}^{b}R^{T}} 。
绕 z 轴旋转角度 γ {\displaystyle \gamma } 。
关于框架轴的初级旋转的表达式很容易推导出。从右边的图中可以看出,框架绕 z 轴旋转角度 γ {\displaystyle \gamma } ,由以下描述:
R z ( γ ) = ( cos ( γ ) − sin ( γ ) 0 sin ( γ ) cos ( γ ) 0 0 0 1 ) {\displaystyle R_{z}(\gamma )={\begin{pmatrix}\cos(\gamma )&-\sin(\gamma )&0\\\sin(\gamma )&\cos(\gamma )&0\\0&0&1\end{pmatrix}}}
类似地,可以证明,框架绕 x 轴旋转角度 α {\displaystyle \alpha } ,由以下给出:
R x ( α ) = ( 1 0 0 0 cos ( α ) − sin ( α ) 0 sin ( α ) cos ( α ) ) {\displaystyle R_{x}(\alpha )={\begin{pmatrix}1&0&0\\0&\cos(\alpha )&-\sin(\alpha )\\0&\sin(\alpha )&\cos(\alpha )\end{pmatrix}}}
以完全相同的方式推导出,框架绕 y 轴旋转角度 β {\displaystyle \beta } ,由以下描述:
R y ( β ) = ( cos ( β ) 0 sin ( β ) 0 1 0 − sin ( β ) 0 cos ( β ) ) {\displaystyle R_{y}(\beta )={\begin{pmatrix}\cos(\beta )&0&\sin(\beta )\\0&1&0\\-\sin(\beta )&0&\cos(\beta )\end{pmatrix}}}
复合旋转通过将不同的初级旋转矩阵相乘来找到。
对应于一组关于移动 轴的旋转的矩阵可以通过后乘 旋转矩阵来找到,从而以旋转发生的相同顺序将它们相乘。通过绕 z 轴旋转角度 α {\displaystyle \alpha } ,然后绕移动 的 y 轴旋转角度 − β {\displaystyle -\beta } 所形成的旋转矩阵,由以下给出:
R ( z y , α , − β ) = R ( z , α ) R ( y , − β ) {\displaystyle R(zy,\alpha ,-\beta )=R(z,\alpha )R(y,-\beta )}
另一方面,关于**固定**轴的旋转的合成,可以通过**前乘**不同的基本旋转矩阵来找到。
关于框架轴的**单个**旋转的逆,是关于同一轴的旋转角度为负的旋转。
R − 1 ( z , α ) = R ( z , − α ) {\displaystyle R^{-1}(z,\alpha )=R(z,-\alpha )}
复合旋转的逆从矩阵乘积的逆得出。
R − 1 ( z y , α , − β ) = R − 1 ( y , − β ) R − 1 ( z , α ) {\displaystyle R^{-1}(zy,\alpha ,-\beta )=R^{-1}(y,-\beta )R^{-1}(z,\alpha )}
**注意**:这些示例需要 Robotics Toolbox 正确安装。
theta = pi/2;
T_x = rotx(theta); % Returns a 4x4 pose matrix. The upper-left 3x3 submatrix is the
% rotation matrix representing a rotation by theta about the x-axis.
R_x = tr2rt(T_x); % Returns the 3x3 rotation matrix corresponding with T_x.
T_y = roty(theta); % A rotation about the y-axis.
T_z = rotz(theta); % A rotation about the z-axis.
与旋转矩阵相反,**欧拉角 **是对相对方向的最小表示(仅一组**三个**数字)。这组三个角描述了关于移动参考系轴的一系列旋转。但是,有很多(确切地说是 12 个)集合描述了相同的方向:轴的不同组合(例如 ZXZ、ZYZ 等)会导致不同的欧拉角。欧拉角通常用于描述许多串联机械手机器人的手腕状末端执行器的方向。
**注意**:相同的轴不应该出现在连续的位置(例如 ZZX)。另外,应该限制欧拉角的范围以避免相同方向的不同角度。例如:对于 ZYZ 欧拉角的情况,关于 z 轴的第一次旋转应该在 [ − π , π ] {\displaystyle [-\pi ,\pi ]} 内。关于移动的 y 轴的第二次旋转,范围为 [ − π / 2 , π / 2 ] {\displaystyle [-\pi /2,\pi /2]} 。关于移动的 z 轴的最后一次旋转,范围为 [ − π , π ] {\displaystyle [-\pi ,\pi ]} 。
正向映射,或找到末端执行器相对于基座框架的方向,从关于移动轴的旋转的合成得出。对于关于 z 轴旋转角度为 α {\displaystyle \alpha } 的旋转,然后是关于移动的 x 轴旋转角度为 β {\displaystyle \beta } 的旋转,以及最后关于移动的 z 轴旋转角度为 γ {\displaystyle \gamma } 的旋转,得到的旋转矩阵为
b s e e R = R ( z x z , α , β , γ ) = R ( z , α ) R ( x , β ) R ( z , γ ) {\displaystyle _{bs}^{ee}R\,=R(zxz,\alpha ,\beta ,\gamma )=R(z,\alpha )R(x,\beta )R(z,\gamma )}
写出之后
R ( z x z , α , β , γ ) = ( c γ c α − s γ c β s α − s γ c α − c γ c β s α s β s α c γ s α + s γ c β c α − s γ s α + c γ c β c α − s β c α s γ s β c γ s β c β ) {\displaystyle R(zxz,\alpha ,\beta ,\gamma )={\begin{pmatrix}c_{\gamma }c_{\alpha }-s_{\gamma }c_{\beta }s_{\alpha }&-s_{\gamma }c_{\alpha }-c_{\gamma }c_{\beta }s_{\alpha }&s_{\beta }s_{\alpha }\\c_{\gamma }s_{\alpha }+s_{\gamma }c_{\beta }c_{\alpha }&-s_{\gamma }s_{\alpha }+c_{\gamma }c_{\beta }c_{\alpha }&-s_{\beta }c_{\alpha }\\s_{\gamma }s_{\beta }&c_{\gamma }s_{\beta }&c_{\beta }\end{pmatrix}}}
注意: 请注意简写符号: s α {\displaystyle s_{\alpha }} 代表 sin α {\displaystyle \sin \alpha } , c α {\displaystyle c_{\alpha }} 代表 cos α {\displaystyle \cos \alpha } ,等等。
为了驱动末端执行器,必须解决逆问题:给定一个特定的方向矩阵,实现该方向的欧拉角是什么?
对于上述情况,欧拉角 α {\displaystyle \alpha } , β {\displaystyle \beta } 和 γ {\displaystyle \gamma } 可以通过观察旋转矩阵找到
α = atan2 ( R 13 , − R 23 ) {\displaystyle \alpha ={\textrm {atan2}}(R_{13},-R_{23})}
β = atan2 ( − R 23 c α + R 13 s α , R 33 ) {\displaystyle \beta ={\textrm {atan2}}(-R_{23}c_{\alpha }+R_{13}s_{\alpha },R_{33})}
γ = atan2 ( R 31 , R 32 ) {\displaystyle \gamma ={\textrm {atan2}}(R_{31},R_{32})}
在上面的示例中,当 β = 0 {\displaystyle \beta =0} 时,存在坐标奇点。以上等式在 β {\displaystyle \beta } 的小值时数值条件很差:第一个和最后一个等式变得无定义。这对应于末端执行器的第一轴和最后一轴的对齐。坐标奇点的出现涉及 **自由度损失**:在上述示例中,绕 y 轴的小旋转需要绕 x 轴和 z 轴的极大旋转。
没有最小表示形式的姿态能够在不出现坐标奇点的情况下全局描述所有姿态。
刚体的姿态可以用三个连续的绕固定轴旋转来描述。这导致了使用 **横滚-俯仰-偏航** (RPY) 角的记法。
RPY 角到旋转矩阵的正向映射类似于欧拉角的映射。由于现在框架绕固定轴旋转而不是移动轴,因此不同旋转矩阵相乘的顺序是反转的
R ( R P Y , r , p , y ) = R ( z , y ) R ( y , p ) R ( x , r ) {\displaystyle R(RPY,r,p,y)=R(z,y)R(y,p)R(x,r)}
写出之后
R ( R P Y , r , p , y ) = ( c y c p c y s p s r − s y c r c y s p c r + s y s r s y c p s y s p s r + c y c r s y s p c r − c y s r − s p c p s r c p c r ) {\displaystyle R(RPY,r,p,y)={\begin{pmatrix}c_{y}c_{p}&c_{y}s_{p}s_{r}-s_{y}c_{r}&c_{y}s_{p}c_{r}+s_{y}s_{r}\\s_{y}c_{p}&s_{y}s_{p}s_{r}+c_{y}c_{r}&s_{y}s_{p}c_{r}-c_{y}s_{r}\\-s_{p}&c_{p}s_{r}&c_{p}c_{r}\end{pmatrix}}}
反向关系是从上面旋转矩阵的观察中找到的
r = atan2 ( R 32 , R 33 ) {\displaystyle r={\textrm {atan2}}(R_{32},R_{33})}
y = atan2 ( R 21 , R 11 ) {\displaystyle y={\textrm {atan2}}(R_{21},R_{11})}
p = atan2 ( − R 31 , c y R 11 + s y R 21 ) {\displaystyle p={\textrm {atan2}}(-R_{31},c_{y}R_{11}+s_{y}R_{21})}
**注意:** 以上等式在 p {\displaystyle p} 接近 π / 2 {\displaystyle \pi /2} 和 − π / 2 {\displaystyle -\pi /2} 的值时,数值条件很差。
单位四元数 (四元数 的绝对值等于 1) 是姿态的另一种表示。它们可以被视为旋转矩阵和欧拉角集的优点和缺点之间的折衷方案。
以上符号仅描述相对方向。一个点相对于坐标系 { b } {\displaystyle \{b\}} 的坐标,该坐标系相对于参考坐标系 { a } {\displaystyle \{a\}} 进行了旋转和平移,由下式给出:
a p = a b R b p + a p a , b {\displaystyle _{a}p=\,_{a}^{b}R\,_{b}p+_{a}p^{a,b}}
这可以压缩成一个 **齐次变换矩阵** 或 **位姿(矩阵)** 的形式。其定义如下
a b T = ( a b R a p a , b 0 1 × 3 1 ) {\displaystyle _{a}^{b}T=\left({\begin{array}{cc}^{b}_{a}R&_{a}p^{a,b}\\0_{1\times 3}&1\end{array}}\right)}
该矩阵表示坐标系 { b } {\displaystyle \{b\}} 的位置和方向,其原点相对于参考坐标系 { a } {\displaystyle \{a\}} 的位置由 a p a , b {\displaystyle _{a}p^{a,b}} 描述,其相对于同一参考坐标系 { a } {\displaystyle \{a\}} 的方向由旋转矩阵 a b R {\displaystyle _{a}^{b}R\,} 描述。
a b T {\displaystyle _{a}^{b}T\,} 因此是三维空间中坐标系的表示。如果一个点 p {\displaystyle p} 相对于坐标系 { b } {\displaystyle \{b\}} 的坐标已知,那么该点相对于 a {\displaystyle {a}} 的坐标可通过以下方式找到:
( a p 1 ) = a b T ( b p 1 ) {\displaystyle {\begin{pmatrix}_{a}p\\1\end{pmatrix}}=\,_{a}^{b}T{\begin{pmatrix}_{b}p\\1\end{pmatrix}}}
这与以下写法相同
a p = a b R b p + a p a , b {\displaystyle _{a}p=\,_{a}^{b}R\,_{b}p+_{a}p^{a,b}}
请注意,上面的向量用第四个坐标(等于 1)进行了扩展:它们被设置为齐次 的。
与旋转矩阵的情况一样,齐次变换矩阵可以以主动 (“位移 ”)和被动 (“姿态 ”)的方式解释。它也是非最小 姿态表示形式,不会受到坐标奇点的困扰。
如果已知框架 { c } {\displaystyle \{c\}} 的姿态相对于 { b } {\displaystyle \{b\}} ,而 { b } {\displaystyle \{b\}} 的姿态相对于第三个框架 { a } {\displaystyle \{a\}} 是已知的,则由此产生的姿态 a c T {\displaystyle _{a}^{c}T\,} 可以通过以下方式找到:
a c T = a b T b c T {\displaystyle _{a}^{c}T=\,_{a}^{b}T\,_{b}^{c}T}
x = 1;
y = 1.3;
z = 0.4;
T = transl(x,y,z); % Returns the pose matrix corresponding with a translation over
% the vector (x, y, z)'.
姿态矩阵是描述姿态的一种非最小方式。一种常用的最小 替代方法是有限位移扭曲
t = ( α β γ x y z ) {\displaystyle t={\begin{pmatrix}\alpha \\\beta \\\gamma \\x\\y\\z\end{pmatrix}}}
这里, α {\displaystyle \alpha } 、 β {\displaystyle \beta } 和 γ {\displaystyle \gamma } 是欧拉角的一组有效值(任何有效值),而 x {\displaystyle x} 、 y {\displaystyle y} 和 z {\displaystyle z} 是刚体上参考点坐标。