万向锁的理解 欧拉角 四元数

1 欧拉角&万向锁

欧拉角和万向锁
视频资料理解万向锁
核心是嵌套
以一个三自由度的机械臂为例,三个旋转轴互相垂直,相当于x,y,z轴
三个机械臂通过旋转关节依次串联,定义第一个关节旋转轴为J1,以此类推第二第三个关节旋转轴为J2,J3,那么J1为第一个旋转轴,它的旋转会带动J2和J3一起运动,而由于J2是安装在J1的机械臂上,所以J2的旋转不会影响到J1,只能带动J3运动,而J3是安装在J2的机械臂上,所以J3的旋转不会影响J1和J2,只会自己旋转,原理基本如此。
那么万向锁的定义,就是本来j1、2、3有三个旋转方向,由于j2旋转90°使j1和j3的旋转轴共线,此时j1和j3产生的旋转方向就只有一个,加上j2的总共就两个,丢失了一个旋转方向。
这应该就是机器人里面不能有奇异点的一个原因,使得j1、j2、j3无论怎么调都无法得到想要的解

2 欧拉角&四元数

欧拉角、轴角与四元数最容易理解
轴角表示法与四元数的关系
四元素与轴角的表示很接近,也是使用一个3维向量表示转轴和一个角度分量表示绕此转轴的旋转角度,即(w,x,y,z), 其中:
w = cos(theta/2)
x = ax * sin(theta/2)
y = ay * sin(theta/2)
z = az * sin(theta/2)
轴角和四元数
如何通俗地解释欧拉角?之后为何要引入四元数?
横滚角-roll、俯仰角-pitch、偏航角-yaw
在这里插入图片描述

3 旋转矩阵&四元数&欧拉角

欧拉角表示姿态时会遇到万向锁的问题,这会导致同一种空间状态欧拉角的表示方式不唯一,当出现万向锁现象时,同一种旋转有无数种欧拉角表示形式,从而导致了欧拉角差值时出现问题,因为当你俯仰角接近90°时,两组千差万别的欧拉角表示可以是同一种旋转。所以为了解决这些问题,数学上想出了用四元数的形式来表征姿态的方法。
旋转矩阵&四元数&欧拉角
四元数与欧拉角(Yaw、Pitch、Roll)的转换

### 欧拉角四元数的定义 在计算机图形学和机器人学领域,欧拉角用于描述刚体的姿态通过三个连续旋转的角度来实现。这些角度通常被称为俯仰角(pitch)、偏航角(yaw)和滚转角(roll)[^1]。 另一方面,四元数是一种扩展复数系统的数学实体,用来高效地表示三维空间中的旋转变换。一个单位四元数可以被看作是一个轴向量加上一个实部组成,形式上写作 \( q = w + xi + yj + zk \),其中 \(w\) 是实部而\(xi+yj+zk\)代表虚部。 ### 区别 两者之间存在显著差异: - **表达范围**:欧拉角容易遇到万向问题(gimbal lock),即当某些特定组合下会丢失自由度;相比之下,四元数不会遭遇此类局限性。 - **计算效率**:对于连贯性的姿态变化或者插值操作而言,基于四元数的方法往往更加快捷稳定,并且能够提供更加平滑的结果。 - **直观理解难度**:尽管如此,在实际应用中人们可能觉得欧拉角更容易理解和解释给定的姿态状态。 ### 转换方法 #### 从欧拉角四元数 假设有一个绕Z-Y-X顺序的欧拉角序列\((\phi,\theta,\psi)\),对应的四元数可以通过如下公式获得: \[q_w=\cos(\frac{\phi}{2})\cdot\cos(\frac{\theta}{2})\cdot\cos(\frac{\psi}{2})+\sin(\frac{\phi}{2})\cdot\sin(\frac{\theta}{2})\cdot\sin(\frac{\psi}{2})\] \[q_x=\sin(\frac{\phi}{2})\cdot\cos(\frac{\theta}{2})\cdot\cos(\frac{\psi}{2})-\cos(\frac{\phi}{2})\cdot\sin(\frac{\theta}{2})\cdot\sin(\frac{\psi}{2})\] \[q_y=\cos(\frac{\phi}{2})\cdot\sin(\frac{\theta}{2})\cdot\cos(\frac{\psi}{2})+\sin(\frac{\phi}{2})\cdot\cos(\frac{\theta}{2})\cdot\sin(\frac{\psi}{2})\] \[q_z=\cos(\frac{\phi}{2})\cdot\cos(\frac{\theta}{2})\cdot\sin(\frac{\psi}{2})-\sin(\frac{\phi}{2})\cdot\sin(\frac{\theta}{2})\cdot\cos(\frac{\psi}{2})\][^1] #### 从四元数欧拉角 如果已知一个四元数\(q=(q_w,q_x,q_y,q_z)\),那么其相应的Euler angles可通过以下方程求得(这里采用的是ZYX convention): \[yaw=atan2(2(q_wq_z+q_xq_y),1-2(q_y^2+q_z^2))\] \[pitch=asin(max(-1,min(1,2(q_wq_y-q_zq_x))))\] \[roll=atan2(2(q_wq_x+q_yq_z),1-2(q_x^2+q_y^2))\] ```python import math def quaternion_to_euler(w, x, y, z): t0 = +2.0 * (w * x + y * z) t1 = +1.0 - 2.0 * (x * x + y * y) roll = math.atan2(t0, t1) t2 = +2.0 * (w * y - z * x) t2 = max(min(t2, 1), -1) pitch = math.asin(t2) t3 = +2.0 * (w * z + x * y) t4 = +1.0 - 2.0 * (y * y + z * z) yaw = math.atan2(t3, t4) return [math.degrees(yaw), math.degrees(pitch), math.degrees(roll)] print(quaternion_to_euler(0.707, 0, 0.707, 0)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GJ_WL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值