三维空间刚体运动
三维空间刚体运动
三维空间中的刚体运动涉及到刚体在空间中的位置(translation)和方向(orientation)的变化。在机器视觉和机器人领域,尤其是在同时定位与地图构建(SLAM,Simultaneous Localization and Mapping)的应用中,精确地描述和计算这种运动是至关重要的。下面是对三维空间中刚体运动的详细介绍,特别是在SLAM的背景下。
位姿 (Pose)
位姿描述了一个刚体在三维空间中的位置和方向。通常,位姿由一个三维向量和一个旋转矩阵(或四元数)来表{t}(通常是x, y, z 坐标)描述了刚体相对于参考坐标系的位置。
- 旋转矩阵 {R} 或 四元数 表示刚体相对于参考坐标系的方向。
刚体变换 (Rigid-body Transformation)
刚体变换通常使用齐次变换矩阵 来表示,该矩阵结合了旋转和平移:
\mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0 & 1 \end{bmatrix}
其中,{R} 是一个3 \times 3 旋转矩阵,{t} 是一个三维平移向量。
旋转向量
旋转向量(也称为轴角表示)由一个向量表示,该向量的方向定义了旋转的轴,而其长度(模长)定义了绕该轴的旋转角度(以弧度为单位)。如果有一个单位向量 {u} = (u_x, u_y, u_z) 和一个角度 \theta,则旋转向量 {r} 可以表示为:
\mathbf{r} = \theta \mathbf{u}
从旋转向量到旋转矩阵
使用罗德里格斯公式(Rodrigues’ formula),可以将一个旋转向量转换成一个等价的旋转矩阵。罗德里格斯公式定义如下:
\mathbf{R} = \mathbf{I} + \sin(\theta) \mathbf{K} + (1 - \cos(\theta)) \mathbf{K}^2
其中:
- {I} 是单位矩阵。
- \theta 是旋转向量的模长,表示旋转角度。
- {K} 是旋转轴 {u} 的斜对称矩阵,定义为:
\mathbf{K} = \begin{bmatrix} 0 & -u_z & u_y \\ u_z & 0 & -u_x \\ -u_y & u_x & 0 \end{bmatrix}
斜对称矩阵{K}
这个矩阵的每个元素都与向量 {u} 的坐标有关,它们的意义可以从向量积的角度来解释。斜对称矩阵的作用可以看作是对任意向量 \mathbf{v} = (v_x, v_y, v_z) 实施向量积操作,即 \mathbf{u} \times \mathbf{v}。具体来说:
- 第一行 [0, -u_z, u_y]:这一行的作用是将输入向量 {v} 转化为一个新的向量,其 x 分量为 u_y v_z - u_z v_y,这正是 {u} \times \mathbf{v} 在 (x) 方向上的分量。
- 第二行 [u_z, 0, -u_x]:这一行生成的是 \mathbf{u} \times \mathbf{v} 在 y 方向上的分量,即 u_z v_x - u_x v_z。
- 第三行 [-u_y, u_x, 0]:这一行对应于 \mathbf{u} \times \mathbf{v}在 (z) 方向上的分量,即 u_x v_y - u_y v_x。
欧拉角通常由三个角度组成,分别对应于绕特定旋转轴的旋转。不同的学科和应用可能使用不同的旋转轴和旋转顺序,但最常见的旋转顺序之一是绕Z轴、绕新X轴和再绕新Z轴(称为Z-X-Z顺序)。其他常见的顺序包括Z-Y-X顺序(用于飞行动力学)。
欧拉角的组成

