空间位姿描述(pose description),主要分为RPY角、欧拉角及其他方式。
RPY角是描述飞机等物体在空中飞行时位姿的一种方法,将坐标系固定在飞机上,绕着 z 轴转动称为滚动(Roll),绕着 y 轴转动称为俯仰(Pitch),绕着 x 轴转动称为偏航(Yaw)。RPY角属于绕固定坐标系旋转的位姿变换方式,变换规则:先绕 x i 轴旋转 γ 角度,再绕 y i 轴旋转 β 角度,最后绕 z i 轴旋转 α 角度。
根据上述规则,得到的旋转矩阵为
RPY( γ , β , α ) = R( z i , α )R( y i , β )R( x i , γ )
现在,从逆运动学解的角度出发,假设给出了变换后的旋转矩阵,求解对应的绕固定坐标系{xyz}的旋转角 γ 、 β 和 α 。
联立式(3-11)和式(3-12),发现有9个方程,其中有一些是不独立的,利用其中3个方程就可以解出未知数。
在满足基本的数学运算基础下,RPY角的各角的四象限反正切解析式为
在求解关节角时,需要使用四象限反正切函数 a tan2,该函数的使用形式为 a tan2( y , x ),返回值以弧度表示 y/x 的反正切值,函数的返回值范围是(-π,π]。逆运动学解一般不会采用反正/余弦函数,因为反正弦函数 a sin( x )的值域为[-π/2,π/2],反余弦函数 a cos( x )的值域为[0,π],机器人关节角的范围一般为[-π,π],所以 a tan2( y , x )更加方便直接,避免了额外的角度范围判断。
而且, a tan2( y , x )相对于 a sin( x )或 a cos( x ),对输入变量具有更好的容错性。由于实际机器人的臂长、零点、减速比等运动学参数存在误差,使用 a sin( x )或 a cos( x )误差会放大,从保证逆运动学解精度的均匀性来看,在求解机器人逆运动学解时宜采用 a tan2( y , x )。
协作机器人的运动姿态可以由绕着坐标轴的不同的旋转角度序列进行规定。这种旋转角度的序列称为欧拉角(Euler Angles)。欧拉角是一种描述三维旋转的方式,任何一个旋转都可以用三个旋转的参数表示。使用绕固定坐标系的旋转,更加自然和易于理解,在图形学或游戏编程中,所有场景中的对象都有着统一的世界坐标的情况下,使用这种方式处理场景中的旋转更加方便。
根据不同的旋转规则,欧拉角有12种不同的表示方法,本章仅介绍两种最常用的表示方法。
1.zyx欧拉角
zyx欧拉角描述坐标系运动的表示方法为先绕 z 轴旋转 α 角度,再绕新的 y 轴旋转 β 角度,最后绕新的 x 轴旋转 γ 角度,如图3-3所示。
图3-3 zyx欧拉角依次旋转示意
在这种描述中,每次参考的都是当前坐标系,而不是固定坐标系,根据这种变换法则,可以得到欧拉角的变换矩阵为
发现这一结果与绕固定坐标系{xyz}旋转的结果完全一致。如果旋转轴相反、所有角度对象相同,绕着固定坐标系旋转和相对坐标系旋转的结果是恰好相同的,即绕固定坐标系{xyz}旋转和zyx欧拉角的坐标系变化是完全等价的。
2.zyz欧拉角
zyz欧拉角描述坐标系运动的表示方法为先绕 z 轴旋转 α 角度,再绕新的 y 轴旋转 β 角度,最后绕新的 z 轴旋转 γ 角度,以描述任何可能的姿态,在任何旋转序列下,旋转次序都是十分重要的。
上述规则是对应相对坐标系而言的,如果映射到固定坐标系中,则表示为先绕 z 轴旋转 γ 角度,再绕 y 轴旋转 β 角度,最后绕着 z 轴旋转 α 角度。
根据上述规则,可得到欧拉Euler( α , β , γ )
同理,求解该欧拉角表示下的逆运动学解,即应对的欧拉角为
在满足基本的数学运算基础下,欧拉角的各角四象限反正切解析式为
所以可以已知变换矩阵,求解出对应的欧拉角。
虽然欧拉角在直观上非常容易理解,符合人们的认知方式;但欧拉角存在“万向节死锁”问题。由于欧拉旋转定义本身,这种围绕旋转轴的旋转操作,与其最终所预期的三个轴向可以旋转的结果并非一定是一对一的映射。在一些特定条件下是多对一的映射,这会造成一些旋转自由度缺失,也就发生了“死锁”现象。
除了RPY角及欧拉角,常用的描述空间位姿的方法还有四元数法和轴角法等,下面对其进行简单的介绍。
1.四元数法
四元数是由爱尔兰数学家Hamilton发明的,由1个实数加上3个复数组合而成,通常可以表示成 w+x i +y j +z k 或[ w ,( x , y , z )],其中 w 、 x 、 y 和 z 都是实数, i 2 = j 2 = k 2 = ijk = -1。其实,四元数表征的也是旋转关系,跟旋转矩阵的表示方法类似,只不过它只需要4个元素,而旋转矩阵需要9个元素。
3D旋转公式:任意向量
v
沿着以单位向量定义的旋转轴
u
旋转
θ
角度之后的
v
′可以使用四元数乘法获取,令
v
=
[0,
v
],
,
,则有
其中, q * 是 q 的共轭。
所以,如果我们提前获得 q = [cos( θ ),sin( θ ) u ],那么 v ′= qvq * 可以使 v 沿着 u 旋转2 θ 角度获得。
四元数法相比于其他形式变换的优点:解决“万向节死锁”问题,只需要存储4个浮点数,相比于矩阵更加轻量,对于求逆、串联等操作,相比于矩阵更加高效。
2.轴角法
用一个以单位矢量定义的旋转角和一个标量定义的旋转角来表示旋转。通常表示为[ x , y , z , θ ],前面三个表示轴,最后一个表示角度,非常直观和紧凑。
轴角法最大的一个局限就是不能进行简单的插值,此外轴角形式的旋转不能直接施加于点或矢量,必转换为矩阵或四元数。