欢迎光临
我们一直在努力

【智能驾驶:视觉感知后处理 阅读笔记】Day2: 数学基础之欧式变换、欧拉角和四元素

在这里插入图片描述

书籍

在这里插入图片描述

欧式变换

很多同学学数学、学计算机、学深度学习时,总会被一个高频词汇卡住:欧式变换(欧氏变换)。

听起来特别高大上,好像是高深的几何公式,但剥开专业外壳,它的本质超级简单,完全是小白能一秒看懂的常识。

而且这个知识点超级重要:图片旋转、相机拍照、机器人定位、AI特征匹配、游戏建模,底层全靠它撑着。

先记一句话:欧式变换的核心定义

欧式变换 = 不改变形状、不改变大小的空间变换。

就这一句话,搞定80%的知识点。

我们生活在「欧式空间」(最普通、最常规的平直空间),欧式变换就是这个空间里,物体最规矩、最本分的移动方式。

先区分一个核心认知:什么变了?什么没变?

欧式变换中,唯一会变的只有两样:

  • 物体的位置

  • 物体的朝向

欧式变换中,永远不变的所有东西:

  • 物体的长度大小

  • 两条线的夹角

  • 图形的形状

  • 任意两点之间的距离

简单说:东西只是挪了、转了,完全没变形、没缩放、没扭曲,这就是欧式变换。

生活化举例:秒懂欧式变换

举个所有人都能直观感受到的例子:你的手机。

你手里拿着一部长方形的手机:

1. 你把手机从桌子左边,拿到桌子右边 —— 平移

2. 你把手机横着拿、竖着拿、翻转过来 —— 旋转

整个过程里:

手机的长宽没变、四个角的直角没变、机身形状没变、任意两个边角的距离没变。

只有位置和方向变了。

这一整套「平移 + 旋转」的操作,就是完整的欧式变换。

再反向对比,帮你彻底分清:

如果你把手机屏幕拉伸、压扁、放大、扭曲,或者斜着掰变形,这就不是欧式变换了。

欧式变换只包含两种操作(没有第三种)

很多教材讲得很复杂,其实欧式变换归根结底,只有两个基础操作,所有复杂的欧式变换都是二者的组合:

1. 平移:挪位置,不改变方向

物体整体在空间中移动,上下、左右、前后挪动。

没有任何变形,没有角度变化,纯纯换位置。

2. 旋转:改朝向,不挪形变

物体绕着一个点、一个轴转动,面朝的方向变了。

边长、角度、距离全程保持不变。

⚠️ 重点提醒:翻转、镜像严格来说不属于基础欧式变换

核心特质:为什么它叫「保距变换」?

学术上欧式变换还有个名字:保距变换。

大白话翻译:保证距离不变的变换。

这是它最最最核心的本质,也是所有工程、AI用它的原因。

不管物体怎么平移、怎么旋转:

原来相距10cm的两个点,变换后还是10cm;

原来是90°的直角,变换后永远是90°;

原来是等边三角形,变换后永远是等边三角形。

空间结构完全守恒,只有姿态和位置发生改变。

极简数学公式:看懂欧式变换(小白无压力)

前面我们用大白话理解了原理,这一节补上最核心、最简单的数学公式。全程不搞复杂推导,只教你「看懂公式、知道每部分干嘛」。

欧式变换的通用数学定义:由「旋转矩阵 + 平移向量」组成,所有欧式变换都满足这个统一公式。

1. 二维平面欧式变换公式(最常用)

假设平面上任意一个原始点坐标为 (x,y)(x,y)(x,y),经过欧式变换后的新坐标为 (x′,y′)(x',y')(x,y),公式如下:

{x′=xcos⁡θ−ysin⁡θ+txy′=xsin⁡θ+ycos⁡θ+ty\\begin{cases} x' = x\\cos\\theta – y\\sin\\theta + t_x \\\\ y' = x\\sin\\theta + y\\cos\\theta + t_y \\end{cases}{x=xcosθysinθ+txy=xsinθ+ycosθ+ty

也可以写成简洁的矩阵形式(计算机、代码通用格式):

[x′y′]=[cos⁡θ−sin⁡θsin⁡θcos⁡θ][xy]+[txty]\\begin{bmatrix} x' \\\\ y' \\end{bmatrix} = \\begin{bmatrix} \\cos\\theta & -\\sin\\theta \\\\ \\sin\\theta & \\cos\\theta \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\end{bmatrix}[xy]=[cosθsinθsinθcosθ][xy]+[txty]

公式逐部分大白话解读:

  • θ\\thetaθ:物体的旋转角度,负责改变朝向

  • 左侧矩阵:旋转矩阵,核心作用是旋转、且保证图形不变形

  • tx、tyt_x、t_ytxty:平移量,负责让物体上下、左右移动

⚠️ 关键:这个公式里没有缩放、没有拉伸参数,所以永远不会变形,完美对应我们前面说的「保形状、保大小」。

2. 三维空间欧式变换公式(3D/机器人/图形学必备)

我们生活的真实三维空间,欧式变换通用矩阵公式:

P′=RP+t\\boldsymbol{P}' = \\boldsymbol{R}\\boldsymbol{P} + \\boldsymbol{t}P=RP+t

其中:

  • P\\boldsymbol{P}P:原始三维点坐标(x,y,z)(x,y,z)(x,y,z)

  • P′\\boldsymbol{P}'P:变换后新坐标

  • R\\boldsymbol{R}R:3阶旋转矩阵(正交矩阵,核心性质:保距离、保角度)

  • t\\boldsymbol{t}t:三维平移向量 (tx,ty,tz)(t_x,t_y,t_z)(tx,ty,tz)

3. 齐次矩阵写法(工程/代码标准写法)

为了方便计算机计算,会把欧式变换合并成一个4×4齐次矩阵,也是游戏、SLAM、视觉算法的标准公式:

[P′1]=[Rt01][P1]\\begin{bmatrix} \\boldsymbol{P}' \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} \\boldsymbol{R} & \\boldsymbol{t} \\\\ \\boldsymbol{0} & 1 \\end{bmatrix} \\begin{bmatrix} \\boldsymbol{P} \\\\ 1 \\end{bmatrix}[P1]=[R0t1][P1]

数学核心结论(看懂就吃透本质):

只要变换可以写成P′=RP+t\\boldsymbol{P}' = \\boldsymbol{R}\\boldsymbol{P} + \\boldsymbol{t}P=RP+t 这种形式,且 R\\boldsymbol{R}R 是正交旋转矩阵,它就一定是欧式变换,一定满足:距离不变、角度不变、形状不变。

对比区分:一眼看懂各种变换的区别

很多小白分不清:欧式变换、相似变换、仿射变换、投影变换,这里用最简单的逻辑区分,彻底不混淆。

1. 欧式变换(最严格)

只平移、旋转,大小、形状、距离、角度全不变。

2. 相似变换

可以平移、旋转、整体缩放。形状不变,大小变了。

比如把手机缩小成模型手机,形状一样,尺寸变小,不属于欧式变换。

3. 仿射变换

可以拉伸、倾斜,角度变了,但平行线还是平行线。

比如把正方形拉成平行四边形,不是欧式变换。

4. 投影变换(透视变换)

近大远小、彻底扭曲,相机拍照、透视效果就是它,变形最严重。

现实中哪里在用欧式变换?(超高频场景)

你以为它是抽象数学,其实每天都在接触:

1. 游戏3D建模

游戏里的人物、物体移动、转身,都是欧式变换。物体不会走着走着变形、变大变小,保证画面真实。

2. 机器人、自动驾驶

机器人移动、车头转向、雷达定位,靠欧式变换计算自身位姿,保证空间距离、位置计算精准无误。

3. 计算机视觉、AI图像处理

图像矫正、图片旋转、目标位置匹配,用欧式变换保证物体特征不畸变,AI识别才不会出错。

4. 几何计算、向量运算

我们之前学的点乘、叉乘、法向量计算,全部依托欧式空间的特性(距离、角度守恒),才有稳定的计算结果。

欧拉角 & 四元数

做三维图形、游戏开发、机器人SLAM、计算机视觉、自动驾驶,绕不开的核心问题就是:如何描述物体在空间里的旋转?

日常我们说“抬头、转头、翻身”很好理解,但放到数学、代码里,必须用标准化方式记录旋转姿态。

目前工业界最常用的两种方案:欧拉角 和 四元数。


先搞懂基础:坐标系回顾

在讲旋转之前,先明确两个核心坐标系

  • 世界坐标系(全局坐标系)
    固定不变的参考系,相当于整个空间的“地面基准”,永远不动。
  • 自身坐标系(局部坐标系/物体坐标系)
    绑定在物体上,物体旋转、移动,它就跟着一起动。

  • 欧拉角:最直观、最符合人类直觉的旋转表示

    1. 通俗理解

    欧拉角 = 把任意空间旋转,拆分成「三次绕轴的分步旋转」。

    想象你手里拿着一个手机:

    • 第一步:绕竖直轴(Z轴) 左右转头(偏航 Yaw)
    • 第二步:绕水平横轴(X轴) 抬头低头(俯仰 Pitch)
    • 第三步:绕前后轴(Y轴) 左右翻滚(横滚 Roll)

    三次简单的轴旋转组合起来,就能模拟出物体在三维空间里任意角度的姿态。这就是欧拉角的核心思想。

    2. 三大旋转轴定义(航空/机器人通用标准)

    三维空间标准三轴,对应三个欧拉角:

    • 偏航角 Yaw(ψ\\psiψ):绕 Z轴 旋转,左右转向
    • 俯仰角 Pitch(θ\\thetaθ):绕 X轴 旋转,抬头/低头
    • 横滚角 Roll(ϕ\\phiϕ):绕 Y轴 旋转,左右倾斜翻滚

    3. 数学表达 & 旋转顺序

    欧拉角本质是三个二维旋转矩阵依次相乘。
    ⚠️ 重点:旋转顺序至关重要(Z-Y-X / X-Y-Z 等),顺序不同,最终姿态完全不一样,工程中必须统一规则。

    以最常用的 Z-Y-X 旋转顺序(先偏航、再俯仰、最后横滚)为例,整体旋转矩阵:
    R=Rx(ϕ)⋅Ry(θ)⋅Rz(ψ)
    R = R_x(\\phi) \\cdot R_y(\\theta) \\cdot R_z(\\psi)
    R=Rx(ϕ)Ry(θ)Rz(ψ)

    单轴基础旋转矩阵:

  • 绕 Z 轴旋转 ψ\\psiψ
    Rz(ψ)=[cos⁡ψ−sin⁡ψ0sin⁡ψcos⁡ψ0001]
    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

  • 绕 Y 轴旋转 θ\\thetaθ
    Ry(θ)=[cos⁡θ0sin⁡θ010−sin⁡θ0cos⁡θ]
    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θ

  • 绕 X 轴旋转 ϕ\\phiϕ
    Rx(ϕ)=[1000cos⁡ϕ−sin⁡ϕ0sin⁡ϕ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ϕ

  • 4. 欧拉角优点

  • 极度直观:三个角度对应我们日常感知的“转头、抬头、翻滚”,人最容易理解、调试、调参。
  • 数据量小:只用 3 个浮点数 就能描述姿态,存储、传输成本低。
  • 交互友好:游戏引擎、建模软件里的旋转滑块,全部基于欧拉角实现,适合手动调整姿态。
  • 5. 欧拉角致命缺点(万向锁)

    这是欧拉角最大的硬伤,也是很多场景被迫改用四元数的原因。

    万向锁(Gimbal Lock) 通俗解释:
    当其中两个旋转轴重合时,三维旋转会丢失一个自由度,原本独立的两个旋转变成“同方向转动”,无法实现空间内任意姿态切换,出现旋转卡死、抖动、异常翻转。

    举个例子:手机完全竖直90°抬头后,左右转头和机身翻滚会变成同一个动作,动作失控。

    额外短板:

    • 不适合插值平滑旋转:两个姿态之间做过渡动画,容易出现轨迹怪异、抖动。
    • 旋转计算存在角度周期性(0°和360°等价),数值计算容易出现歧义。

    6. 适用场景

    适合静态姿态描述、手动调参、粗略姿态展示:

    • 3D建模软件、场景编辑器
    • 无人机、飞行器粗略姿态显示
    • 不需要连续平滑旋转的场景

    四元数:工程界主流,解决欧拉角痛点的方案

    1. 通俗理解(小白版)

    先打破误区:四元数不是“复杂玄学”。

    三维空间中,任意旋转都可以等价为:绕某一条固定轴,旋转某一个角度。
    四元数就是专门用来描述「绕任意轴旋转一个角度」的数学工具。

    你可以简单记:

    欧拉角 = 分三步绕三轴转
    四元数 = 一步绕任意轴转

    2. 四元数基础定义

    四元数由 1个实部 + 3个虚部 组成,标准形式:
    q=w+xi+yj+zk
    q = w + x\\boldsymbol{i} + y\\boldsymbol{j} + z\\boldsymbol{k}
    q=w+xi+yj+zk

    简写为四维向量形式:
    q=[w, x, y, z]T
    q = [w,\\ x,\\ y,\\ z]^T
    q=[w, x, y, z]T

    对于单位四元数(专门表示旋转,工程中默认使用),和「旋转轴+旋转角」的转换关系:
    设:绕单位向量 n=(nx,ny,nz)\\boldsymbol{n}=(n_x,n_y,n_z)n=(nx,ny,nz) 旋转角度 α\\alphaα,则:
    {w=cos⁡α2x=nx⋅sin⁡α2y=ny⋅sin⁡α2z=nz⋅sin⁡α2
    \\begin{cases}
    w = \\cos\\dfrac{\\alpha}{2} \\\\
    x = n_x \\cdot \\sin\\dfrac{\\alpha}{2} \\\\
    y = n_y \\cdot \\sin\\dfrac{\\alpha}{2} \\\\
    z = n_z \\cdot \\sin\\dfrac{\\alpha}{2}
    \\end{cases}
    w=cos2αx=nxsin2αy=nysin2αz=nzsin2α

    核心约束:旋转用的四元数必须是单位四元数,满足:
    w2+x2+y2+z2=1
    w^2 + x^2 + y^2 + z^2 = 1
    w2+x2+y2+z2=1

    3. 核心运算:旋转向量

    用四元数对点/向量做旋转,公式:
    v′=q⋅v⋅q∗
    \\boldsymbol{v}' = q \\cdot \\boldsymbol{v} \\cdot q^*
    v=qvq

    • v\\boldsymbol{v}v:原始三维向量
    • qqq:旋转四元数
    • q∗q^*qqqq 的共轭四元数

    4. 四元数优点

  • 彻底没有万向锁:这是最核心优势,不会出现旋转卡死、丢自由度的问题。
  • 旋转插值极度平滑:支持球面线性插值(Slerp),两个姿态之间过渡流畅,无抖动、无翻转,是动画、相机运动的首选。
  • 计算效率高:组合多次旋转、连续姿态更新,计算量远小于矩阵、欧拉角。
  • 数值稳定性好:没有角度周期性问题,长时间迭代计算(机器人、定位)误差更小。
  • 5. 四元数缺点

  • 不直观:拿到 [w,x,y,z][w,x,y,z][w,x,y,z] 四个数字,人类无法直接看出物体当前姿态,不能手动快速调参。
  • 数学门槛略高:四元数乘法、共轭、归一化规则需要额外学习。
  • 数据维度更高:需要4个浮点数存储,比欧拉角多1个(现代硬件几乎无影响)。
  • 6. 适用场景

    几乎所有动态连续旋转场景,工业界首选:

    • 游戏角色、相机动画、3D动态场景
    • 机器人姿态解算、SLAM、体感设备
    • 无人机、AR/VR、运动捕捉
    • 需要平滑旋转、连续姿态迭代的算法

    欧拉角 VS 四元数 全面对比表

    对比项欧拉角四元数
    数据组成 3个角度值 (ψ,θ,ϕ)(\\psi,\\theta,\\phi)(ψ,θ,ϕ) 4个分量 (w,x,y,z)(w,x,y,z)(w,x,y,z)
    直观程度 强,符合人类感知 弱,无法直观看出姿态
    万向锁问题 存在,会丢失自由度 不存在,全程稳定
    旋转插值 效果差,易抖动、翻转 效果极佳,平滑自然
    计算复杂度 多次矩阵相乘,运算量大 运算简洁,效率高
    手动调参 非常方便 几乎无法手动调参
    典型用途 静态姿态、编辑器、UI交互 动态旋转、动画、定位、算法

    工程实战:两者如何配合使用?

    实际开发中不会二选一,而是组合使用,取长补短,这是行业通用套路:

  • 输入/交互阶段:用欧拉角
    软件界面、参数配置、手动旋转物体,全部使用欧拉角,方便人理解和操作。
  • 计算/运算阶段:转为四元数
    代码内部做旋转叠加、姿态插值、运动计算、算法迭代时,统一转换成四元数,规避万向锁、保证平滑。
  • 输出展示阶段:按需转换
    需要给用户看姿态角度时,再把四元数转回欧拉角显示。
  • 同时补充:三者转换关系
    欧拉角   ⟺  \\iff 旋转矩阵   ⟺  \\iff 四元数
    这三种形式在代码里可以互相转换,根据场景自由切换。


    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 【智能驾驶:视觉感知后处理 阅读笔记】Day2: 数学基础之欧式变换、欧拉角和四元素
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址