【机器人-基础知识】欧拉角、旋转矩阵和四元数

article/2025/8/11 15:31:41

文章目录

  • 1. 欧拉角
    • 1.1. 欧拉角的定义
    • 1.2. 欧拉角的公式
    • 1.3. 欧拉角的常见问题
  • 2. 旋转矩阵
    • 2.1. 旋转矩阵的定义
    • 2.2. 常见旋转矩阵的公式
      • 1. 二维旋转矩阵
      • 2. 三维旋转矩阵
    • 2.3. 旋转矩阵的示例
      • 1. 二维示例
      • 2. 三维示例
    • 2.4. 旋转矩阵的问题
  • 3. 四元数
    • 3.1. 四元数的定义
    • 3.2. 四元数的运算
      • 1. 加法与标量乘法
      • 2. 乘法
    • 3.3. 四元数在旋转变换中的应用
      • 1. 旋转表示
      • 2. 旋转操作
      • 3. 旋转的组合与插值
      • 4. 相比旋转矩阵的计算效率高
      • 5. 单位四元数的意义
  • 4. 四元数、旋转矩阵和变换矩阵
      • 1. 四元数 -> 旋转矩阵
      • 2. 旋转矩阵 -> 四元数
      • 3. 旋转矩阵 -> 变换矩阵
      • 4. 变换矩阵 -> 旋转矩阵
  • 5. 变换矩阵的解析
    • 5.1. 变换矩阵的示例
    • 5.2. 变换矩阵的意义

1. 欧拉角

在这里插入图片描述

1.1. 欧拉角的定义

欧拉角是一组三个角度,用于描述一个刚体在三维空间中的定向关系。具体来说,它们表示从一个固定参考坐标系到刚体坐标系的一系列旋转。常见的定义方式是将总体旋转分解为三个连续的简单旋转,每次旋转都绕着当前坐标系的某一固定轴进行。

例如,一种常用的欧拉角序列是 Z–Y–X(或称为航向、俯仰、滚转顺序),其含义如下:

  • Yaw 第一个旋转(航向/偏航):绕固定坐标系的 Z 轴旋转角度 ψ \psi ψ
  • Pitch 第二个旋转(俯仰):绕新坐标系的 Y 轴旋转角度 θ \theta θ
  • Roll 第三个旋转(滚转):绕再次更新后的 X 轴旋转角度 ϕ \phi ϕ

这种分解使得三维旋转问题转化为三个独立旋转角度的叠加。

1.2. 欧拉角的公式

以 Z–Y–X 顺序为例,刚体总旋转矩阵 R R R 可以写成三个旋转矩阵的乘积:

R = R x ( ϕ ) R y ( θ ) R z ( ψ ) R = R_x(\phi) \; R_y(\theta) \; R_z(\psi) R=Rx(ϕ)Ry(θ)Rz(ψ)

其中:

  • 绕 X 轴旋转的矩阵:

    R x ( ϕ ) = [ 1 0 0 0 cos ⁡ ϕ − sin ⁡ ϕ 0 sin ⁡ ϕ cos ⁡ ϕ ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)= 1000cosϕsinϕ0sinϕcosϕ

  • 绕 Y 轴旋转的矩阵:

    R y ( θ ) = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)= cosθ0sinθ010sinθ0cosθ

  • 绕 Z 轴旋转的矩阵:

    R z ( ψ ) = [ cos ⁡ ψ − sin ⁡ ψ 0 sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)= cosψsinψ0sinψcosψ0001

将上述三个矩阵依次相乘,就可以得到描述刚体最终定向的旋转矩阵 R R R

1.3. 欧拉角的常见问题

在使用欧拉角描述旋转时,需要注意以下问题:

  1. 万向锁(Gimbal Lock)
    以常见的ZYX欧拉角为例,即首先绕全局z轴旋转,然后绕新的y轴旋转,最后绕新的x轴旋转。当第二次旋转(即绕y轴的旋转)旋转角(例如上例中的 θ \theta θ)达到 ± 9 0 ∘ \pm90^\circ ±90 时。
    第一次和第三次旋转将会围绕同一个轴。这意味着,在这些特殊的角度下,系统失去了一个自由度,因为两次旋转现在作用于相同的轴,不能独立地控制物体的方向。

  2. 多值性与奇异性
    欧拉角存在多值性,即不同的角度组合可能表示相同的旋转。此外,某些角度组合可能使反求公式退化,导致奇异性问题,增加了数值计算的复杂性。

