四元数姿态的梯度下降法推导和解读
简述梯度下降法的原理和过程

简述梯度下降法的原理和过程摘要:1.梯度下降法简介2.梯度下降法的原理3.梯度下降法的过程4.梯度下降法的应用与优化5.总结正文:梯度下降法(Gradient Descent)是一种常用的数值优化方法,广泛应用于机器学习、数学建模等领域。
本文将对梯度下降法的原理和过程进行详细阐述。
一、梯度下降法简介梯度下降法是一种迭代优化算法,通过沿着负梯度方向不断更新参数,使目标函数值逐步减小。
它在各个领域具有广泛的应用,如线性回归、非线性回归、神经网络训练等。
二、梯度下降法的原理梯度下降法的核心思想是基于目标函数的梯度信息来调整参数。
梯度是表示目标函数在某一点变化率的向量,负梯度方向表示函数值下降最快的方向。
沿着负梯度方向更新参数,可以使目标函数值不断减小。
三、梯度下降法的过程1.初始化参数:设置初始的参数值(如权重、偏置等)。
2.计算梯度:计算目标函数在当前参数下的梯度。
3.更新参数:根据学习率(一个正比例常数)和梯度信息,更新参数值。
4.判断收敛:当梯度模小于预设阈值或达到迭代次数限制时,停止迭代;否则,返回步骤2。
四、梯度下降法的应用与优化1.应用:梯度下降法可应用于各种优化问题,如线性回归、非线性回归、支持向量机、神经网络训练等。
2.优化:为提高梯度下降法的收敛速度和性能,可以采用以下方法:a.动态调整学习率:学习率过小会导致收敛速度缓慢,过大则可能导致振荡或不收敛。
动态调整学习率可以加速收敛。
b.动量法:引入动量概念,使梯度下降过程具有惯性,避免频繁调整导致的振荡。
c.批梯度下降与随机梯度下降:分别对批量数据和单条数据进行梯度计算,减少计算复杂度。
五、总结梯度下降法作为一种常用的优化方法,在机器学习、数学建模等领域具有重要地位。
无人机四元素解算姿态角解析

无人机四元素解算姿态角解析无人机姿态角的准确解算是实现其稳定飞行的关键。
在无人机飞行控制中,四元素解算方法是一种常用的姿态角解析技术。
本文将对无人机四元素解算姿态角的方法进行详细解析。
一、四元素概述四元素(Quaternion)是一种数学工具,用于表示和计算三维空间中的旋转。
在无人机领域,四元素被广泛应用于姿态角的表示和计算。
一个四元素包含一个实数部分和三个虚数部分,通常表示为q = a + bi + cj + dk,其中a、b、c、d 分别表示四元素的实部和虚部。
二、无人机姿态角无人机的姿态角包括俯仰角(Pitch)、横滚角(Roll)和偏航角(Yaw)。
这三个角度分别描述了无人机绕其三个轴的旋转状态。
在四元素解算中,我们通过计算四元素与对应旋转矩阵的关系,可以得到无人机的姿态角。
三、四元素解算姿态角方法1.初始化四元素在无人机起飞前,我们需要初始化一个四元素,表示无人机的初始姿态。
通常,我们将初始姿态设置为q = 1 + 0i + 0j + 0k,即无旋转状态。
2.更新四元素当无人机飞行过程中,传感器(如加速度计、陀螺仪等)会实时采集飞行数据。
根据这些数据,我们可以计算出无人机在短时间内(如一个采样周期)的旋转四元素。
这个旋转四元素可以表示为:q_rot = cos(θ/2) + (axis × sin(θ/2))其中,θ为旋转角度,axis 为旋转轴。
3.组合四元素将计算得到的旋转四元素与当前姿态四元素相乘,即可得到新的姿态四元素:q_new = q_old × q_rot4.解算姿态角根据新的姿态四元素,我们可以通过以下公式解算出对应的姿态角:Pitch = arcsin(2 * (q_new.c * q_new.d + q_new.a * q_new.b))Roll = arctan2(2 * (q_new.a * q_new.c + q_new.b * q_new.d), 1 - 2 * (q_new.c^2 + q_new.d^2))Yaw = arctan2(2 * (q_new.a * q_new.d - q_new.b * q_new.c), 1 - 2 * (q_new.d^2 + q_new.c^2))四、总结通过四元素解算姿态角的方法,我们可以实时获取无人机的飞行姿态,从而实现对无人机的精确控制。
四元数计算位姿差

