机器人学主要包含三个方面:
- 描述一个物体的坐标
- 运动学
- 顺运动学:根据肌肉等的状态知道“手”的位置和动作
- 逆运动学:根据想要的动作,逆解出肌肉的状态
- 运动轨迹问题
旋转矩阵
描述一个平面中的物体需要三个自由度,即 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)
那要同时表示移动和转动该怎么办呢?把它们放在同一个矩阵里面就好了:
BAT=[BAR0ApB1]=r11r21r310r12r22r320r13r23r330pxpypz1
其中,
- R 表示坐标系 B 相对于 A 的旋转
- p 表示坐标系 B 在 A 坐标系中的位置
如果点 P 在坐标系 B 中表示为 BP,则在坐标系 A 中为
AP=BAT⋅AP
也就是说,
xAyAzA1=[R0p1]xByBzB1
展开得到,
pA=RpB+p
主要的性质就是多个坐标变换可以通过矩阵乘法组合。例如
CAT=BATCBT
同时它的逆为 BAT−1=[BART0−BARTpB1]。
乘法规则

主要是为了区分两种情况:
- 相对于固定坐标系旋转(premultiply)
- 相对于自身坐标系旋转(postmultiply)
这两个不同就决定了矩阵应该左乘还是右乘,本质上就和之前的两种旋转一样。
顺向运动学
所谓运动学,就是只讨论运动状态本身,而不涉及到产生运动的力,也就是讨论位移(x)、速度(v)、加速度(a)、时间(t)之间的关系。顺向运动学则是通过每个“关节”的性质,推算出它们之间的几何关系,从而计算出末端执行器的状态和位置。
vaavdv=dtdx=dtdv=dt2d2x=adx
对于机械臂来说,就可以把它拟合成下面的形式:

手臂几何描述和 DH 表示法
在机器人手臂的几何建模中,需要描述连杆(link)和关节(axis)的几何关系,有了这样的建模我们才能计算出顺运动学的结果。

每个关节需要四个参数:
- ai:连杆长度,异面直线仅有一条公垂线段,这指的就是这条垂线段的长度
- αi:连杆扭角,两个关节轴之间的夹角,垂线方向上看两个 axes 之间形成的角度
有了这两个参数足以应付一个杆连接的情况了,但是多杆连接就需要更多参数来描述:

- di:连杆偏移,用于描述关节之间沿关节轴方向的距离
- θi:关节角,如图所示
建立坐标系
有了这四个参数还需要建立坐标系,才能描述出变换矩阵,建立坐标系的规则如下:



Denavit-Hartenberg 表示法
通过这四个参数,构造的齐次变换矩阵如下:
Ti=cosθisinθi00−sinθicosαicosθicosαisinαi0sinθisinαi−cosθisinαicosαi0aicosθiaisinθidi1
然后就可以通过连乘得到末端位置了:
T=T1T2…Tn
逆向运动学
给予特定的位置和姿态,反推出所有关节的相关参数。
两个概念:
可达工作空间,Reachable workspace:手臂可以用至少一种的姿态到达的位置
灵巧工作空间,Dexterous workspace:手臂可以用任何的姿态到达的位置
Wdexterous⊆Wreachable

以及子空间,Subspace,即运动集合或姿态集合的子空间。
因为逆向运动学的方程是一个非线性超越方程,所以虽然有六个方程六个未知数,也不代表只有一组解。另外,如果机械臂本身有几何限制的话,这也不代表着某一组解是可行解。我们也要从多重解中,找到一个最适合的解,最快,或是能避开障碍物。
解这个方程方法很多,既可以用几何解也可以用代数解、数值解。
Pieper’s solution

如果一个六自由度机械臂满足以下条件之一,则逆运动学可以解析求解:
- 最后三个关节轴相交于一点(球形腕,spherical wrist)
- 最后三个关节轴互相平行
为什么呢?因为当最后三个关节轴交于一点时:
这样就可以把逆运动学问题 分解成两个独立问题:
- 求腕中心位置
- 求末端姿态
具体的运算过程省略,和之前大同小异,爆算即可。
参考和注解
参考
https://www.bilibili.com/video/BV1v4411H7ez。
注释