2. 旋转矩阵

2.1. 旋转矩阵的定义

旋转矩阵是一种用于描述刚体或坐标系在欧几里得空间中旋转变换的矩阵。其主要特点包括:

  • 正交性:旋转矩阵 R R R 满足 R T R = I R^T R = I RTR=I,其中 R T R^T RT R R R 的转置, I I I 为单位矩阵。这一性质保证了向量的长度和旋转前后向量间的夹角不变。
  • 行列式为1:即 det ⁡ ( R ) = 1 \det(R) = 1 det(R)=1,这一性质表明旋转矩阵不含有镜像或反射分量。
  • 参数冗余性:在三维空间中,尽管旋转矩阵有 9 个元素,但由于正交性和行列式约束,其实际自由度仅为 3 个。

2.2. 常见旋转矩阵的公式

1. 二维旋转矩阵

在二维平面上,绕原点逆时针旋转角度 θ \theta θ 的旋转矩阵为:
R ( θ ) = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} R(θ)=[cosθsinθsinθcosθ]

2. 三维旋转矩阵

在三维空间中,常用的旋转矩阵包括绕各个坐标轴旋转的矩阵:

  • 绕 X 轴旋转角度 ϕ \phi ϕ 的矩阵

    R x ( ϕ ) = [ 1 0 0 0 cos ⁡ ϕ − sin ⁡ ϕ 0 sin ⁡ ϕ cos ⁡ ϕ ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)= 1000cosϕsinϕ0sinϕcosϕ

  • 绕 Y 轴旋转角度 θ \theta θ 的矩阵

    R y ( θ ) = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)= cosθ0sinθ010sinθ0cosθ

  • 绕 Z 轴旋转角度 ψ \psi ψ 的矩阵

    R z ( ψ ) = [ cos ⁡ ψ − sin ⁡ ψ 0 sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)= cosψsinψ0sinψcosψ0001

2.3. 旋转矩阵的示例

1. 二维示例

设有一个二维向量 v = [ 1 0 ] \mathbf{v} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} v=[10],我们希望将它逆时针旋转 9 0 ∘ 90^\circ 90(即 θ = π 2 \theta = \frac{\pi}{2} θ=2π)。

对应的旋转矩阵为:

R ( π 2 ) = [ cos ⁡ π 2 − sin ⁡ π 2 sin ⁡ π 2 cos ⁡ π 2 ] = [ 0 − 1 1 0 ] R\left(\frac{\pi}{2}\right) = \begin{bmatrix} \cos\frac{\pi}{2} & -\sin\frac{\pi}{2} \\ \sin\frac{\pi}{2} & \cos\frac{\pi}{2} \end{bmatrix} = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} R(2π)=[cos2πsin2πsin2πcos2π]=[0110]

计算变换后的向量:

v ′ = R ( π 2 ) v = [ 0 − 1 1 0 ] [ 1 0 ] = [ 0 1 ] \mathbf{v}' = R\left(\frac{\pi}{2}\right) \mathbf{v} = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} v=R(2π)v=[0110][10]=[01]

这表明向量 v \mathbf{v} v 被成功旋转到 ( 0 , 1 ) (0,1) (0,1) 的位置。

2. 三维示例

考虑在三维空间中,绕 Z 轴旋转 9 0 ∘ 90^\circ 90 的情况。旋转矩阵为:

R z ( π 2 ) = [ cos ⁡ π 2 − sin ⁡ π 2 0 sin ⁡ π 2 cos ⁡ π 2 0 0 0 1 ] = [ 0 − 1 0 1 0 0 0 0 1 ] R_z\left(\frac{\pi}{2}\right) = \begin{bmatrix} \cos\frac{\pi}{2} & -\sin\frac{\pi}{2} & 0 \\ \sin\frac{\pi}{2} & \cos\frac{\pi}{2} & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(2π)= cos2πsin2π0sin2πcos2π0001 = 010100001

