lesson10 机器人基础之三维空间的刚体运动
这一篇文档以及之后的内容都将涉及数学相关的理论知识,我将默认读者有基础的高等数学和线性代数知识。当然,由于我们大家都是工科生,对于数学的公式推理之类的做到了解明白即可,我也尽力不过多赘述相关的数学推导,只写出必要的部分,尽量做到浅显易懂(你要我完整的推导数学公式我也不会😇)
这一篇文档从介绍刚体开始,带领大家学习在三维空间的刚体运动,了解如何描述机器人的位姿以及TF坐标系转换。
刚体以及自由度
在高中我们常说质点,质点是一个有质量无体积和形状的几何点,是一个物理上的理想模型。刚体也是一个理想模型,它与质点最主要的区别在于它考虑了物体的形状和大小。刚体有质量,有体积和形状,且无论受多大力,内部任意两点的距离永不改变。
刚体有确定的形状和大小,这就导致了两者的运动形式的差异。质点只能够平动,而刚体既能够平动,也能够转动,这也导致了自由度的差别。
在物理上的自由度指描述物体空间位置所需的独立坐标数,其数值等于确定系统位置所需的最小独立变量个数。对于质点,它有三个自由度(x,y,z坐标)。但是显然我们不能用三个自由度描述刚体运动,因为它加入了转动,我们用6个自由度描述刚体运动(三个描述质心平动,三个描述绕质点的转动姿态(这里的姿态也是后续介绍的重点🥰))
坐标系间的欧式变换
在机器人的实际使用场景中我们会定义各种各样的坐标系,例如图像坐标系、云台坐标系、相机坐标系等等。对于移动中的机器人,我们常设定一个世界坐标系,它是不动的,相对相机和机器人是移动坐标系。
现在我们有这样一个问题:对于相机视野中的某个向量,它在相机坐标系下的坐标为,而在世界坐标系下去观测它,坐标为,那这两个坐标是如何转换的呢?我们需要得到该点针对机器人坐标系的坐标值,然后根据机器人位姿来变换到世界坐标系中。这叫做欧式变换,也就是相机坐标系与世界坐标系之间相差了一个欧式变换。
坐标系之间的运动是一个旋转加上一个平移,也就是刚体运动。同样欧式变换由旋转和平移组成,平移就是一个向量,因此我们着重讲解旋转。
我们假设一个单位正交基经过一次旋转变为。对于同一个向量,它在两个坐标系下的坐标便为和,由于向量本身没有变化,因此有等式:

我们对上述等式的左右两边同时左乘,那么左边的系数便变成了单位矩阵,等式化为:

我们把中间的矩阵拿出来,定义为矩阵,这个矩阵刻画了同一个向量旋转前后的坐标转换关系,只要旋转是一样的,这个矩阵就是一样的。所以这个矩阵描述了旋转本身,被称作旋转矩阵。
旋转矩阵是一个行列式为1的正交矩阵,行列式为1的正交矩阵也是旋转矩阵。我们可以定义一个维旋转矩阵的集合:

是特殊正交群的意思,用来描述物体在空间的旋转。特殊地,便是物体在三维空间的旋转。(群的知识涉及李群与李代数,我不打算详细介绍这方面的数学知识,因为这基本算是数学专业的研究生研一才学的内容,大家也只需要知道了解即可)
我们在旋转之后的坐标加上一个平移向量,便完整构成了欧式变换。

通过上式,我们用一个旋转矩阵和平移向量来完整地描述了一个欧式空间的坐标变换关系。
但是现在还有一个问题:我们这里的变换关系不是一个线性关系,对于多次变换进行描述相对臃肿。
例如现在我们进行两次变换:,;,

那从到的变换为

这样便看起来很臃肿,不便于表达。因此我们引入齐次坐标和变换矩阵:

这相当于一个数学技巧,我们在三维向量的末尾加上了一个1,使其变为四维向量,称为齐次坐标。对于这个四维向量,我们可以把旋转和平移写入一个矩阵中,使整个关系变为线性关系,矩阵便称为变换矩阵。
这样两次变换的叠加可写为,变得十分简洁:

对于变换矩阵,它左上角是旋转矩阵,右上角为平移向量,左下角为零向量,右下角为1。这样的矩阵也称为特殊欧式群,便是物体在三维空间的刚体运动:

欧拉角
通过以上的学习,我们可以使用旋转矩阵来描述旋转,但这是否就足够了呢?矩阵描述方式主要以下几个问题:
- 的旋转矩阵有九个量,而一次旋转只有三个自由度,因此这种表达方式是冗余的,能否有更紧凑的方式?
- 旋转矩阵自身带有约束,它必须是一个正交矩阵,且行列式为1,这使得估计和优化一个旋转矩阵变得困难
- 旋转矩阵这种表达方式对人类而言非常不主观
欧拉角提供了一种非常直观的方式来描述旋转——它使用了三个分离的转角,把一个旋转分为三个绕不同轴的旋转。
由于分解方式各有不同,所以欧拉角也有众多不同、易于混淆的定义方式。而在机器人领域中,我们常使用rpy角(即roll-pitch-yaw,滚转-俯仰-偏航)来描述机器人的姿态。
可以用飞机的姿态来理解:
- roll:绕飞机前后轴(机头到机尾)旋转,即歪头
- pitch:绕飞机左右轴(穿过机翼的轴)旋转,即上下点头
- yaw:绕飞机垂直轴(上下方向)旋转,即左右摇头
在坐标系中的定义(右手系,X轴向前,Y轴向右,Z轴向下)
- roll绕X轴旋转
- pitch绕Y轴旋转
- yaw绕Z轴旋转
rpy角绕固定轴的旋转顺序是ZYX。

欧拉角的一个重大缺陷是万向锁问题:在pitch为时,第一次旋转和第三次旋转将使用同一个轴,使得系统丢失了一个自由度。这被称作奇异性问题,从理论上也可证明,使用三个实数来描述三维旋转,都不可避免地会遇到奇异性问题。因此欧拉角往往只用于人机交互中,我们在程序中也不会直接使用欧拉角来描述姿态。
四元数
既然欧拉角存在奇异性问题,那我们能不能找到一个既紧凑又无奇异性的表达方式。我们找到一种类似复数的代数:四元数。它既是紧凑的,也没有奇异性。
我们知道,在二维空间下我们可以通过欧拉公式建立角度与复数之间的关系,也就是说在二维情况下,旋转可以用单位复数来描述。类似的,三维旋转可以用单位四元数来描述。
一个四元数有一个实部和三个虚部:。为其中的三个虚部,它们满足下面三个关系式:

我们也可以用一个标量和一个向量来表达四元数

其中为实部,为虚部。
用四元数来描述旋转,首先把三维空间点用一个虚四元数表示

相当于把四元数的三个虚部与空间中的三个轴对应。那旋转后的点可以表达为:

把的虚部取出,就是旋转过后的点的坐标。
因为四元数既是紧凑的,也没有奇异性,因此我们在算法程序中常用四元数描述旋转。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
