三、四元数以及陀螺仪角速度


前言

本节结来讨论四元数


一、从复数到四元数

众所周知,在复平面上旋转变换非常容易,那么有没有比复数系更加复杂的数系,理论上是没有,因为一旦我们对复数进行推广就必须牺牲乘法交换律。那么牺牲交换律过后我们能把复数扩张到哪种程度呢?
首先复数的一般形式为 a + b i a+bi a+bi,那么我们先来看能不能增加一个虚数单元呢?
假设复数扩张后我们得到数的更一般的形式 a + b i + c j a+bi+cj a+bi+cj,其中 a , b , c a,b,c a,b,c为实数, i , j i,j i,j是两个虚数单位,并且满足已知的复数乘法规则: i i = − 1 , j j = − 1 ii=-1,jj=-1 ii=1,jj=1
显然推广后在做乘法的时候会出现 i j ij ij乘积:我们假设 i j = a + b i + c j ij=a+bi+cj ij=a+bi+cj
那么就有 − j = i i j = i ( a + b i + c j ) = a i − b + c i j = a i − b + c ( a + b i + c j ) = c a − b + ( a + c b ) i + c 2 j -j=iij=i(a+bi+cj)=ai-b+cij=ai-b+c(a+bi+cj)=ca-b+(a+cb)i+c^2j j=iij=i(a+bi+cj)=aib+cij=aib+c(a+bi+cj)=cab+(a+cb)i+c2j,显然这个式子要成立,我们需要实数 c c c满足 c 2 = − 1 c^2=-1 c2=1,很遗憾我们看到“三元数”是不能存在的。
上面得到的教训是 i j ij ij不属于集合 a + b i + c j a+bi+cj a+bi+cj,于是我们令 i j = k ij=k ij=k,并把集合扩大成 a + b i + c j + d k a+bi+cj+dk a+bi+cj+dk,新的形式如果做乘法一定会出现诸如 i j , j k , k i , j i , k j , i k ij,jk,ki,ji,kj,ik ij,jk,ki,ji,kj,ik的形式,那么参照推导“三元数”的逻辑,可以令 j k = i , k i = j jk=i,ki=j jk=i,ki=j,那么还有 j i , k j , i k ji,kj,ik ji,kj,ik的乘积呢?
试一下: − j = i i j = i k -j=iij=ik j=iij=ik,因此有 k i = − i k ki=-ik ki=ik,我们看到为了使得逻辑自洽,我们只能牺牲乘法交换律了。
当然我们还要看看除法,实际上由于乘法不满足交换律,我们也只能像矩阵一样的给出逆的左乘和右乘了,而不能像复数那样法除数写在分数线下面了。沿着复数的足迹,老实计算一下发现:
( a + b i + c j + d k ) ( a − b i − c j − d k ) = a 2 + b 2 + c 2 + d 2 = ∣ a + b i + c j + d k ∣ 2 (a+bi+cj+dk)(a-bi-cj-dk)=a^2+b^2+c^2+d^2=|a+bi+cj+dk|^2 (a+bi+cj+dk)(abicjdk)=a2+b2+c2+d2=a+bi+cj+dk2
所以我们发现四元数的逆和共轭于复数简直是一模一样。
因此我们宣布,除了乘法交换律不满足以外,复数的最小扩张就是四元数了。

二、用矢量表示四元数

由于四元数有3个虚分量,因此我们用向量形式来简化书写,并且可以使用向量的内积和叉乘来简化公式。
则两个四元数可以表示如下:
u 1 + v 1 u_1+\bm v_1 u1+v1
u 2 + v 2 u_2+\bm v_2 u2+v2
( u 1 + v 1 ) ( u 2 + v 2 ) = u 1 u 2 − v 1 ⋅ v 2 + u 1 v 2 + u 2 v 1 + v 1 × v 2 (u_1+\bm v_1)(u_2+\bm v_2)=u_1u_2-\bm v_1\cdot\bm v_2+u_1\bm v_2+u_2\bm v_1+\bm v_1\times\bm v_2 (u1+v1)(u2+v2)=u1u2v1v2+u1v2+u2v1+v1×v2
其中内积和叉乘使用一般的向量计算的规则。
棣莫弗公式的推广:
复数的旋转计算中棣莫弗公式非常好用,既然我们都用向量表示了四元数,那么可以可以推广一下棣莫弗公式用来做三维圆转呢?推广的时候注意一下虚部是三维的。
u + v = u 2 + v 2 ( u u 2 + v 2 + ∣ v ∣ u 2 + v 2 v ∣ v ∣ ) u+\bm v=\sqrt{u^2+\bm v^2}(\frac{u}{\sqrt{u^2+\bm v^2}}+\frac{|\bm v|}{\sqrt{u^2+\bm v^2}}\frac{\bm v}{|\bm v|}) u+v=u2+v2 (u2+v2 u+u2+v2 vvv)
如果记:
u u 2 + v 2 = c o s θ , ∣ v ∣ u 2 + v 2 = s i n θ , v ∣ v ∣ = n \begin{aligned} \frac{u}{\sqrt{u^2+\bm v^2}}=cos\theta,\frac{|\bm v|}{\sqrt{u^2+\bm v^2}}=sin\theta,\frac{\bm v}{|\bm v|}=\bm n \end{aligned} u2+v2 u=cosθ,u2+v2 v=sinθ,vv=n
则我们得到一个用模和 θ \theta θ表示的四元数
u + v = ∣ u + v ∣ ( c o s θ + n s i n θ ) u+\bm v=|u+\bm v|(cos\theta+\bm n sin\theta) u+v=u+v(cosθ+nsinθ)

三、用四元数对一个矢量进行旋转

简单起见用一个实部为 0 0 0的四元数 A A A来表示某个空间向量,该向量绕单位矢量 n \bm n n旋转 θ \theta θ角可以用下面的式子计算:

四元数解算陀螺仪是一个常见的面试题,用于解决陀螺仪姿态估计的问题。以下是对该问题的介绍: 陀螺仪是一种用于测量旋转角速度的传感器,它可以用来估计物体的姿态(即旋转角度)。在陀螺仪的输出中,通常会包含噪声和漂移等误差,这些误差会导致姿态估计的不准确性。 为了解决这个问题,可以使用四元数来进行姿态估计。四元数是一种数学工具,可以用来表示旋转姿态。它由一个实部和个虚部组成,可以表示为q = w + xi + yj + zk,其中w是实部,(x, y, z)是虚部。 四元数解算陀螺仪的基本原理是通过积分陀螺仪角速度数据来更新四元数,并利用四元数来计算物体的姿态。具体步骤如下: 1. 初始化四元数:将初始姿态设为单位四元数q0 = 1 + 0i + 0j + 0k。 2. 读取陀螺仪数据:从陀螺仪中读取角速度数据,通常以欧拉角的形式表示。 3. 更新四元数:根据陀螺仪角速度数据,使用数值积分方法(如Euler法或四阶龙格-库塔法)来更新四元数。更新公式为:q(t+dt) = q(t) + 0.5 * dt * q(t) * w(t),其中dt是时间步长,w(t)是当前时刻的角速度。 4. 归一化四元数:由于四元数具有单位长度的约束条件,需要在每次更新后对四元数进行归一化处理,即将其长度归一化为1。 5. 计算姿态:根据更新后的四元数,可以通过转换为欧拉角或旋转矩阵等形式来计算物体的姿态。 以上是对四元数解算陀螺仪面试题的介绍,希望能对你有所帮助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值