PX4中四元数更新(毕卡求解法与一阶龙格库塔)
文章目录
- 一、四元数更新的毕卡求解
- 二、四元数更新的一阶龙格库塔
- 三、两种方法的区别与联系
- 四、PX4中的四元数更新
PX4的EKF算法和mahony算法都涉及了四元数的更新,但是它们的更新方法稍微有点区别,分别采用了毕卡求解法和一阶龙格库塔更新。这篇博客主要是记录一下这两种四元数更新方法的联系与区别。
一、四元数更新的毕卡求解
参考秦永元老师的《惯性导航》以及严恭敏老师的《捷联惯导算法与组合导航原理讲义》的以下内容:
由以上可知,根据四元数的微分方程(2.4-37)进行毕卡求解,其解的形式为(2.4-43)。
二、四元数更新的一阶龙格库塔
参考文章四元数与姿态解算完全解析及资料汇总,一阶龙格库塔的更新方法如下。
三、两种方法的区别与联系
由(2.4-43)对于毕卡求解而言,最终的结果是在原来的四元数基础上,后乘了一个增量四元数;而对于一阶龙格库塔法而言,是在原来的四元数上加了一个四元数增量。毕卡求解法,输入是角增量,而一阶龙格库塔法,输入是角速率与积分时间。毕卡求解法涉及了正余弦函数的计算,相比于一阶龙格库塔而言,计算量更大。
从公式来看,如果角度较大,毕卡求解法依然可以进行求解,而一阶龙格库塔法误差会相对较大。但是在小角度的情况下,如果将毕卡求解法中的旋转角看作小量,取其一阶近似(sinα=α,cosα=1sin\alpha=\alpha, cos\alpha=1sinα=α,cosα=1),其表达式实际和一阶龙格库塔更新法相同。
有时候,我们根据旋转前和旋转后的四元数,来计算绕body系每个轴旋转的角度(一般角度较大),这时候我们也是用的毕卡求解法的公式进行逆向运算,即先求四元数增量dq,再计算角度。
四、PX4中的四元数更新
在EKF算法中采用了毕卡求解,具体可参见eck.cpp,Ekf::predictState()函数中的相关代码如下,根据修正后的陀螺积分值corrected_delta_ang计算四元数增量dq,并乘在原来的四元数之后。打开AxisAnglef就可以看到计算方法与毕卡求解法一致。
// apply imu bias corrections
Vector3f corrected_delta_ang = _imu_sample_delayed.delta_ang - _state.delta_ang_bias;// subtract component of angular rate due to earth rotation
corrected_delta_ang -= _R_to_earth.transpose() * _earth_rate_NED * _imu_sample_delayed.delta_ang_dt;const Quatf dq(AxisAnglef{corrected_delta_ang});// rotate the previous quaternion by the delta quaternion using a quaternion multiplication
_state.quat_nominal = (_state.quat_nominal * dq).normalized();_R_to_earth = Dcmf(_state.quat_nominal);
在PX4的mahony算法中则采用了一阶龙格库塔法,具体可参见attitude_estimator_q_main.cpp,attitudeEstimatorQ::update函数中相关代码如下,打开derivative1函数可以看到和一阶龙格库塔的计算方法一致:
_rates = _gyro + _gyro_bias;// Feed forward gyrocorr += _rates;// Apply correction to state_q += _q.derivative1(corr) * dt;// Normalize quaternion_q.normalize();
PX4中四元数更新(毕卡求解法与一阶龙格库塔)相关推荐
- [常微分方程的数值解法系列五] 龙格-库塔(RK4)法
龙格-库塔法 简介 基本思想 具体方法 一阶 二阶 求解参数 特殊二阶 三阶 高阶 步长选择 例子 在惯性导航以及VIO等实际问题中利用IMU求解位姿需要对IMU测量值进行积分得到需要的位置和姿态,其 ...
- 数据库候选关键词怎么求_关系模式中候选关键字的图论求解法
关系模式中候选关键字的图论求解法 李 莉 [摘 要] 文章首先介绍了函数依赖图的概念及理论,并应用该理论对数据库理 论和实际问题中关系模式候选关键字的求解问题进行了深入系统的讨论,并用 该方法解决了关 ...
- 二阶龙格库塔公式推导_[常微分方程的数值解法系列五] 龙格-库塔(RK4)法
在惯性导航以及VIO等实际问题中利用IMU求解位姿需要对IMU测量值进行积分得到需要的位置和姿态,其中主要就是求解微分方程.但之前求解微分方程的解析方法主要是应用于一些简单和特殊的微分方程求解中,对于 ...
- 外推法程序matlab,急求用MATLAB用龙格库塔和外推法解一阶微分方程
共回答了21个问题采纳率:81% f=inline('-y+x+1','x','y'); %微分方程的右边项 dx=0.05; %x方向步长 xleft=0; %区域的左边界 xright=10; % ...
- 用四阶龙格-库塔方法求微分方程组
最近一段时间再忙期末考试,小学期课程设计的东西,没怎么更新博客.... 更新一个用四阶龙格库塔方法求解脉冲微分方程,题目来源是一篇论文<Impulsive control of projecti ...
- 捷联惯导基础知识之一(姿态更新的毕卡算法、龙格库塔算法、及精确数值解法)
一.介绍旋转矢量以及由旋转矢量更新四元数 等效旋转矢量微分方程(Bortz方程): 经过理论和近似推导: 单位四元数与旋转矢量关系: 单位四元数与三角函数的关系: 四元数更新方程:利用旋转矢量,考虑了 ...
- 姿态解算过程中四元数的更新
本文内容来自 [组合导航]四元数的运算及四元数微分理解 在之前的文章中,我们已经得到了四元数的微分表达形式:进一步地,我们需要将微分表达式离散化才能在嵌入式平台中实现基于四元数的姿态更新. 四元数的微 ...
- 密码学——Hill体制密码中已知明文M和密文C求解密钥矩阵K的两种方法之逆矩阵求解法和待定系数求解法
本文主要解决古典密码中的Hill体制密码在已知明文M和密文C的情况下求解密钥矩阵K的两种方法:①求逆矩阵②待定系数法. 如若不懂Hill体制的古典密码可以参照我上一篇文章密码学--几种典型的古典密码体 ...
- PX4中vtol_att_control 源码解析
px4中vtol姿态控制源码分析 /src/modules/vtol_att_control/文件夹中包含vtol_att_control_main.vtol_type.standard/tailsi ...
- 【深度学习】神经网络中几个常用的求导公式
亲爱的朋友们,多多有一段时间没有更新啦,主要是我在学习transformers突然开始思考几个神经网络相关的基本问题(模型结构越写越复杂,调包效果越来越好,是否还记得为什么而出发呢?),读者朋友 ...
最新文章
- android get请求最长字符串,android – Retrofit @GET – 如何显示请求字符串?
- 深度解析mysql登录原理
- 哈佛大学推荐的20个快乐习惯
- 启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例
- 000 SpringMVC介绍
- 【离散数学中的数据结构与算法】四 加法法则与乘法法则
- Flash与jsp通信类封装
- Flutter Row和 Column 布局、线性布局概述
- Shell中 2/dev/null
- JavaScript深入之从原型到原型链
- android5.1去掉开机锁屏
- [培训-DSP快速入门-1]:DSP概述(基本框架、CPU, GPU, FPGA比较,常见型号)
- 几张趣图助你理解HTTP状态码
- matlab截掉空间曲面一部分,用Matlab作空间曲面的切平面及法线图像.ppt
- Hrbust 1162 魔女 【dp】
- 【前端技巧】文本内容单行省略及多行省略
- 2022DASCTF Apr X FATE 防疫挑战赛 部分web复现
- 计算机上的enc代表什么,对讲机上的ENC/SQL,PWR,MONI,PTT按扭都是什么意思?
- T大计算机科学本科参考书目
- 步入社会的第一个迷茫期