四元数计算位姿差
标题:四元数计算位姿差
简介:本文将介绍使用四元数计算位姿差的方法,旨在提供一种简洁有效的姿态变换解决方案。
正文:
一、引言
在姿态控制和机器人导航中,计算位姿差是一项关键任务。
而四元数作为一种表示旋转的数学工具,在计算位姿差方面具有独特的优势。
二、四元数的基本概念
四元数是一种复数扩展,由实部和三个虚部组成。
它可以用来表示旋转的方向和角度。
四元数的运算规则和复数类似,但需要额外考虑单位正交性。
三、四元数计算位姿差的步骤
1.读取初始姿态和目标姿态的四元数表示。
2.将初始姿态的四元数取共轭,得到逆向旋转。
3.将逆向旋转与目标姿态的四元数相乘,得到相对旋转。
4.通过将相对旋转转换为欧拉角或旋转矩阵,可以得到位姿差。
四、四元数计算位姿差的优势
1.四元数可以避免万向锁问题,提高计算的稳定性和准确性。
2.四元数计算速度快,特别适用于实时应用和高频率控制。
3.四元数可以无损地进行姿态插值,实现平滑的动画效果。
五、实例演示
以飞行器姿态控制为例,通过四元数计算位姿差,可以实现精准的悬停和轨迹跟踪。
六、总结
通过使用四元数计算位姿差,我们可以更加高效地实现姿态控制和导航任务。
四元数的独特特性使其成为一种理想的姿态表示工具。
注:本文仅供参考,未涉及具体代码实现。
如需详细了解四元数位姿差计算方法,请参考相关文献或专业教材。
通过以上几点,本文确保了标题与正文的一致性,没有包含广告信息或侵权争议,避免了敏感词汇的出现,并保证了文章的完整性和流畅性。
四元数姿态解算原理

四元数姿态解算原理咱们先来说说姿态解算为啥这么重要。
你想啊,在好多地方都得知道一个物体的姿态,就像咱们玩遥控飞机的时候,如果不知道飞机在空中是啥姿势,是头朝上还是朝下,是横着飞还是斜着飞,那这飞机可就没法好好控制啦。
在机器人领域也是一样的,机器人得知道自己的胳膊、腿是啥姿势才能准确地干活呀。
那四元数是啥呢?简单来说,它就像是一种很特别的数学小工具。
四元数有四个部分,就像四个小伙伴一起合作来描述姿态。
这和咱们平常熟悉的用角度来描述姿态不太一样哦。
平常的角度描述有时候会遇到一些麻烦事儿,比如说会有万向节锁这种讨厌的问题。
就好比你想转动一个东西,结果发现有些方向转着转着就转不动了,就像被锁住了一样,多让人头疼呀。
但是四元数就很聪明啦,它能巧妙地避开这些问题。
想象一下四元数是一个小魔法盒。
这个小魔法盒里面的四个部分相互配合着来表示物体的旋转状态。
比如说有一部分像是负责说物体绕着x轴转了多少,另一部分负责绕y轴,还有的负责绕z轴,最后一部分就像是一个协调员,把前面三个部分协调得妥妥当当的。
在姿态解算的时候呢,就像是一场精彩的接力赛。
传感器会给我们一些数据,这些数据就像是接力赛的第一棒。
比如说加速度计能告诉我们物体受到的加速度,陀螺仪能告诉我们物体旋转的速度。
但是这些数据可不能直接就告诉我们物体的姿态呢,它们还需要经过四元数这个神奇的“加工厂”加工一下。
四元数会根据这些传感器的数据不断地更新自己。
就像它在说:“加速度计给了我这个信息,陀螺仪给了我那个信息,那我就调整一下我自己来表示新的姿态啦。
”这个调整的过程就像是它在做一种很精细的舞蹈动作,每个部分都在按照一定的规则动来动去。
而且四元数在计算姿态的时候特别稳定。
就像一个稳重的老大哥,不管外面的数据怎么波动,它都能比较准确地算出姿态来。
不像有些方法,数据稍微有点风吹草动就慌了神,算出的姿态就乱七八糟的。
再说说四元数在图形学里的应用吧。
你玩游戏的时候有没有想过那些超级酷炫的3D模型是怎么旋转的呀?很多时候就是靠四元数来搞定姿态的。
梯度下降优化算法原理详解