对向量 v = [ 1 0 0 ] \mathbf{v} = \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix} v= 100 进行变换,得到:

v ′ = R z ( π 2 ) v = [ 0 − 1 0 1 0 0 0 0 1 ] [ 1 0 0 ] = [ 0 1 0 ] \mathbf{v}' = R_z\left(\frac{\pi}{2}\right) \mathbf{v} = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix} v=Rz(2π)v= 010100001 100 = 010

这样,原本沿 X 轴的向量被旋转到 Y 轴方向。

2.4. 旋转矩阵的问题

  1. 数值稳定性
    在计算机中进行数值运算时,由于舍入误差,得到的旋转矩阵可能不再严格满足正交性(即 R T R R^T R RTR 不完全等于 I I I),这会引起累积误差。为解决这一问题,通常需要使用正交化算法(如 Gram-Schmidt 或 SVD 方法)对矩阵进行修正。

  2. 冗余参数
    在三维空间中,旋转矩阵有 9 个元素,但实际只有 3 个自由度。这种冗余性在一些优化问题和数据融合算法中可能增加额外的计算复杂度。

  3. 直观性不足
    虽然旋转矩阵在数学上精确且易于组合(例如多个旋转矩阵相乘可以得到总体旋转),但其 9 个元素之间的关系较难直观理解和解释。在需要直观展示旋转状态(例如动画、用户界面设计)时,欧拉角或四元数可能更为直观。

  4. 从旋转矩阵到其他表示的转换问题
    将旋转矩阵转换为欧拉角或轴—角表示时,可能会遇到奇异性问题(例如万向锁现象),导致数值计算不稳定或多值性问题。特别是在旋转角接近特定值(如 ± 9 0 ∘ \pm90^\circ ±90)时,反求过程可能会出现退化情况。

3. 四元数

3.1. 四元数的定义

一个四元数通常表示为

q = w + x i + y j + z k q = w + x\,i + y\,j + z\,k q=w+xi+yj+zk

其中, w , x , y , z w, x, y, z w,x,y,z 均为实数,而 i , j , k i, j, k i,j,k 是满足以下乘法规则的虚数单位:

i 2 = j 2 = k 2 = i j k = − 1 i^2 = j^2 = k^2 = ijk = -1 i2=j2=k2=ijk=1

并且具有以下非交换性(例如: i j = k ij = k ij=k,但 j i = − k ji = -k ji=k)。四元数构成一个四维实向量空间,是一个非交换的除环,常用于描述三维空间的旋转。

3.2. 四元数的运算

1. 加法与标量乘法

  • 加法:两个四元数按各个分量相加
    q 1 + q 2 = ( w 1 + w 2 ) + ( x 1 + x 2 ) i + ( y 1 + y 2 ) j + ( z 1 + z 2 ) k q_1 + q_2 = (w_1 + w_2) + (x_1 + x_2)i + (y_1 + y_2)j + (z_1 + z_2)k q1+q2=(w1+w2)+(x1+x2)i+(y1+y2)j+(z1+z2)k
  • 标量乘法:对四元数的每个分量乘以一个实数 λ \lambda λ
    λ q = λ w + λ x i + λ y j + λ z k \lambda q = \lambda w + \lambda x\,i + \lambda y\,j + \lambda z\,k λq=λw+λxi+λyj+λzk

2. 乘法

给定两个四元数

q 1 = w 1 + x 1 i + y 1 j + z 1 k , q 2 = w 2 + x 2 i + y 2 j + z 2 k , q_1 = w_1 + x_1\,i + y_1\,j + z_1\,k,\quad q_2 = w_2 + x_2\,i + y_2\,j + z_2\,k, q1=w1+x1i+y1j+z1k,q2=w2+x2i+y2j+z2k,

它们的乘积 q = q 1 q 2 q = q_1q_2 q=q1q2 可以写成