- 第一角 (通常称为偏航角,Yaw):绕 Z-轴的旋转,影响物体指向的方向。
- 第二角 (通常称为俯仰角,Pitch):绕新的Y-轴(经过第一次旋转后的轴)的旋转,影响物体的上下指向。
- 第三角 (通常称为滚转角,Roll):绕新的X -轴(经过前两次旋转后的轴)的旋转,影响物体的侧倾。
数学表示
对于一个给定的欧拉角组 (\phi, \theta, \psi),可以通过连续的旋转矩阵相乘来计算最终的方向。例如,对于Z-X-Z顺序的欧拉角,总的旋转矩阵R可以表示为:
R = R_z(\psi) R_x(\theta) R_z(\phi)
其中R_z 和R_x 分别是绕 z-轴和 x-轴的旋转矩阵。
特点和应用
- 直观性 :欧拉角提供了一种直观的方式来描述旋转,使得非专业人士也能理解和实现复杂的旋转。
- 应用广泛 :从动画制作到机器人控制再到飞行模拟,欧拉角都是描述物体旋转的常用工具。
潜在问题
- 万向锁 (Gimbal Lock):当第二角的旋转导致两个旋转轴重合时,会失去一个自由度,这会导致系统不能表示某些旋转(例如,当俯仰角为 ±90° 时,偏航和滚转就会混合在一起)。
- 非唯一性 :某些旋转可以通过不同的欧拉角组合来表示,这可能导致在控制系统中的问题,如目标追踪和路径规划。
四元树
四元数是一种扩展了复数的数学概念,常用于计算机图形、机器人学、航空航天等领域中描述和计算三维空间中的旋转。由于四元数可以避免万向锁问题并提供有效的计算方式,它们在需要频繁和复杂的旋转操作的系统中特别有用。
四元数的定义
四元数是由一个实数部分和三个虚数部分组成的数,可以表示为:
q = w + xi + yj + zk
其中,( w, x, y, ) 和 ( z ) 是实数,而 ( i, j, ) 和 ( k ) 是虚数单位,满足以下乘法规则:
i^2 = j^2 = k^2 = ijk = -1
四元数的运算
-
加法 :(w_1 + x_1i + y_1j + z_1k) + (w_2 + x_2i + y_2j + z_2k) = (w_1 + w_2) + (x_1 + x_2)i + (y_1 + y_2)j + (z_1 + z_2)k
-
乘法 :四元数乘法涉及交叉项,不是交换的(即 ( qp \neq pq )):
(w_1 + x_1i + y_1j + z_1k)(w_2 + x_2i + y_2j + z_2k) = (w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2) + (w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2)i + (w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2)j + (w_1z_2 + x_1y_2 - y_1x_2 + z_1w_2)k -
共轭四元数 :q^* = w - xi - yj - zk
-
模长 :|q| = \sqrt{w^2 + x^2 + y^2 + z^2}
-
逆四元数 :q^{-1} = \frac{q^*}{|q|^2},如果 q 是单位四元数(即|q| = 1),则q^{-1} = q^*
四元数表示旋转
为了表示三维空间中的旋转,通常使用单位四元数,其模长为1。旋转四元数可以由旋转轴和旋转角定义:
- 旋转轴 :单位向量 \mathbf{u} = (u_x, u_y, u_z)
- 旋转角 :\theta
对应的旋转四元数为:
q = \cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right)(u_xi + u_yj + u_zk)
使用四元数进行旋转
给定一个向量\mathbf{v} = (v_x, v_y, v_z) 表示为四元数 v = 0 + v_xi + v_yj + v_zk,使用四元数 q 对 \mathbf{v} 进行旋转的结果是:
v' = qvq^{-1}
如果 q 是单位四元数,这可以简化为 v' = qvq^*。
优点和用途
- 避免万向锁 :四元数不像欧拉角,不会遭遇万向锁的问题。
- 插值友好 :四元数非常适合进行球面线性插值(SLERP),这在计算机动画和机器人路径规划中非常有用。
- 计算效率 :四元数的运算通常比矩阵运算更快,尤其是在GPU优化下。
空间变换
在图像处理、计算机图形和几何计算中,相似变换、仿射变换和射影变换是三种常用的空间变换方式。这些变换在处理图像、3D渲染和机器视觉等领域中用来调整、变形或变换物体的形状和位置。
1. 相似变换(Similarity Transform)
相似变换是一种几何变换,保持图形的形状不变,只改变大小和位置,以及可能的旋转。在相似变换中,所有的原始图形的角度和长度比例都保持不变。
数学表达 :
\mathbf{x}' = s\mathbf{R}\mathbf{x} + \mathbf{t}
其中:
- \mathbf{x}是原始向量。
- \mathbf{R} 是旋转矩阵。
- s 是缩放因子。
- \mathbf{t}是平移向量。
特性 :
- 保持图形的“形状”和比例。
- 保持距离的比例和角度(即角度不变,长度按相同比例缩放)。
2. 仿射变换(Affine Transform)
仿射变换是一种更为通用的线性变换,包括平移、缩放、旋转和剪切。它保持了图形的平直性和平行性,但不一定保持角度和长度。
数学表达 :
\mathbf{x}' = \mathbf{A}\mathbf{x} + \mathbf{b}
其中:
- \mathbf{A} 是一个 2 \times 2或 3 \times 3的变换矩阵,可以包含旋转、缩放和剪切信息。
- \mathbf{b} 是平移向量。
特性 :
- 线和平面的平行性得以保持。
- 原始空间中的直线在变换后仍然是直线。
- 原始空间中的平面图形的中点和比例线在变换后仍然保持中点和比例关系。
3. 射影变换(Projective Transform 或 Homography)
射影变换是一种更为广义的线性变换,可以在仿射变换的基础上添加一个视角的变化。射影变换能够描述观察者视点变化导致的图像透视变形。

数学表达 :
\mathbf{x}' = \frac{\mathbf{H}\mathbf{x}}{w}
其中:
- \mathbf{H} 是一个 3 \times 3 的变换矩阵。
- w 是归一化因子,w = h_{31}x + h_{32}y + h_{33}。
特性 :
- 可以实现更复杂的视角和深度变化,如透视畸变。
- 平行线在射影变换下可能不再保持平行。
- 常用于计算机视觉中的相机标定、图像配准和3D重建。
应用
- 相似变换 用于需要保持形状和比例不变的情况,如在模板匹配和物体识别中。
- 仿射变换 广泛应用于图像编辑、动画制作和图像校正,其中形状的变形是可接受的。
- 射影变换 用于视觉效果的创建、图像矫正和3D图像处理,能够模拟从不同角度看相同场景时的视觉效果。
这些变换提供了强大的工具来处理空间中的图像和几何对象,使得它们在多个领域都有着重要的应用价值。
