机器人学主要包含三个方面:
描述一个物体的坐标
运动学
顺运动学:根据肌肉等的状态知道“手”的位置和动作
逆运动学:根据想要的动作,逆解出肌肉的状态
运动轨迹问题
旋转矩阵
描述一个平面中的物体需要三个自由度,即 x 轴、y 轴和转动,同理,描述三维中的物体就需要六个自由度,即 x 轴、y 轴、z 轴和三种相应的转动。
要描述一个三维空间的物体,可以在质心标记它的位置,要记录它的转动形态,就可以在质心上建立三个坐标(body frame),然后计算它们和世界坐标(world frame)的投影:

其中,BAR 表示 body frame B 对 world frame A 的坐标,依次用 X、Y、Z 的 column vector (长度都是 1)表示,也表示三主轴对 frame A 的投影。叫做旋转矩阵。
可以得到一个特性:
BAR=X^A⋅X^BY^A⋅X^BZ^A⋅X^BX^A⋅Y^BY^A⋅Y^BZ^A⋅Y^BX^A⋅Z^BY^A⋅Z^BZ^A⋅Z^B=X^B⋅X^AX^B⋅Y^AX^B⋅Z^AY^B⋅X^AY^B⋅Y^AY^B⋅Z^AZ^B⋅X^AZ^B⋅Y^AZ^B⋅Z^A=X^B⋅X^AY^B⋅X^AZ^B⋅X^AX^B⋅Y^AY^B⋅Y^AZ^B⋅Y^AX^B⋅Z^AY^B⋅Z^AZ^B⋅Z^AT=(ABR)T⇒BAR=ABRT
而且显然可以得到:
BART⋅BART=I3
所以旋转矩阵属于正交矩阵,它的逆可以很简单地得到:
R−1=RT
正交矩阵的行列式 ∣R∣=±1,
- 当 ∣R∣=1 时,该操作为纯旋转
- 当 ∣R∣=−1 时,该操作为反射,包含了镜像,改变了坐标系的手性
另外,虽然这里 R 有九个数字,但是它需要满足:
这就嵌入了六个条件,相当于九元方程组已经有了六个确定的方程,还剩三个方程组,也就和“需要三个自由度”是等价的了。
Fixed angle 旋转
Fixed angle 旋转指的是这个物体依次绕空间中固定不动的坐标轴(world frame)进行旋转,最后也可以得到一个旋转矩阵。
绕固定坐标系 X,Y,Z 轴旋转角度 α,β,γ,则对应的基本旋转矩阵为:
Rx(α)=1000cosαsinα0−sinαcosαRy(β)=cosβ0−sinβ010sinβ0cosβRz(γ)=cosγsinγ0−sinγcosγ0001
若使用 Fixed angle,按绕 X轴、Y 轴、Z 轴的旋转顺序分别旋转角度 α,β,γ,它的整体旋转矩阵为
R=Rz(γ)Ry(β)Rx(α)=cosγsinγ0−sinγcosγ0001⋅cosβ0−sinβ010sinβ0cosβ⋅1000cosαsinα0−sinαcosα=cγcβsγcβ−sβcγsβsα−sγcαsγsβsα+cγcαcβsαcγsβcα+sγsαsγsβcα−cγsαcβcα,其中,cθ=cosθ,sθ=sinθ=r11r21r31r12r22r32r13r23r33
那么同时也可以通过得到的 R=r11r21r31r12r22r32r13r23r33,反推出三个角的值。当 β=90° 时,可以得到下面的解:
βαγ=atan2(−r31,r112+r212),=atan2(r21/cβ,r11/cβ),=atan2(r32/cβ,r33/cβ)
β=±90° 时可以得到其中一组比较特别的解:
⎩⎨⎧β=90°α=0γ=atan2(r12,r22)⎩⎨⎧β=−90°α=0γ=−atan2(r12,r22)
另外需要注意,虽然描述顺序是 X→Y→Z,但矩阵乘法顺序是从右往左的,因为后发生的旋转在左侧。
Euler angle 旋转
Euler angle 旋转就是绕当前坐标轴 Z、Y、X 进行旋转,注意这里的轴是物体自己的轴,会随旋转变化。
它可以和 fixed angle 旋转对应起来:
Fixed XYZ≡Euler ZYX
但是一般使用 ZYZ Euler angle 旋转来举例。例如旋转过程为:
- 绕 Z 轴旋转 α,
- 绕新的 Y 轴旋转 β,
- 绕新的 Z 轴旋转 γ,
就可以得到对应的旋转矩阵,注意这里是先旋转的操作放在左边了:
R=Rz(α)Ry(β)Rz(γ)
同理可以得到解:
⎩⎨⎧βαγ=atan2(r312+r322,r33)=0=atan2(r23/sβ,r13/sβ)=atan2(r32/sβ,−r31/sβ)⎩⎨⎧βαγ=90°=0=atan2(−r12,r11)⎩⎨⎧βαγ=180°=0=−atan2(r12,−r11)
参考和注解