q = ( w 1 w 2 − x 1 x 2 − y 1 y 2 − z 1 z 2 ) + ( w 1 x 2 + x 1 w 2 + y 1 z 2 − z 1 y 2 ) i + ( w 1 y 2 − x 1 z 2 + y 1 w 2 + z 1 x 2 ) j + ( w 1 z 2 + x 1 y 2 − y 1 x 2 + z 1 w 2 ) k . \begin{aligned} q =\,& (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. \end{aligned} q=(w1w2x1x2y1y2z1z2)+(w1x2+x1w2+y1z2z1y2)i+(w1y2x1z2+y1w2+z1x2)j+(w1z2+x1y2y1x2+z1w2)k.

注意,四元数乘法满足结合律和分配律,但不满足交换律。

3.3. 四元数在旋转变换中的应用

在三维旋转表示中避免欧拉角的万向锁问题,同时在旋转插值(如 Slerp)中表现良好。

1. 旋转表示

一个单位四元数可用于表示三维空间中的旋转。设旋转轴为单位向量 n = ( n x , n y , n z ) \mathbf{n} = (n_x, n_y, n_z) n=(nx,ny,nz),旋转角度为 θ \theta θ,对应的单位四元数为

q = cos ⁡ θ 2 + sin ⁡ θ 2 ( n x i + n y j + n z k ) . q = \cos\frac{\theta}{2} + \sin\frac{\theta}{2}(n_x\,i + n_y\,j + n_z\,k). q=cos2θ+sin2θ(nxi+nyj+nzk).

2. 旋转操作

给定一个需要旋转的三维向量 v \mathbf{v} v(将其表示为纯四元数,即实部为 0: v = 0 + v x i + v y j + v z k v = 0 + v_x\,i + v_y\,j + v_z\,k v=0+vxi+vyj+vzk),通过四元数进行旋转的公式为

v ′ = q v q − 1 , v' = q\, v\, q^{-1}, v=qvq1,

其中 v ′ v' v 为旋转后的四元数,对应的向量部分即为旋转后的三维向量。通过这种方式,可以将旋转变换高效地应用到向量上。

3. 旋转的组合与插值

  • 组合旋转:多个旋转可以通过四元数乘法进行组合。若有两个旋转分别对应的单位四元数 q 1 q_1 q1 q 2 q_2 q2,则先后执行这两个旋转的总体旋转由 q = q 2 q 1 q = q_2q_1 q=q2q1 表示(注意乘法的顺序)。
  • 旋转插值(Slerp):四元数还可以用于球面线性插值(Spherical Linear Interpolation),这在计算机图形学和动画中用于平滑过渡旋转。

4. 相比旋转矩阵的计算效率高

当使用旋转矩阵进行连续旋转时,通常需要进行多次矩阵乘法。每次矩阵乘法涉及大量的浮点运算,对于3x3矩阵而言,这通常意味着27次乘法和18次加法。相比之下,四元数的乘法仅需要16次乘法和12次加法,减少了计算量。

5. 单位四元数的意义

  • 单位四元数用于表示纯旋转,但非单位四元数可以用来表示带有缩放因子的旋转。
  • 在实际应用中,如果需要将非单位四元数转换为单位四元数(比如用于表示旋转),通常需要对其进行归一化处理,即将其除以自身的模长,使其成为一个单位四元数

4. 四元数、旋转矩阵和变换矩阵

1. 四元数 -> 旋转矩阵

给定一个单位四元数
q = w + x i + y j + z k , q = w + x\,i + y\,j + z\,k, q=w+xi+yj+zk,
其对应的旋转矩阵 R R R(通常用于右手坐标系)可写为

R = [ 1 − 2 ( y 2 + z 2 ) 2 ( x y − w z ) 2 ( x z + w y ) 2 ( x y + w z ) 1 − 2 ( x 2 + z 2 ) 2 ( y z − w x ) 2 ( x z − w y ) 2 ( y z + w x ) 1 − 2 ( x 2 + y 2 ) ] . R = \begin{bmatrix} 1-2(y^2+z^2) & 2(xy-wz) & 2(xz+wy) \\ 2(xy+wz) & 1-2(x^2+z^2) & 2(yz-wx) \\ 2(xz-wy) & 2(yz+wx) & 1-2(x^2+y^2) \end{bmatrix}. R= 12(y2+z2)2(xy+wz)2(xzwy)2(xywz)12(x2+z2)2(yz+wx)2(xz+wy)2(yzwx)12(x2+y2) .

2. 旋转矩阵 -> 四元数

设旋转矩阵为

R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] . R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix}. R= r11r21r31r12r22r32r13r23r33 .

