Homogeneous Transformation(齐次变换) 是计算机视觉、机器人学和图形学中常用的数学工具,用于描述物体在空间中的平移、旋转、缩放等操作。它将这些操作统一表示为一个矩阵乘法操作,使得多个变换可以通过矩阵相乘来组合。
齐次变换概念
齐次变换的核心思想是将三维(或二维)空间中的点表示为四维(或三维)向量,然后使用 4x4(或 3x3)矩阵来表示变换。这种表示方式的好处在于,可以将平移、旋转、缩放等线性变换统一起来,并且可以轻松地进行组合。
齐次坐标
在二维空间中,一个点通常表示为
(
x
,
y
)
(x, y)
(x,y),将其转换为齐次坐标表示时,会增加一个附加分量,通常为 1:
p
=
[
x
y
1
]
p=\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
p=
xy1
在三维空间中,一个点的齐次坐标可以表示为:
p
=
[
x
y
z
1
]
p=\begin{bmatrix} x \\ y \\ z\\ 1 \end{bmatrix}
p=
xyz1
齐次变换矩阵
齐次变换矩阵包含了旋转矩阵和平移向量,能够同时表示平移的旋转操作:
T
=
[
R
t
0
T
1
]
\mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ \mathbf{0}^T & 1 \end{bmatrix}
T=[R0Tt1]
- R \mathbf{R} R: 3x3 旋转矩阵,表示在三维空间中的旋转。
- t \mathbf{t} t: 3x1 平移向量,表示在三维空间中的平移。
- 0 \mathbf{0} 0: 3x1 的零向量。
- 1 1 1: 标量,用于保持矩阵的尺寸一致。
在二维空间中,齐次变换矩阵通常是 3x3 矩阵:
T = [ cos θ − sin θ t x sin θ cos θ t y 0 0 1 ] \mathbf{T} = \begin{bmatrix} \cos\theta & -\sin\theta & t_x \\ \sin\theta & \cos\theta & t_y \\ 0 & 0 & 1 \end{bmatrix} T= cosθsinθ0−sinθcosθ0txty1
在三维空间中,齐次变换矩阵通常是一个 4x4 矩阵。它同时包含旋转矩阵和平移向量,用于表示三维空间中的平移和旋转操作:
T = [ R t 0 T 1 ] \mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ \mathbf{0}^T & 1 \end{bmatrix} T=[R0Tt1]
- R \mathbf{R} R: 3x3 旋转矩阵,用于表示三维空间中的旋转。
- t \mathbf{t} t: 3x1 平移向量,用于表示三维空间中的平移。
- 0 \mathbf{0} 0: 3x1 的零向量。
- 1 1 1: 标量,用于保持矩阵的尺寸一致。
其中,
-
绕 (x) 轴旋转:
R x ( θ ) = [ 1 0 0 0 cos θ − sin θ 0 sin θ cos θ ] R_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix} Rx(θ)= 1000cosθsinθ0−sinθ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θ0−sinθ010sinθ0cosθ
-
绕 (z) 轴旋转:
R z ( θ ) = [ cos θ − sin θ 0 sin θ cos θ 0 0 0 1 ] R_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)= cosθsinθ0−sinθcosθ0001
如果物体在三维空间中同时绕 𝑥轴、𝑦轴和 𝑧轴旋转,综合旋转矩阵可以表示为这些基本旋转矩阵的乘积。注意,矩阵乘法的顺序很重要,通常先绕 𝑧轴,再绕 𝑦轴,最后绕 𝑥轴进行旋转:
R ( α , β , γ ) = R z ( γ ) R y ( β ) R x ( α ) R(\alpha, \beta, \gamma) = R_z(\gamma)R_y(\beta)R_x(\alpha) R(α,β,γ)=Rz(γ)Ry(β)Rx(α)
R ( α , β , γ ) = [ cos β cos γ cos γ sin α sin β − cos α sin γ cos α cos γ sin β + sin α sin γ cos β sin γ cos α cos γ + sin α sin β sin γ − cos γ sin α + cos α sin β sin γ − sin β cos β sin α cos α cos β ] R(\alpha, \beta, \gamma) = \begin{bmatrix} \cos\beta \cos\gamma & \cos\gamma \sin\alpha \sin\beta - \cos\alpha \sin\gamma & \cos\alpha \cos\gamma \sin\beta + \sin\alpha \sin\gamma \\ \cos\beta \sin\gamma & \cos\alpha \cos\gamma + \sin\alpha \sin\beta \sin\gamma & -\cos\gamma \sin\alpha + \cos\alpha \sin\beta \sin\gamma \\ -\sin\beta & \cos\beta \sin\alpha & \cos\alpha \cos\beta \end{bmatrix} R(α,β,γ)= cosβcosγcosβsinγ−sinβcosγsinαsinβ−cosαsinγcosαcosγ+sinαsinβsinγcosβsinαcosαcosγsinβ+sinαsinγ−cosγsinα+cosαsinβsinγcosαcosβ
齐次变换矩阵可以将三维空间中的一个点 p = [ x , y , z ] T \mathbf{p} = [x, y, z]^T p=[x,y,z]T转换到新的坐标系中:
p ′ = T ⋅ [ x y z 1 ] \mathbf{p}' = \mathbf{T} \cdot \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} p′=T⋅ xyz1
其中, p ′ = [ x ′ , y ′ , z ′ ] T \mathbf{p}' = [x', y', z']^T p′=[x′,y′,z′]T表示变换后的新坐标。
齐次变换的应用
假设我们有一个机器人,它在地球坐标系中的位置为 ( x 0 , y 0 , z 0 ) = ( 5 , 10 , 0 ) (x_0, y_0, z_0) = (5, 10, 0) (x0,y0,z0)=(5,10,0),并且它绕 $z $ 轴旋转了 90 度( θ = 9 0 ∘ \theta = 90^\circ θ=90∘)。
- 齐次变换矩阵
旋转矩阵 R z ( θ ) R_z(\theta) Rz(θ) 和平移向量 t t t 如下:
R z ( π 2 ) = [ 0 − 1 0 1 0 0 0 0 1 ] , t = [ 5 10 0 ] R_z\left(\frac{\pi}{2}\right) = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix}, \quad \mathbf{t} = \begin{bmatrix} 5 \\ 10 \\ 0 \end{bmatrix} Rz(2π)= 010−100001 ,t= 5100
齐次变换矩阵 T T T 是:
T = [ 0 − 1 0 5 1 0 0 10 0 0 1 0 0 0 0 1 ] \mathbf{T} = \begin{bmatrix} 0 & -1 & 0 & 5 \\ 1 & 0 & 0 & 10 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} T= 0100−1000001051001
- 转换点的坐标
假设机器人坐标系中的点为 ( x r , y r , z r ) = ( 1 , 2 , 0 ) (x_r, y_r, z_r) = (1, 2, 0) (xr,yr,zr)=(1,2,0),表示为齐次坐标:
p r o b o t = [ 1 2 0 1 ] \mathbf{p}_{robot} = \begin{bmatrix} 1 \\ 2 \\ 0 \\ 1 \end{bmatrix} probot= 1201
将该点转换到地球坐标系中:
p w o r l d = T ⋅ p r o b o t = [ 3 11 0 1 ] \mathbf{p}_{world} = \mathbf{T} \cdot \mathbf{p}_{robot} = \begin{bmatrix} 3 \\ 11 \\ 0 \\ 1 \end{bmatrix} pworld=T⋅probot= 31101
因此,机器人坐标系中的点 ( 1 , 2 , 0 ) (1, 2, 0) (1,2,0)在地球坐标系中的位置为 ( 3 , 11 , 0 ) (3, 11, 0) (3,11,0)。