本文由CSDN点云侠原创,首发于:2021年9月4日。博客长期更新,本文最新更新时间为:2025年6月28日。
目录
一、齐次变换
1.算法原理
见:相关链接
2.软件实现
Apply inverse transformation
:使用逆变换
可通过输入4X4变换矩阵实现齐次欧式变换和仿射变换。
3.结果展示
二、轴角变换
1.算法原理
轴角表示法使用旋转轴 u = ( u x , u y , u z ) \mathbf{u} = (u_x, u_y, u_z) u=(ux,uy,uz)(单位向量)和旋转角 θ \theta θ 描述旋转。将其转换为欧拉角(以Z-Y-X顺序为例)需要两个关键步骤:
-
轴角→旋转矩阵(Rodrigues公式):
R = I + sin θ ⋅ [ u ] × + ( 1 − cos θ ) ⋅ [ u ] × 2 R = \mathbf{I} + \sin\theta \cdot [\mathbf{u}]_\times + (1 - \cos\theta) \cdot [\mathbf{u}]_\times^2 R=I+sinθ⋅[u]×+(1−cosθ)⋅[u]×2
其中 [ u ] × [\mathbf{u}]_\times [u]× 是旋转轴的反对称矩阵:
[ u ] × = [ 0 − u z u y u z 0 − u x − u y u x 0 ] [\mathbf{u}]_\times = \begin{bmatrix} 0 & -u_z & u_y \\ u_z & 0 & -u_x \\ -u_y & u_x & 0 \end{bmatrix} [u]×= 0uz−uy−uz0uxuy−ux0 -
旋转矩阵→欧拉角(Z-Y-X顺序):
旋转矩阵元素与欧拉角 ( α , β , γ ) (\alpha, \beta, \gamma) (α,β,γ) 的关系:
R = [ cos β cos γ sin α sin β cos γ − cos α sin γ cos α sin β cos γ + sin α sin γ cos β sin γ sin α sin β sin γ + cos α cos γ cos α sin β sin γ − sin α cos γ − sin β sin α cos β cos α cos β ] R = \begin{bmatrix} \cos\beta\cos\gamma & \sin\alpha\sin\beta\cos\gamma - \cos\alpha\sin\gamma & \cos\alpha\sin\beta\cos\gamma + \sin\alpha\sin\gamma \\ \cos\beta\sin\gamma & \sin\alpha\sin\beta\sin\gamma + \cos\alpha\cos\gamma & \cos\alpha\sin\beta\sin\gamma - \sin\alpha\cos\gamma \\ -\sin\beta & \sin\alpha\cos\beta & \cos\alpha\cos\beta \end{bmatrix} R= cosβcosγcosβsinγ−sinβsinαsinβcosγ−cosαsinγsinαsinβsinγ+cosαcosγsinαcosβcosαsinβcosγ+sinαsinγcosαsinβsinγ−sinαcosγcosαcosβ
求解欧拉角:
{ β = arcsin ( − R 20 ) α = arctan 2 ( R 21 / cos β , R 22 / cos β ) γ = arctan 2 ( R 10 / cos β , R 00 / cos β ) \begin{cases} \beta = \arcsin(-R_{20}) \\ \alpha = \arctan2(R_{21}/\cos\beta, R_{22}/\cos\beta) \\ \gamma = \arctan2(R_{10}/\cos\beta, R_{00}/\cos\beta) \end{cases} ⎩ ⎨ ⎧β=arcsin(−R20)α=arctan2(R21/cosβ,R22/cosβ)γ=arctan2(R10/cosβ,R00/cosβ)
特殊情况处理:
- 万向节死锁:当
β
=
±
π
/
2
\beta = \pm \pi/2
β=±π/2 时,
cos
β
=
0
\cos\beta = 0
cosβ=0,需特殊处理:
{ γ = 0 α = arctan 2 ( − R 02 , R 11 ) \begin{cases} \gamma = 0 \\ \alpha = \arctan2(-R_{02}, R_{11}) \end{cases} {γ=0α=arctan2(−R02,R11) - 数值稳定性:当 ∣ cos β ∣ < ϵ |\cos\beta| < \epsilon ∣cosβ∣<ϵ 时启用死锁处理
2.软件实现
Rotation axis
:旋转轴Rotation angle
:旋转角度,(角度制)Translation
:平移量
3.结果展示
可以看出,默认情况下是按照逆时针旋转的。
三、欧拉变换
1.算法原理
1.1 空间平移变换
假设空间中点
P
P
P的初始坐标为
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),经过平移后的位置坐标为
(
x
′
,
y
′
,
z
′
)
(x',y',z')
(x′,y′,z′),
(
t
x
,
t
y
,
t
z
)
(t_x,t_y,t_z)
(tx,ty,tz)
是点
P
P
P在空间的平移向量,则有
1.2 空间旋转变换
空间旋转变换要按照不同旋转轴线分情况处理,我们以右手坐标系为准,且以正对坐标轴的正方向来看,记逆时针转动时旋转角为正、顺时针转动时为负。下图分别展示了坐标系绕各轴旋转的示意图。
以图(a)为例,坐标系绕
Z
Z
Z 轴旋转
γ
γ
γ 得到新的坐标系
O
X
′
Y
′
Z
′
OX'Y'Z'
OX′Y′Z′ ,点
p
p
p 在初始和转换后的坐标系下的位置分别为
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)、
(
x
′
,
y
′
,
z
′
)
(x',y',z')
(x′,y′,z′)。则有
2.软件实现
Euler angles
:欧拉角Translation
:平移量
3.结果展示
四、缩放
1.算法原理
2.软件实现
Scale
:缩放量以及绕哪个轴缩放。Sample scale for all dimensions
:是否在每个方向上使用统一的缩放系数。
五、相互转换
可以实现齐次变换、欧拉变换、轴角变换之间的相互转换。比如,绕Z轴逆时针旋转90°
直接就在Matrix 4X4中生成用变换矩阵表示绕Z轴旋转90°的形式。
六、相关链接
[1] PCL 点云变换
[2] PCL 欧式变换,实现点云坐标变换
[3] PCL 仿射变换,实现点云平移旋转
[4] Eigen(几何模块)——常用相互转换
[5] Open3D 点云变换
[6] Open3D 四元数、欧拉角、旋转向量转旋转矩阵
[7] python 欧拉角、四元数、旋转矩阵的相互转换