四元数 欧拉角 旋转矩阵

一、基础定义

表示 自由度 描述 优缺点
旋转矩阵 R 3×3 → 3自由度 刚体旋转线性映射 ✅ 直接乘点云/向量方便 ❌ 冗余、累积误差易破坏正交性
四元数 q = [w,x,y,z] 4 → 3自由度 单位四元数表示旋转 ✅ 紧凑、无奇异点、插值方便 ❌ 不直观,公式理解稍复杂
欧拉角 (roll, pitch, yaw) 3 绕固定轴顺序旋转 ✅ 直观角度表示 ❌ 万向节锁、插值不方便

二、旋转矩阵 ↔ 欧拉角

假设 ZYX 顺序(yaw-pitch-roll):

cpp 复制代码
% 欧拉角 -> 旋转矩阵
phi = pi/6; theta = pi/4; psi = pi/3;
R = eul2rotm([psi,theta,phi]); % 默认 ZYX 顺序
disp(R)
    0.3536   -0.5732    0.7392
    0.6124    0.7392    0.2803
   -0.7071    0.3536    0.6124
cpp 复制代码
% 旋转矩阵 -> 欧拉角
eul = rotm2eul(R);
disp(rad2deg(eul)) % 转为角度显示

三、旋转矩阵 ↔ 四元数

  • 四元数 q = [w, x, y, z]

  • 旋转矩阵到四元数公式:

cpp 复制代码
% 旋转矩阵 -> 四元数
q = rotm2quat(R); % 返回 [w x y z]
disp(q)

% 四元数 -> 旋转矩阵
R2 = quat2rotm(q);
disp(R2)

四、欧拉角 ↔ 四元数

  • 欧拉角 → 旋转矩阵 → 四元数

    cpp 复制代码
    % 欧拉角 -> 四元数
    q = eul2quat([psi,theta,phi]);
  • 四元数 → 旋转矩阵 → 欧拉角

    cpp 复制代码
    % 四元数 -> 欧拉角
    eul = quat2eul(q);
    disp(rad2deg(eul))

五、总结

1、示意图

转换 MATLAB 函数
欧拉角 → 旋转矩阵 eul2rotm()
旋转矩阵 → 欧拉角 rotm2eul()
旋转矩阵 → 四元数 rotm2quat()
四元数 → 旋转矩阵 quat2rotm()
欧拉角 → 四元数 eul2quat()
四元数 → 欧拉角 quat2eul()

2、问题

  • 问:为什么四元数比欧拉角好?

    ✅ 因为四元数无万向节锁,可连续插值(SLERP),适合优化和控制。

  • 问:为什么旋转矩阵要保持正交?

    ✅ 保持向量长度和正交性,否则会产生缩放或扭曲。

  • 问:三者的转换注意什么?

    ✅ 顺序(ZYX vs XYZ)和单位四元数规范化。

  • 问:ICP / Kabsch 用哪种表示?

    ✅ R(旋转矩阵)为主,用四元数优化也可,但旋转矩阵更直观。

旋转矩阵适合计算,四元数适合插值,欧拉角适合展示。

相关推荐
oioihoii1 分钟前
大模型输出的“隐性结构塌缩”问题及对策
人工智能
TechMasterPlus2 分钟前
Harness Engineer:把 AI 变成可复用工程能力的实践指南
大数据·人工智能
AI工具测评与分析3 分钟前
红仿大师功能波动致歉说明!手把手教程 + 备用工具一次配齐
人工智能·玫瑰克隆·红仿大师
不知名的老吴4 分钟前
高阶函数的应用与函数对象概念
算法
OpenBayes贝式计算6 分钟前
一键移除复杂物体!Netflix VOID 让视频消除拥有「物理直觉」;告别乱码与解析难题,MDPBench 数据集为「真实复杂场景」文档解析而生
人工智能·机器学习·图像识别
搬砖的小明20268 分钟前
Google BwA 杭州场(Gemma 4 专题全国首发)线下活动记录
人工智能
Mr_pyx10 分钟前
【LeetCode Hot 100】 - 缺失的第一个正数完全题解
数据结构·算法
向量引擎10 分钟前
向量引擎中转站偷走我半条命后终于把API密钥这件事整明白了
人工智能·aigc·api·ai编程·ai写作·key·api调用
龙萱坤诺12 分钟前
智创聚合API上线 Claude Opus 4.7,编码与多模态能力全面拉满
人工智能·ai编程·claude·ai开发
沪漂阿龙13 分钟前
深度拆解LangChain Chains与LCEL:从Runnable到生产级AI工作流
人工智能·langchain