✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

姿态描述

创建时间:2022-05-25 更新时间:2025-12-14 阅读次数:1480 次

1、姿态描述与欧拉角

姿态描述一般采用欧拉角,如下所示:

欧拉角有一个弊端,就是存在万向节死锁问题,意思是在某些姿态下,欧拉角的三自由度失去了一个自由度。所以,四元数是姿态描述的另外一种形式,关于四元数的内容,这是一个十分复杂的话题。

2、四元数

四元数是一种扩展了复数概念的超复数系统,由爱尔兰数学家威廉·哈密顿于1843年提出。它由一个实部和三个虚部构成,通常表示为 q = a + bi + cj + dk,其中 a 是实部,b、c、d 是实数系数,而 i、j、k 是满足特定乘法规则(如 i² = j² = k² = ijk = -1)的虚数单位。

四元数的核心优势在于其能简洁、高效地描述三维空间中的旋转。与欧拉角相比,它能避免“万向节锁”问题;与旋转矩阵相比,它仅需四个数值而非九个,计算更高效且不易产生数值误差。在四元数表示旋转时,通常将其规范化为单位四元数,其中实部与旋转角度相关,虚部与旋转轴相关。

正因为这些特性,四元数已成为计算机图形学、机器人学、航空航天和虚拟现实等领域不可或缺的数学工具,广泛应用于相机朝向、关节动画、卫星姿态控制等需要平滑、稳定旋转计算的场景中。它巧妙地在数学抽象与工程应用之间架起了一座桥梁。

更多介绍请移步于四元数相关小节的详细介绍。

3、四元数与欧拉角转换

PyBullet使用四元数来表示方向,但是由于四元数对人来说不是很直观,所以有两个API可以在四元数和欧拉角之间进行转换。

1、返回四元数[X,Y,Z,W]

getQuaternionFromEuler(eulerAngle, physicsClientId)

2、返回欧拉角[roll, pitch, yaw]

getEulerFromQuaternion (quaternion, physicsClientId)

代码如下所示:

Quaternion = p.getQuaternionFromEuler([0, 0, 0]) # 欧拉角转四元数
Euler = p.getEulerFromQuaternion([0, 0, 0, 1]) # 四元数转欧拉角
print("四元数: ", Quaternion)  # 四元数:  (0.0, 0.0, 0.0, 1.0)
print("欧拉角: ", Euler)  # 欧拉角:  (0.0, -0.0, 0.0)
本教程共28节,当前为第8节!
本教程最新修订时间为:2026-07-24 11:58:56

📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:程序出海:中国程序员当下最大的机遇>>>>>>