2434 字
6 分钟
lesson10 机器人基础之三维空间的刚体运动
2026-08-03

lesson10 机器人基础之三维空间的刚体运动#

这一篇文档以及之后的内容都将涉及数学相关的理论知识,我将默认读者有基础的高等数学和线性代数知识。当然,由于我们大家都是工科生,对于数学的公式推理之类的做到了解明白即可,我也尽力不过多赘述相关的数学推导,只写出必要的部分,尽量做到浅显易懂(你要我完整的推导数学公式我也不会😇)

这一篇文档从介绍刚体开始,带领大家学习在三维空间的刚体运动,了解如何描述机器人的位姿以及TF坐标系转换。

刚体以及自由度#

在高中我们常说质点,质点是一个有质量无体积和形状的几何点,是一个物理上的理想模型。刚体也是一个理想模型,它与质点最主要的区别在于它考虑了物体的形状和大小。刚体有质量,有体积和形状,且无论受多大力,内部任意两点的距离永不改变。

刚体有确定的形状和大小,这就导致了两者的运动形式的差异。质点只能够平动,而刚体既能够平动,也能够转动,这也导致了自由度的差别。

在物理上的自由度指描述物体空间位置所需的独立坐标数,其数值等于确定系统位置所需的最小独立变量个数。对于质点,它有三个自由度(x,y,z坐标)。但是显然我们不能用三个自由度描述刚体运动,因为它加入了转动,我们用6个自由度描述刚体运动(三个描述质心平动,三个描述绕质点的转动姿态(这里的姿态也是后续介绍的重点🥰))

坐标系间的欧式变换#

在机器人的实际使用场景中我们会定义各种各样的坐标系,例如图像坐标系、云台坐标系、相机坐标系等等。对于移动中的机器人,我们常设定一个世界坐标系,它是不动的,相对相机和机器人是移动坐标系。

现在我们有这样一个问题:对于相机视野中的某个向量pp,它在相机坐标系下的坐标为pcp_{c},而在世界坐标系下去观测它,坐标为pwp_{w},那这两个坐标是如何转换的呢?我们需要得到该点针对机器人坐标系的坐标值,然后根据机器人位姿来变换到世界坐标系中。这叫做欧式变换,也就是相机坐标系与世界坐标系之间相差了一个欧式变换。

坐标系之间的运动是一个旋转加上一个平移,也就是刚体运动。同样欧式变换由旋转和平移组成,平移就是一个向量,因此我们着重讲解旋转。

我们假设一个单位正交基(e1,e2,e3)(e_{1},e_{2},e_{3})经过一次旋转变为(e1,e2,e3)(e^{'}_{1},e^{'}_{2},e^{'}_{3})。对于同一个向量aa,它在两个坐标系下的坐标便为[a1,a2,a3]T[a_{1},a_{2},a_{3}]^T[a1,a2,a3]T[a^{'}_{1},a^{'}_{2},a^{'}_{3}]^T,由于向量本身没有变化,因此有等式:

Image

我们对上述等式的左右两边同时左乘[e1T,e2T,e3T]T[e^{T}_{1},e^{T}_{2},e^{T}_{3}]^T,那么左边的系数便变成了单位矩阵,等式化为:

Image

我们把中间的矩阵拿出来,定义为矩阵RR,这个矩阵刻画了同一个向量旋转前后的坐标转换关系,只要旋转是一样的,这个矩阵就是一样的。所以这个矩阵RR描述了旋转本身,被称作旋转矩阵。

旋转矩阵是一个行列式为1的正交矩阵,行列式为1的正交矩阵也是旋转矩阵。我们可以定义一个nn维旋转矩阵的集合:

Image

SO(n)SO(n)是特殊正交群的意思,用来描述物体在空间的旋转。特殊地,SO(3)SO(3)便是物体在三维空间的旋转。(群的知识涉及李群与李代数,我不打算详细介绍这方面的数学知识,因为这基本算是数学专业的研究生研一才学的内容,大家也只需要知道了解即可)

我们在旋转之后的坐标加上一个平移向量tt,便完整构成了欧式变换。

Image

通过上式,我们用一个旋转矩阵RR和平移向量tt来完整地描述了一个欧式空间的坐标变换关系。

但是现在还有一个问题:我们这里的变换关系不是一个线性关系,对于多次变换进行描述相对臃肿。

例如现在我们进行两次变换:R1R_{1},t1t_{1}R2R_{2},t2t_{2}

Image

那从aacc的变换为

Image

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

Image

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

这样两次变换的叠加可写为,变得十分简洁:

Image

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

Image

欧拉角#

通过以上的学习,我们可以使用旋转矩阵来描述旋转,但这是否就足够了呢?矩阵描述方式主要以下几个问题:

  • SO(3)SO(3)的旋转矩阵有九个量,而一次旋转只有三个自由度,因此这种表达方式是冗余的,能否有更紧凑的方式?
  • 旋转矩阵自身带有约束,它必须是一个正交矩阵,且行列式为1,这使得估计和优化一个旋转矩阵变得困难
  • 旋转矩阵这种表达方式对人类而言非常不主观

欧拉角提供了一种非常直观的方式来描述旋转——它使用了三个分离的转角,把一个旋转分为三个绕不同轴的旋转。

由于分解方式各有不同,所以欧拉角也有众多不同、易于混淆的定义方式。而在机器人领域中,我们常使用rpy角(即roll-pitch-yaw,滚转-俯仰-偏航)来描述机器人的姿态。

可以用飞机的姿态来理解:

  • roll:绕飞机前后轴(机头到机尾)旋转,即歪头
  • pitch:绕飞机左右轴(穿过机翼的轴)旋转,即上下点头
  • yaw:绕飞机垂直轴(上下方向)旋转,即左右摇头

在坐标系中的定义(右手系,X轴向前,Y轴向右,Z轴向下)

  • roll绕X轴旋转
  • pitch绕Y轴旋转
  • yaw绕Z轴旋转

rpy角绕固定轴的旋转顺序是ZYX。

Image

欧拉角的一个重大缺陷是万向锁问题:在pitch为±90\pm90^\circ时,第一次旋转和第三次旋转将使用同一个轴,使得系统丢失了一个自由度。这被称作奇异性问题,从理论上也可证明,使用三个实数来描述三维旋转,都不可避免地会遇到奇异性问题。因此欧拉角往往只用于人机交互中,我们在程序中也不会直接使用欧拉角来描述姿态。

四元数#

既然欧拉角存在奇异性问题,那我们能不能找到一个既紧凑又无奇异性的表达方式。我们找到一种类似复数的代数:四元数。它既是紧凑的,也没有奇异性。

我们知道,在二维空间下我们可以通过欧拉公式建立角度与复数之间的关系,也就是说在二维情况下,旋转可以用单位复数来描述。类似的,三维旋转可以用单位四元数来描述。

一个四元数qq有一个实部和三个虚部:q=q0+q1i+q2j+q3kq=q_{0}+q_{1}i+q_{2}j+q_{3}ki,j,ki,j,k为其中的三个虚部,它们满足下面三个关系式:

Image

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

Image

其中ss为实部,vv为虚部。

用四元数来描述旋转,首先把三维空间点用一个虚四元数表示

Image

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

Image

pp^{'}的虚部取出,就是旋转过后的点的坐标。

因为四元数既是紧凑的,也没有奇异性,因此我们在算法程序中常用四元数描述旋转。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

lesson10 机器人基础之三维空间的刚体运动
https://www.wust-rm.top/posts/teach10/
作者
qing_feng
发布于
2026-08-03
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录