梯度下降优化算法原理详解梯度下降优化算法是一种常用的机器学习算法,其原理是通过迭代的方式更新模型参数,使得模型能够更好地拟合训练数据。
在本文中,我们将详细介绍梯度下降优化算法的原理和相关知识。
首先,我们需要了解梯度的概念。
梯度是一个向量,其方向指向函数值增加最快的方向,其大小表示函数值增加的速度。
对于一个多变量函数,其梯度是一个向量,其中每个维度表示对应变量的增加方向。
因此,在机器学习中,梯度通常指的是目标函数对模型参数的偏导数。
接下来,我们来介绍梯度下降优化算法的基本思路。
假设我们要最小化一个目标函数L(w),其中w表示模型的参数。
我们可以通过计算目标函数的梯度来确定当前位置的下降方向,然后在该方向上移动一定的步长,直到找到一个更小的位置,进而得到更好的模型参数。
具体来说,假设我们当前在位置w,其对应的目标函数的梯度为g,我们可以使用以下公式更新参数w:w ← w - αg其中α是步长,也称作学习率。
学习率决定了每次移动的步长大小,通常情况下,学习率需要小于1,否则可能会导致参数在更新过程中震荡或者无法收敛的情况。
在实际应用中,通常需要多次迭代更新模型参数,直到达到收敛条件为止。
收敛条件可以是目标函数的变化小于某个阈值,或者迭代次数达到了预设的最大值。
需要注意的是,梯度下降优化算法有多个变种,例如批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)、小批量梯度下降(Mini-Batch Gradient Descent)等。
这些变种的主要区别在于每次更新参数时使用的样本数量不同,也就是说,它们计算梯度的方式存在差异。
总之,梯度下降优化算法是机器学习中一种常用的优化方法,其主要原理是通过迭代更新模型参数,使得模型能够更好地拟合训练数据。
在实际应用中,需要根据具体情况选择不同的变种,并调整学习率等超参数,以达到最优的效果。
梯度下降法