已知旋转矩阵 R R R 后,可以通过矩阵的迹(trace)[矩阵的对角线元素之和] 来恢复对应的四元数。一种常用方法如下:

  1. 计算迹: t r ( R ) = r 11 + r 22 + r 33 . \mathrm{tr}(R) = r_{11}+r_{22}+r_{33}. tr(R)=r11+r22+r33.
  2. t r ( R ) > 0 , \mathrm{tr}(R) > 0, tr(R)>0, 则令
    w = 1 2 1 + t r ( R ) , w = \frac{1}{2}\sqrt{1+\mathrm{tr}(R)}, w=211+tr(R) ,
    并用下面的公式求其它分量:
    x = r 32 − r 23 4 w , y = r 13 − r 31 4 w , z = r 21 − r 12 4 w . x = \frac{r_{32}-r_{23}}{4w},\quad y = \frac{r_{13}-r_{31}}{4w},\quad z = \frac{r_{21}-r_{12}}{4w}. x=4wr32r23,y=4wr13r31,z=4wr21r12.
  3. 否则,当旋转矩阵的迹 t r ( R ) ≤ 0 \mathrm{tr}(R) \le 0 tr(R)0 时,根据矩阵对角线元素的大小,选择最大的那个来计算四元数的分量。
    • 如果 r 11 r_{11} r11 是最大的对角元素:
      x = 1 2 1 + r 11 − r 22 − r 33 , x = \frac{1}{2}\sqrt{1 + r_{11} - r_{22} - r_{33}}, x=211+r11r22r33 ,
      然后计算:
      w = r 32 − r 23 4 x , y = r 12 + r 21 4 x , z = r 13 + r 31 4 x . w = \frac{r_{32} - r_{23}}{4x},\quad y = \frac{r_{12} + r_{21}}{4x},\quad z = \frac{r_{13} + r_{31}}{4x}. w=4xr32r23,y=4xr12+r21,z=4xr13+r31.

    • 如果 r 22 r_{22} r22 是最大的对角元素:
      y = 1 2 1 + r 22 − r 11 − r 33 , y = \frac{1}{2}\sqrt{1 + r_{22} - r_{11} - r_{33}}, y=211+r22r11r33 ,
      然后计算:
      w = r 13 − r 31 4 y , x = r 12 + r 21 4 y , z = r 23 + r 32 4 y . w = \frac{r_{13} - r_{31}}{4y},\quad x = \frac{r_{12} + r_{21}}{4y},\quad z = \frac{r_{23} + r_{32}}{4y}. w=4yr13r31,x=4yr12+r21,z=4yr23+r32.

    • 如果 r 33 r_{33} r33 是最大的对角元素:
      z = 1 2 1 + r 33 − r 11 − r 22 , z = \frac{1}{2}\sqrt{1 + r_{33} - r_{11} - r_{22}}, z=211+r33r11r22 ,
      然后计算:
      w = r 21 − r 12 4 z , x = r 13 + r 31 4 z , y = r 23 + r 32 4 z . w = \frac{r_{21} - r_{12}}{4z},\quad x = \frac{r_{13} + r_{31}}{4z},\quad y = \frac{r_{23} + r_{32}}{4z}. w=4zr21r12,x=4zr13+r31,y=4zr23+r32.

这些分支确保了当迹小于等于零时,能够避免数值不稳定问题,并正确提取出最大的旋转分量,从而稳定地计算出四元数。

3. 旋转矩阵 -> 变换矩阵

在齐次坐标下,三维变换矩阵通常是 4 × 4 4\times4 4×4 的,其形式为

T = [ R t 0 T 1 ] , T = \begin{bmatrix} R & \mathbf{t} \\ \mathbf{0}^T & 1 \end{bmatrix}, T=[R0Tt1],

其中:

  • R R R 3 × 3 3\times3 3×3 的旋转矩阵;
  • t = [ t x t y t z ] \mathbf{t} = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix} t= txtytz 为平移向量;
  • 下排 0 T = [ 0 0 0 ] \mathbf{0}^T = [0\quad 0\quad 0] 0T=[000]

4. 变换矩阵 -> 旋转矩阵

