空间表示与坐标变换
主要分为两个部分,一是定点在不同坐标系下坐标的变换,二是点在同一坐标系下坐标的变换。
坐标系变换
考虑将坐标系的变换分成两个部分:旋转与平移。

BAR=[AX^BAY^BAZ^B]
其中 AX^B 是 B 坐标系的 X 轴在 A 坐标系下的坐标。
AP=BARBP
由于 BAR 是一个正交矩阵,所以 ABR=BAR−1=BART。

AP=BARBP+APBORG
构建矩阵 BAT 如下:
BAT=[BAR000APBORG1]
可得
[AP1]=BAT[BP1]
由于 BAT 是一个齐次矩阵,所以可以连续左乘来表示一系列变换。
另外,BAT 的逆矩阵为:
BAT−1=ABT=[BART000−BARTAPBORG1]
位置变换
位置变换同样分为旋转与平移两部分。

AP2=AP1+AQ
为了统一表达,我们尝试将平移变换也表示为矩阵乘法的形式,构建矩阵 DQ(q) 如下:
DQ(q)=100001000010qxqyqz1
其中 [qx,qy,qz]T 是 AQ 的坐标。

为了方便,我们仅考虑绕某一坐标轴旋转的情况,其他更普遍的情况可以通过绕三个坐标轴的旋转来实现。
绕 X、Y、Z 轴旋转的矩阵分别为:
RX(θ)=10000cosθsinθ00−sinθcosθ00001
RY(θ)=cosθ0−sinθ00100sinθ0cosθ00001
RZ(θ)=cosθsinθ00−sinθcosθ0000100001
最终的位置变换矩阵可以通过平移和旋转矩阵的乘积来表示,以绕 Z 轴旋转为例:
T=DQ(q)RZ(θ)=cosθsinθ00−sinθcosθ000010qxqyqz1
[AP21]=T[AP11]
朝向表示
有关欧拉角表示朝向导致的万向锁问题和四元数的详细介绍,可参考这两篇文章:四元数与三维旋转和 Bonus: Gimbal Lock,这里仅做简单说明。
用欧拉角等绕坐标轴旋转的方法表示朝向时,存在万向锁问题,即当某个旋转角度达到特定值时,两个旋转轴会重合,导致失去一个自由度,无法区分两个旋转轴的旋转,具体表现为无法通过旋转矩阵求出所有的欧拉角。
比如,当绕 Y 轴旋转角度 β=90∘ 时,
BARXYZ(γ,β,α)=00−1cosαsinγ−sinαcosγsinαsinγ+cosαcosγ0cosαcosγ+sinαsinγsinαcosγ−cosαsinγ0
此时通过给出的旋转矩阵,无法求得 α 和 γ 的值,其他的旋转方式也是同样,而使用四元数表示朝向时则不会出现上述情况。
四元数的表示方式为:坐标系绕单位向量 (kx,ky,kz) 旋转角度 θ,其四个参数分别为:
ϵ1ϵ2ϵ3ϵ4=kxsin2θ,=kysin2θ,=kzsin2θ,=cos2θ
旋转矩阵为:
Rϵ=1−2ϵ22−2ϵ322ϵ1ϵ2+2ϵ3ϵ42ϵ1ϵ3−2ϵ2ϵ42ϵ1ϵ2−2ϵ3ϵ41−2ϵ12−2ϵ322ϵ2ϵ3+2ϵ1ϵ42ϵ1ϵ3+2ϵ2ϵ42ϵ2ϵ3−2ϵ1ϵ41−2ϵ12−2ϵ22
若给定旋转矩阵,则四元数的参数可以通过以下公式求得:
ϵ1ϵ2ϵ3ϵ4=4ϵ4r32−r23,=4ϵ4r13−r31,=4ϵ4r21−r12,=211+r11+r22+r33
正运动学
正运动学是指已知机器人各个关节的参数,求解机器人末端执行器的位置和朝向的过程。
D-H 表示法

首先对机械臂的关节进行建系,对于每个关节 i,取 Z^i 轴与关节轴线重合,X^i 轴垂直于 Z^i 和 Z^i+1 轴,原点位于 Z^i 和 X^i 轴的交点处,Y^i 轴满足右手定则。
D-H 表示法中,每个关节 i 的参数包括:
- ai:Z^i 与 Z^i+1 轴沿 X^i 轴的平移距离
- αi:Z^i 与 Z^i+1 轴绕 X^i 轴的旋转角度
- di:X^i−1 与 X^i 轴沿 Z^i 轴的平移距离
- θi:X^i−1 与 X^i 轴绕 Z^i 轴的旋转角度
其中,对于转动关节,di 是常数,θi 是变量;对于移动关节,di 是变量,θi 是常数。
特别定义第 0 个坐标系与第 n+1 个坐标系分别为基坐标系和末端执行器坐标系,它们分别与第 1 个关节和第 n 个关节的关节变量为 0 时的坐标系重合,由此可得第 1 和第 n 个关节的 D-H 参数(以转动关节为例,此时 θi 为关节变量):
a0=0,α0=0,d1=0,θ1=θ
an=0,αn=0,dn+1=0,θn+1=θ
根据上述参数,可以构建每个关节变换到前一关节的变换矩阵 ii−1T:先让坐标系沿 Z^i 轴平移 di 得到坐标系 P,再绕 Z^i 轴旋转 θi 得到坐标系 Q,接着沿 X^i 轴平移 ai 得到坐标系 R,最后绕 X^i 轴旋转 αi,这一过程可以表示为矩阵乘法:
i−1P=Ri−1TQRTPQTiPTiP

各个中间变换矩阵就不列出来了,总之最终可以得到:
ii−1T=cosθisinθicosαi−1sinθisinαi−10−sinθicosθicosαi−1cosθisinαi−100−sinαi−1cosαi−10ai−1−disinαi−1dicosαi−11
通过连续左乘每个关节的变换矩阵,就可以得到末端执行器坐标系相对于基坐标系的变换矩阵。
另外,对于类似球关节这类具有多个自由度的关节,可以将其分解为多个转动关节来处理,这些转动关节的 X 轴的选取尽量与下一级的 X 轴平行或重合,不行就选一个符合右手定则的方向,D-H 参数中的平移部分为 0,旋转部分为相应的旋转角度。