Q q0
*
q1
q2
q3
T
(二)参数定义、坐标系定义 如果不存在误差那么 a=Q ⊕G ⊕Q* h=Q ⊕H⊕Q* 实际上是不相等的。 H是参考坐标系下地磁场 G是参考坐标系下重力加速动 参考坐标系:X轴对应北;Y轴对应西;Z轴对应天 机体坐标系:初始与参考坐标同向 T 则: G 0 0 1
为地磁场与测量的磁场的偏差
2、由于相减的向量是单位向量,∆很小时,|∆|就相
当于角度。
ax 2(q1q3 q0 q2 ) ax 2(q q q q ) a a R * G a a 2 3 0 1 y y 2 2 2 2 a q q q q 1 2 3 az z 0
4hy H z q3 4hz H x q0 4hz H z q2
f 4ax q1 4a y q2 4az q3 4hx H x q3 4hx H z q1 4hy H x q0 q3
4hy H z q2 4hz H x q1 4hz H z q3
有了梯度,剩下的就是确定步长r 确定步长是梯度下降法的核心。步长未必是一成不变
四元数解算姿态完全解析及资料汇总
四元数完全解析及资料汇总本文原帖出自匿名四轴论坛,附件里的资源请到匿名论坛下载:感谢匿名的开源分享,感谢群友的热心帮助。
说什么四元数完全解析其实都是前辈们的解析,小弟真心是一个搬砖的,搬得不好希望大神们给以批评和指正,在此谢过了。
因为本人是小菜鸟一枚,对,最菜的那种菜鸟······所以对四元数求解姿态角这么一个在大神眼里简单的算法,小弟我还是费了很大劲才稍微理解了那么一点点,小弟搬砖整理时也是基于小弟的理解和智商的,有些太基础,有些可能错了,大牛们发现了再骂过我后希望能够给与指正哈。
好,废话到此为止,开始说主体。
四元数和姿态角怎么说呢?先得给和我一样的小菜鸟们理一理思路,小鸟我在此画了一个“思维导图”(我承认我画的丑),四元数解算姿态首先分为两部分理解:第一部分先理解什么是四元数,四元数与姿态角间的关系;第二部分要理解怎么由惯性单元测出的加速度和角速度求出四元数,再由四元数求出欧拉角。
图1 渣渣思维导图在讲解什么是四元数时,小弟的思维是顺着说的,先由四元数的定义说起,说到四元数与姿态角间的关系。
但在讲解姿态解算时,小弟的思维是逆向的,就是反推回来的,从欧拉角一步步反推回到惯性器件的测量数据,这样逆向说是因为便于理解,因为实际在工程应用时和理论推导有很大差别。
实际应用时正确的求解顺序应该为图1中序号顺序,即1->2->3->…….但在笔者讲解姿态求解时思路是如图2的。
图2 逆向讲解思路大家在看四元数时最好结合着代码一块看,小弟看的是匿名四轴的代码,感觉写的非常好也非常清晰,粘出来大家一块观摩。
红色部分是核心代码,总共分为八个步骤,和图1中的八个步骤是一一对应的。
讲解介绍时也是和代码对比起来讲解的。
代码可以去匿名官网上下载,都是开源的,不是小弟的,所以小弟不方便加在附件中。
好的,下面搬砖开始!。
嘿咻嘿咻关于四元数的定义摘自秦永元的《惯性导航》,里面有非常好的讲解,大家可以直接看绪论和第九章就可以。
梯度下降算法的理解
梯度下降算法的理解梯度下降算法是一种常用的优化算法,在机器学习和深度学习中广泛应用。
它通过迭代的方式,逐步地调整模型参数,使得损失函数达到最小值。
本文将从梯度的概念、梯度下降算法的原理和步骤,以及梯度下降算法的优缺点三个方面进行介绍。
我们来了解一下梯度的概念。
梯度是一个向量,它指向函数在某一点上升最快的方向。
在多元函数中,梯度包含了所有偏导数的信息,可以表示函数在各个方向上的变化率。
我们可以将梯度理解为函数在某一点的导数。
接下来,我们介绍梯度下降算法的原理和步骤。
梯度下降算法的核心思想是沿着梯度的反方向逐步更新模型参数,以使损失函数逐渐减小。
具体来说,算法首先随机初始化模型参数,然后计算损失函数在当前参数下的梯度。
接着,根据梯度的反方向和学习率的大小,更新模型参数。
重复这个过程,直到达到停止条件。
梯度下降算法的步骤可以总结为以下几个关键步骤:1. 初始化模型参数:随机初始化模型参数,如权重和偏置。
2. 计算损失函数的梯度:根据当前模型参数,计算损失函数对于每个参数的偏导数。
3. 更新模型参数:根据梯度的反方向和学习率的大小,更新模型参数。
4. 重复迭代:重复步骤2和步骤3,直到达到停止条件,如达到最大迭代次数或损失函数的变化小于阈值。
我们来分析一下梯度下降算法的优缺点。
梯度下降算法的优点是简单易懂,容易实现。
它可以用于各种模型和问题,并且具有较好的收敛性,能够找到局部最优解。
然而,梯度下降算法也存在一些缺点。
首先,它依赖于学习率的选择,学习率过大或过小都会导致算法效果不佳。
其次,梯度下降算法只能保证收敛到局部最优解,而无法保证收敛到全局最优解。
此外,对于大规模数据和复杂模型,梯度下降算法的计算复杂度较高,训练时间较长。
梯度下降算法是一种常用的优化算法,通过迭代的方式逐步调整模型参数,使得损失函数达到最小值。
它的原理和步骤相对简单,但在实际应用中需要注意学习率的选择和算法的收敛性。
梯度下降算法具有较好的收敛性和广泛的适用性,但也存在一些缺点,如对学习率的敏感性和无法保证全局最优解。
TN01 – 四元素姿态估计及梯度下降法
本文档是为了说明采用四元素来表示姿态的方法,以及采用梯度下降法来进行姿态解算的方法。
2013-08-18
四元素姿态表示
四元数表示法采用四个元素 表示对象姿态
(1)
其中,θ,ψ分别为滚转、俯仰和航向角,四元素满足条件
(2)
姿态变换矩阵
地面坐标至机体坐标的变换矩阵
(3)
在机体坐标ቤተ መጻሕፍቲ ባይዱ下
(11)
通过对四元素求梯度,得到四元素对误差的影响,另误差代价函数
(12)
(13)
(14)
其中
(15)
(16)
(17)
(18)
通过梯度修正四元素
(19)
或者
(20)
姿态角表示
(4)
为以示说明,对于地面坐标的矢量 ,在机体坐标中表示为 ,则有
(5)
机体坐标至地面坐标的变换矩阵
(6)
姿态角表示
(7)
从四元素获得姿态角
(8)
姿态变化
(9)
其中
(10)
梯度下降法
通过测量得到的加速度 和地磁场 ,校正通过转动速度迭代得到的姿态
加速度 ,地磁场 ,在地面坐标系
其中
为归一化的矢量,归一化的作用是使得加速度矢量和磁场矢量在通过误差校正时有一个统一的标准
四元数法求解姿态动力学方程
四元数法求解姿态动力学方程四元数是一种用来表示三维空间中旋转的数学工具。
它由一个实部和三个虚部组成,可以表示空间中的旋转角度和旋转轴向量。
在机器人和航空航天领域,四元数经常被用来描述姿态,并且能够方便地进行姿态之间的插值和计算。
姿态动力学方程描述了一个刚体在外力和外力矩的作用下的运动规律。
四元数法可以用来推导解姿态动力学方程。
假设刚体在时间t时的姿态为q(t),在空间中角速度为ω(t)。
我们可以将刚体的姿态表示为:q(t)=[q0(t),q1(t),q2(t),q3(t)]其中,q0(t)为四元数的实部,q1(t)、q2(t)和q3(t)为四元数的虚部。
我们可以通过以下方程来描述刚体的姿态动力学方程:dq(t)/dt = 1/2 * ω(t) * q(t)其中,dq(t)/dt是四元数的导数,ω(t)是刚体的角速度,*表示四元数的乘法运算。
将q(t)展开,可以得到:dq0(t)/dt = -1/2 * (q1(t) * ω1(t) + q2(t) * ω2(t) + q3(t)* ω3(t))dq1(t)/dt = 1/2 * (q0(t) * ω1(t) - q3(t) * ω2(t) + q2(t) * ω3(t))dq2(t)/dt = 1/2 * (q3(t) * ω1(t) + q0(t) * ω2(t) - q1(t) * ω3(t))dq3(t)/dt = -1/2 * (q2(t) * ω1(t) - q1(t) * ω2(t) + q0(t) * ω3(t))其中,dq0(t)/dt表示四元数实部的导数,dq1(t)/dt、dq2(t)/dt和dq3(t)/dt表示四元数虚部的导数。
通过对上面的四个方程进行求解,我们就可以得到刚体在时间t时的姿态q(t)。
而ω(t)则可以通过刚体的运动学方程和动力学方程来求解。
四元数法求解姿态动力学方程的优势在于,与传统的欧拉角法相比,四元数法不会出现万向锁现象,可以避免在特定情况下姿态计算的不稳定性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四元数姿态的梯度下降法推导和解读笔者前面几篇文章讨论的是基于四元数的互补滤波算法,并单独对地磁计融合部分做了详细的讨论和解释。
而本文讨论的姿态融合算法叫做梯度下降法,这部分代码可以参见Sebastian O.H. Madgwick在2010年4月发表的一篇论文(An efficient orientation filter for inertial andinertial/magneticsensor arrays),这篇论文利用四元数微分方程求解当前姿态,然后分别利用加速度计和地磁计进行补偿,推导出两种姿态融合算法。
两种算法均为梯度下降法,而其中地磁计的处理方式笔者已经在《四元数姿态解算中的地磁计融合解读》一文中详细讨论了,这里笔者将对Madgwick对于加速度计和地磁计的梯度下降法做出详细的解释,期间一定有个人不足的地方,仅供参考,希望和各位网友一起学习!首先来谈谈什么是梯度。
维基百科中解释的是“标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。
”很显然,梯度和变化率有关。
现在我们引入标量函数f(x),对标量函数f(x)求导,不难得到f’(x)就是梯度,就是曲线在某一点的斜率。
梯度下降法就是我们顺着这个在某一点下降速度最快的反方向一直走,走到一个极值点,这个点就是最优解(稳定解)。
那么这个梯度的概念和我们的姿态解算有什么关系?我在前面的文章中已经说明:我们求解姿态就是求解的转换矩阵(矩阵元素就是四元数)。
这个转换矩阵是有误差的,我们所要做的工作就是采用某种算法,消除误差,最后得到的解就是我们的近似精确解,也就是姿态四元数了。
消除误差四个字,在实际的实现过程中,是通过误差函数来实现的。
定义误差函数ef(x),那么我们的工作就是令ef(x)=0,求解上述方程得到x的值。
我们在求解高阶方程的时候,一般的方法就是求导,求极值点,根据这些值来判断精确值个数和位置。
这是我们高中所学习到的知识,在这里是一样的。
只不过,这里的误差函数ef(x) 不再是之前讨论的简单的标量函数了,他的自变量x变成了向量[q0 q1 q2 q3]。
这也就是说,原先的标量函数ef(q) 变成了如今的标量函数ef([q0 q1 q2 q3]) ,他仍然是标量函数,但是自变量是向量[q0 q1 q2 q3]。
对上述自变量是向量的标量函数,我们要用梯度法求解,就必须求导。
标量函数对向量求导很简单,只需要分别对向量中的各个变量求偏导即可:但是,我们的姿态解算是三维姿态,不是一维姿态,所以,这里的ef(q)并不是一个标量函数,实质上是一个向量函数ef ( q ),这个向量函数里面有三个元素,分别对应xyz轴的三个分量,每个分量又由一个四元数向量q构成。
那么现在就引入了一个较为复杂的误差函数ef ( q ),该误差函数不光自变量是一个向量,并且因变量也是一个向量,这种函数叫做多元向量函数。
那么我们现在的问题就转化为求多元向量函数的极值问题。
针对上述极值问题,在计算机中,多采用数值解法,如最速下降法、牛顿法、共轭梯度法。
我们这里讨论就是第一种算法,又叫做梯度下降法。
PS:梯度下降法为一阶线性收敛,牛顿法为二阶线性收敛,所以从收敛速度和精度来讲牛顿法要好,但是需要计算Hessian矩阵,计算量大,笔者在这里就不细说了。
(或许今后笔者会尝试牛顿法求解姿态)在梯度下降法中,需要对多元向量函数求导,当然,前人已经研究过这个问题了,美其名曰雅可比矩阵(Jacobian)。
不要被他吓到,雅可比矩阵就是按照规矩来一个个求导的过程。
上述讨论了标量函数对向量的导数的情况,当标量函数变为向量时,只需要继续对每一个向量再求偏导即可。
对于上式(假设四元数向量定义为行向量),再对每一个因变量求偏导:上式就是多元向量函数的导数(也称为雅可比矩阵)。
在这里,我定义的是行向量的四元数q和列向量因变量[efxefyefz]’,你同样可以定义列向量四元数q和行向量因变量[efxefyefz]。
但是注意在求导的时候,注意一下矩阵的行列对应,记住:行向量不能对行向量求导,列向量不能对列向量求导,只能交错进行,这一点一定要记住!因为后面在用梯度计算姿态的时候为了满足矩阵乘法法则需要转置雅可比矩阵。
这里,我们由引例考虑实际情况。
现在考虑陀螺仪和加速度计的梯度下降法姿态融合算法。
先给出梯度下降法计算公式:从上述公式也可以看出梯度下降法属于一阶收敛,牛顿法在迭代公式中应用到了f(x)的导数,所以属于二阶收敛。
对于上述公式的理解,就是在处的梯度(导数),前面的负号表示梯度的反方向,这个方向就是当前最快的下降收敛速度,我们按照这个方向走步长,就从走到了。
在这里,我们取函数的方向,即。
根据前述讨论,这里的函数就是误差函数,并且是多元向量函数,自变量是四元数向量,因变量是三维坐标。
由于是利用加速度计表征的四元数矩阵误差,所以该多元向量误差函数记作上述公式的得来其实很简单,就是重力加速度g在地理坐标系中的值通过四元数法旋转到载体坐标系中的值,也就是旋转矩阵的第三列,然后减去当前加速度计测得的值作差,就是通过加速度计表征的旋转矩阵的误差。
很显然,这个误差函数就是典型的多元向量函数,当这个函数等于0时,我们就认为得到了旋转矩阵没有误差,也就是姿态四元数是精确的,从而得到了飞行器的精确姿态。
为了求解上述方程,我们对其求导,根据前述阐述,上述函数的导数就是其对应的雅可比矩阵:注意,上式中的自变量四元数为行向量,因变量三维向量是列向量。
进行到这里,还没有应用到梯度下降算法,只是做好了前提准备。
为了更好的理解梯度算法的原理,这里从标量函数梯度开始看起。
设标量函数f(x),导数有f’(x),对于x上的一个增量dx,有dy=f’(x)dx。
当dy->0时,我们认为已经到达稳定解,梯度法计算完成。
同理,x变为向量四元数,y变为三维向量,那么f’(x)变为雅可比矩阵,有梯度计算公式:在这里要特别注意公式中的雅可比矩阵转置符号T 。
前面红色部分说过对于多元向量函数求导涉及到分子和分母的行列向量问题,在这里,为了满足矩阵乘法的要求,如果我们不对雅可比矩阵进行转置,那么等式右边就是(3x4)X(3x1),显然不满足矩阵乘法要求,所以,在这里对之前求出来的雅可比矩阵转置。
得到一个(4x3)X(3x1)=4X1的列向量:根据梯度下降法的计算公式,假设我们经过梯度下降法计算的目标姿态为,那么有:上述公式就是根据梯度下降算法求得的一组四元数,对梯度归一化是为了得到梯度的方向,其梯度大小由步长ut决定。
这样的一个迭代公式显然属于一阶线性收敛,通过计算机的迭代运算可以从初始时刻的姿态每一步经由梯度的相反方向走到多元向量误差函数的一个局部极值点,这个点就是我们消除了旋转矩阵误差的点,就是我们所要求的姿态四元数。
PS一句,这里的步长ut和实际物体运动的角速度相关,和采样时间相关,具体关系为:上述关系是Madgwick给出的,我只能理解物体运动角速度越快,采样时间越长,那么收敛的步长就必须越长,我觉得是显然的,至于为什么,我无法给出证明。
Madgwick也只是一带而过,有想法的网友可以一起交流。
利用梯度下降法可以求得一组姿态四元数,这组姿态四元数是基于加速度计表征出来的四元数,由于加速度计的动态性能不佳,所以这种方法在高速运动之下会有较大的延迟。
而在惯性导航中,主要的器件是陀螺仪,这个器件是专门处理高速运动下的较为理想器件。
之前笔者研究的互补滤波姿态融合算法和目前绝大多数网友采用的姿态解算算法均是根据四元数微分方程得来。
关于这个方程的解释不在本篇文章讨论范围之内。
但是需要指出的是,根据这个微分方程求解得出的姿态和梯度下降法求解的姿态都是用于描述一个坐标系相对于另一个坐标系的空间位置。
所以,为了充分两者的算法特点,需要对其进行融合。
假设由微分方程求解的姿态四元数为,有:上面这个式子很和谐,因为我们所要求的最终姿态在等式左边,等式右边由两个部分组成,一个是基于陀螺仪的四元数微分方程求解的姿态,另一个是用梯度下降法求解的姿态四元数,两者都有一定的可信度,前者用于高速运动,后者用于低速运动。
在这里就存在一个很明显的问题,即系数alpha 如何取?很明显,高速运动下alpha要小一些,低速运动下alpha要大一些。
也就是说理论上将这应该是一个动态变化的值。
至于这个动态值应该怎么取舍就交给那些大牛们去研究吧,我这里就采用常量简单处理了。
在常量值处理的前提下,上述公式取得最优值的alpha应该是的收敛速度等于的收敛速度(Madgwick如是说,有网友知道为什么可以和我讨论),所以就有如下公式:式中的beta就是四元数微分方程求解的姿态算法的收敛速度,这个值就是陀螺仪的测量误差,通过查询IMU器件的PDF手册就可以知道,一般是一个很小的值。
等式右边就是梯度下降算法的收敛速度,进而有:在分析上述公式之前,在这里先明确一点,就是梯度下降算法的收敛速度和物体运动的速度关系,只有当算法的收敛速度快于物体运动速度,该算法才可以实时跟踪到姿态,如果物体运动太快,那么该算法会失效。
(说到这里,真心有必要采用动态的步长算法啊!)所以在这里,我们让alpha尽可能大,用于跟踪物体高速运动(不能太大,太大了会导致静态性能差)。
那么此时就比较大,由于beta比较小,所以上式就近似为:Beta本来就小,采样时间又非常小(就是控制周期,大伙一般为2~4ms)。
所以近乎为0。
由于alpha假设为比较大的值,那么对于梯度下降法而言:该公式右边的就占有绝大比分比例,以至于上次姿态的可以忽略不计,也就是说直接由反梯度方向的迭代值就直接可以达到目标姿态(至于为什么,笔者在这里也不是清楚,只能这么解释,关于这点,Madgwick在论文中该部分我看的不是很明白,希望有人可以指导一下)。
基于这个假设,有:现在,将这些公式全部代入到,其中四元数微分方程未给出:可以得到最终的梯度下降法的姿态融合算法公式:上述公式的实现流程图:写到这里,陀螺仪和加速度计的梯度下降法姿态融合算法就解说完毕。
接下来在这个基础之上,进一步解释融合地磁计的梯度下降算法。
其实地磁计的融合算法与先前讨论的加速度计融合算法如出一辙。
如果单独用地磁计进行梯度下降融合算法,那么和加速度计是一模一样的。
现在是两者的融合,所以原先代表加速度计的3X1的变成了现在的6X1的上式公式中的后3列地磁计部分的由来我就不做详细推导了,这部分内容详见笔者的另一篇文章《四元数姿态解算中的地磁计融合解读》。
那么同加速度计处理一样,对上式求导,得到雅可比矩阵下面的工作就是得到有地磁融合的梯度计算式:很明显,公式左边必须满足4X1的矩阵,表示四元数的梯度修正增量。
我们现在来看等式右边。