若给定变换矩阵 T T T,只需取出左上角 3 × 3 3\times3 3×3 部分,即为旋转矩阵 R R R

R = T ( 1 : 3 , 1 : 3 ) . R = T(1:3,1:3). R=T(1:3,1:3).

5. 变换矩阵的解析

5.1. 变换矩阵的示例

当坐标系A沿 x轴正方向平移1y轴正方向平移2z轴正方向平移3 时,B到A的变换矩阵为:
T B → A = [ 1 0 0 1 0 1 0 2 0 0 1 3 0 0 0 1 ] T_{B \to A} = \begin{bmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} TBA= 1000010000101231
B坐标系的点可以通过 B到A的变换矩阵 T B → A T_{B \to A} TBA得到在A坐标系的表达
P A = T B → A P B P_A = T_{B \to A} P_B PA=TBAPB
T B → A T_{B \to A} TBA求逆得到A到B的变换矩阵为:
T A → B = [ 1 0 0 − 1 0 1 0 − 2 0 0 1 − 3 0 0 0 1 ] T_{A \to B} = \begin{bmatrix} 1 & 0 & 0 & -1 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -3 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} TAB= 1000010000101231
P B = T A → B P A P_B = T_{A \to B} P_A PB=TABPA
例如,将A的原点(0,0,0)带入得到 其在B坐标系的坐标是(-1,-2,-3)

5.2. 变换矩阵的意义

以相机坐标系到世界坐标系的变换矩阵 T c 2 w T_{c2w} Tc2w 为例,其核心作用是描述相机坐标系相对于世界坐标系的位姿(位置和姿态)。


一、几何描述
变换矩阵 T c 2 w T_{c2w} Tc2w 是一个 4×4 齐次矩阵,由 旋转矩阵 R R R 和 平移向量 t t t 组成:
T c 2 w = [ R t 0 T 1 ] T_{c2w} = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} Tc2w=[R0Tt1]

  • 几何意义:

    1. 旋转矩阵 R R R:描述相机坐标系的坐标轴在世界坐标系中的方向。例如,若相机绕 Z 轴旋转 θ 角,则 R R R 为绕 Z 轴的旋转矩阵。
    2. 平移向量 t t t表示相机坐标系原点在世界坐标系中的位置。
  • 符号惯例: T c 2 w T_{c2w} Tc2w 表示从相机坐标系到世界坐标系的变换,与 T w c T_{wc} Twc(世界到相机的变换)互为逆矩阵。

二、坐标转换
变换矩阵 T c 2 w T_{c2w} Tc2w 可将相机坐标系中的点 P c P_c Pc 转换为世界坐标系中的点 P w P_w Pw P w = T c 2 w ⋅ P c P_w = T_{c2w} \cdot P_c Pw=Tc2wPc
公式推导:

  1. 齐次坐标表示:

    • 相机坐标系中的点 P c = [ X c , Y c , Z c , 1 ] T P_c = [X_c, Y_c, Z_c, 1]^T Pc=[Xc,Yc,Zc,1]T
    • 世界坐标系中的点 P w = [ X w , Y w , Z w , 1 ] T P_w = [X_w, Y_w, Z_w, 1]^T Pw=[Xw,Yw,Zw,1]T
  2. 转换过程:
    [ X w Y w Z w 1 ] = [ R t 0 T 1 ] ⋅ [ X c Y c Z c 1 ] = [ R ⋅ [ X c Y c Z c ] + t 1 ] \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} \cdot \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} = \begin{bmatrix} R \cdot \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} + t \\ 1 \end{bmatrix} XwYwZw1 =[R0Tt1] XcYcZc1 = R XcYcZc +t1

  • 示例:
    若相机坐标系中点 P c = [ 1 , 0 , 0 ] T P_c = [1, 0, 0]^T Pc=[1,0,0]T,则世界坐标系中的坐标为:
    P w = R ⋅ [ 1 , 0 , 0 ] T + t = [ cos ⁡ 45 ° ⋅ 1 + sin ⁡ 45 ° ⋅ 0 0 ⋅ 1 + 1 ⋅ 0 − sin ⁡ 45 ° ⋅ 1 + cos ⁡ 45 ° ⋅ 0 ] + [ 2 0 0 ] = [ cos ⁡ 45 ° + 2 0 − sin ⁡ 45 ° ] P_w = R \cdot [1, 0, 0]^T + t = \begin{bmatrix} \cos45° \cdot 1 + \sin45° \cdot 0 \\ 0 \cdot 1 + 1 \cdot 0 \\ -\sin45° \cdot 1 + \cos45° \cdot 0 \end{bmatrix} + \begin{bmatrix} 2 \\ 0 \\ 0 \end{bmatrix} = \begin{bmatrix} \cos45° + 2 \\ 0 \\ -\sin45° \end{bmatrix} Pw=R[1,0,0]T+t= cos45°1+sin45°001+10sin45°1+cos45°0 + 200 = cos45°+20sin45°

三、运动表示
变换矩阵可描述相机的运动特性,其核心性质包括:

  1. 组合运动:多个变换可通过矩阵乘法组合。
    T c 2 w ( 总 ) = T c 2 w ( 1 ) ⋅ T c 2 w ( 2 ) T_{c2w}^{(总)} = T_{c2w}^{(1)} \cdot T_{c2w}^{(2)} Tc2w()=Tc2w(1)Tc2w(2)

  2. 逆运动:从世界坐标系到相机坐标系的变换为 T w 2 c = T c 2 w − 1 T_{w2c} = T_{c2w}^{-1} Tw2c=Tc2w1,满足:
    T w 2 c = [ R T − R T t 0 T 1 ] T_{w2c} = \begin{bmatrix} R^T & -R^T t \\ 0^T & 1 \end{bmatrix} Tw2c=[RT0TRTt1]

  3. 动态解释:
    • 旋转:相机坐标系的姿态变化(如旋转角度)。

    • 平移:相机坐标系原点的位置偏移。


http://www.hkcw.cn/article/wmAMICGwEh.shtml

相关文章

arcane:Docker 管理的现代 Web 界面

arcane:Docker 管理的现代 Web 界面 arcane Simple and Elegant Docker Management UI written in Typescript and SvelteKit 项目地址: https://gitcode.com/gh_mirrors/arcane2/arcane 项目介绍 在容器化技术日益普及的今天,Docker 已经成为开…

对话肖风博士(上):美元稳定币立法是技术创新的胜利,但影响将非常复杂

【导言】随着美国参议院通过美元稳定币法案的投票动议,以及香港立法会通过港元稳定币条例草案,稳定币快速成为最热门的行业话题,并且吸引了更广泛的关注。人们普遍预期,随着美元稳定币法案的落地,区块链数字经济将迎来…

极氪能源三方桩规模突破130万枪 构建全域充电生态

5月30日,极氪能源宣布其接入的第三方充电桩规模已突破130万枪。这一成就源于极氪能源与近50家主流运营商的合作,形成了战略合作生态。目前,极氪能源三方规模已实现地级行政单位全覆盖,拥有5604座高速站点和7943座超快充站,显著提升了新能源出行效率和用户充电体验。极氪能…

成都通报男子伤人后自伤颈部 警方发布警情详情

新京报讯 5月30日,成都市公安局锦江区分局发布警情通报:编辑 毛天宇责任编辑:0764

清华大学发布李兆杰讣告 沉痛悼念国际法学者

5月29日晚,清华大学法学院发布讣告,沉痛悼念李兆杰教授。李兆杰教授于2025年5月29日在北京因病逝世,享年70岁。李兆杰是汉族,籍贯山东省东明县,1955年出生于吉林省长春市。他曾在北京大学国际法研究所和清华大学法学院任教。作为改革开放以来我国新一代国际法学者中的领军…

SMS凭据管理系统:实现跨平台特权账号安全管理的创新实践

引言:数字化转型中的特权账号管理困境 在数字化转型加速的今天,企业IT架构呈现混合云、多平台、异构数据库并存的复杂态势。据Gartner统计,超过75%的数据泄露事件与特权账号滥用相关,而传统静态密码管理方案已无法满足动态安全需…

端午将至民俗体验游热度上升 亲子家庭成出行主力

今年端午节假期恰逢儿童节,亲子家庭成为出行主力军。短途游和民俗体验游热度持续上升。端午节假期旅游市场主要以本地游和周边游为主,微度假与民俗体验相结合的旅游方式受到游客青睐。数据显示,今年端午节假期,周边游预订量同比增长23%,市场整体呈现稳步增长态势,端午民俗…

ResNet改进(44):深度可分离卷积在ResNet50中的应用

1.创新点分析 在深度学习领域,卷积神经网络(CNN)一直是计算机视觉任务的主力架构。 然而,随着模型复杂度的增加,如何在保持性能的同时减少计算量和参数数量成为了一个重要课题。本文将深入解析一个将深度可分离卷积(Depthwise Separable Convolution)应用于ResNet50的Pyth…

2025年 Java 面试八股文(20w字)

> 🍅我是小宋, 一个只熬夜但不秃头的Java程序员。 > 🍅关注我,带你**过面试,读源码**。提升简历亮点(14个demo) > 🍅我的面试集已有12W 浏览量。 > 号:…

《苍穹外卖》电商实战项目(java)知识点整理(P1~P65)【上】

史上最完整的《苍穹外卖》项目实操笔记,跟视频的每一P对应,全系列10万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 《苍穹外卖》项目实操笔记【中】:P66~P…

安装openjdk21

1、官网 官网地址:OpenJDK 下载地址:Archived OpenJDK GA Releases 2、下载openjdk > wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz --2024-12-21 11:40:20--…

创建SpringBoot项目报 错:java: 无效的目标发行版: 18

IDEA 创建SpringBoot项目运行报:java: 无效的目标发行版: 18解决方案 这是由于idea和jdk版本不一致导致的。若是遇到可以修改以下几个内容,使其保持一致即可。 1、点击Maven下的Runner,保证JRE和你的JDK版本一致,如下!图 2、点击Compiler中的…

【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤-初始化项目

🎙告诉你:Java是世界上最美好的语言 💎比较擅长的领域:前端开发 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持续下去的动力! 2025年4月17日进行测试&…

Java 大视界 – Java 大数据在智能安防周界防范系统中的物联网与大数据融合创新(260)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Java集成企业微信API实现高效消息推送实战指南

一、场景概述 企业微信作为企业级协同办公平台,其消息通知能力可无缝集成到内部系统中。本文将通过Java代码示例,详细讲解如何快速对接企业微信API,实现自动化消息推送功能,适用于告警通知、审批提醒等业务场景。 二、前置条件准…

Java:IO流详解

文章目录 基础流1、IO概述1.1 什么是IO1.2 IO的分类1.3 顶级父类们 2、字节流2.1 一切皆为字节2.2 字节输出流 OutputStream2.3 FileOutputStream类2.3.1 构造方法2.3.2 写出字节数据2.3.3 数据追加续写2.3.4 写出换行 2.4 字节输入流 InputStream2.5 FileInputStream类2.5.1 构…

JavaScript新特性structuredClone(),一行代码优化深拷贝策略

目录 JavaScript新特性structuredClone(),一行代码优化深拷贝策略 一、structuredClone()介绍 1、structuredClone()是什么 2、structuredClone()环境支持 3、structuredClone()不会拷贝的内容 4、基础案例 5、structuredClone()的兼容性判断 二、 structur…

两券商IT人员曝出“老鼠仓” 内幕交易长达数年

5月30日,安徽证监局与吉林证监局同日披露罚单,两名券商资深IT人士因违规交易行为受到严厉处罚。安徽证监局罚单显示,时任中信证券信息技术中心高级经理李海鹏因利用未公开信息交易行为被没收违法所得213.14万元,并处以同等金额罚款。吉林证监局对邵某利用未公开信息交易的违…

极氪投资者批评吉利私有化报价过低 早期投资者集体抗议

据知情人士透露,极氪的五位早期投资者认为吉利提出的私有化报价过低,未能反映极氪的真实价值。这五位投资者分别是宁德时代、Intel Capital、博裕资本、哔哩哔哩和Cathay Fortune,它们在极氪的首轮外部融资中参与了投资。这些投资者已经向极氪公司及其评估私有化提议的特别委…

华为配置 之 STP

目录 简介: STP: RSTP: 如何改变根网桥: (1)改变优先级: (2)改变root: 各端口的状态: 总结: 简介: STP(Spanning Tree Protoco…