Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍

2023-05-16

一、开篇

        很久没更新blog了, 最近研究的东西比较杂乱,也整理了很多东西,没有来的及更新,最近发现很多小伙伴都开始写blog了,在不更新就要“被落后了”。兄弟们,等等我啊~~~

        转了这么久又回到了姿态解算部分,最近研究了现有的几种关于姿态解算的实现算法,理论大都相通,请各位耐心看完。 希望阅读本部分的读者对姿态解算算法有一定基础的认识,该部分涉及了常用的三种姿态解算算法:Explicit Complementary Filter(ECF)、Extended Kalman Filter(EKF)、Gradient Descent Filter(GD)。本篇只做大致介绍,不结合代码分析,后续会结合代码分析算法单独出文章。

        现有的开源的姿态解算算法的代码实现在如下地址都可以找到,里面涉及了很多的姿态解算算法,慢慢的一个个的扣吧。

        链接:https://developer.mbed.org/users/gke/code/UAVXArm-GKE/file/90292f8bd179/attitude.c


三、实验平台

Software Version:PX4Firmware

Hardware Version:pixhawk

IDE:eclipse Juno (Windows)

四、正文

        经过近一段时间的研究,主要是关于多旋翼无人机姿态解算算法的研究,开源PX4源代码里面默认使用的是基于mahony的互补滤波算法(explicit complement filter)进行姿态解算的;还有一套备用姿态解算算法是基于kalman的EKF(extended kalman filter);然后呢,其实还有一套PX4源代码中尚未涉及的基于madgwick的梯度下降算法(gradient descent)。

1.1、三套不同的算法各有优势可有优缺点。

        三套算法都可以使用,很多公司偏向于EKF,所以对EKF的要求还是比较高的,慢慢撸EKF吧,不然工作就愁了。小四轴用的比较多的还是互补滤波算法,尤其是大学生参加比赛也好,个人爱好也好,基于STM32自己制作小四轴的大多基于这套(我见过的很多都是用的CF,可能也有很多用的别的算法吧,不用太纠结这个)。梯度下降用的属于最少的了吧。最后出场的就是大头了:EKF;啥都别说了,好好学习它没错。

1.1.1、mahony算法

        Mahony算法即所谓的互补滤波算法,通过PID反馈控制器把误差量反馈补偿修正陀螺仪的误差。Mahony的互补滤波算法是基于IMU系统的,即陀螺仪和加速度计,过程中不涉及磁力计的修正。而我们使用过程中一般都是AHRS系统(即MARG:Magnetic、Angular Rate、Gravity),这个就需要寻求另外的算法或者基于mahony算法进行改进。PX4源代码中就是使用的改进的mahony算法,即加入了磁力计数据和GPS数据进行姿态解算。该算法是最简单和最容易实现的算法,PX4姿态解算默认的就是使用的这个。但是滤波器截止频率不好确定且与采样频率有关,Kp大截止频率就大。

        关于这一块,现在研究的比较多就是如何实现自适应调参。固定的参数不能获得所有情况下的最优运动姿态角,可以设计参数可调的自适应算法在不同运动状态下进行调节参数的大小。其参数调节规则为:正常运动状态情况下,Kp和Ki值取为系统初始化值;当运动体具有较大运动加速度或姿态变化剧烈时,应选择较小的Kp值(可取其初始化值的0.1倍),而Ki值应在同一数量级内适当取大一点。具体取值需根据实际应用系统选取。

        Mahony论文:《AComplementary Filter for Attitude Estimation of a Fixed-Wing UAV》和《NonlinearComplementary Filters on the Special Orthogonal Group》

        Mahony团队发表了太多的论文了,有兴趣的可以到researchgate查看:

        链接:https://www.researchgate.net/profile/Robert_Mahony/publications/3

Fig.1 Explicit Complementary Filter

1.1.2 EKF算法

        EKF俗称扩展卡尔曼滤波算法,优点不言而喻。补充一句:Kalman还活着,还活着呢~~~

        EKF是出了名的计算量大,因为算法实现过程在不范是各种矩阵运算,对处理器的运算速度和精度要求很高对MCU的主频要求比较大,再加上系统的非线性,难以建立稳定可靠的状态方程以及合适的过程噪声协方差阵Q以及测量噪声协方差阵R。一言以蔽之,就是CPU计算负荷大。但是理解了KF以后,对整合滤波过程还是比较清晰的,很多公司都要求必须会EKF算法,优势就是在于处理过程中的预测和修正,其中一点就是可以估计陀螺仪的bias;在算法的计算处理过程中每一次都在不停的修正K和bias,相当于动态自适应算法了,主要就是调好Q、R。所以得把EKF搞懂,虽然比较难,但是必须知难而上。后续会根据直接KF求欧拉角和EKF求取四元数来更新blog,kalman filter相当有研究价值。

        相关论文:《A Double-Stage Kalman Filter for Orientation TrackingWith an Integrated Processor in 9-D IMU

Fig.2 Extended Kalman Filter

1.1.3、梯度下降法

        The Gradient Descent是madgwick在2010搞出来的一套算法,其核心思想是将用加速度计和磁力计通过梯度下降法得到的姿态四元数与由陀螺仪积分得到的姿态,进行线性融合,得到最优的姿态。在算法实现过程中需要了解目标函数的建立,梯度下降法是根据目标函数求取误差向量的最小值的,这一点在madgwick的论文中尚未提及,应该是觉得默认大家都懂这个吧。

        该算法首先是只用陀螺仪数据根据一阶毕卡更新四元数,然后才是梯度下降法对加速度数据和磁力计数据进行处理以便求出最小的误差四元数,最后根据权重值(线性)把两者融合到一起得到最终的姿态四元数。使用梯度下降法就是对加速度数据和磁力计数据和相应参考向量求取误差量,这一部分和mahony_base算法非常类似,mahony_base是利用向量的叉乘求取量测值和参考向量的误差的,而梯度下降法是根据反梯度方向迭代求取最小误差的(理论基础就是构造目标函数使用梯度下降法求取误差向量的最小值)。过程中最重要就是参数β需要通过实验进行确定gyro的测量噪声(measurement error)。

        该算法适用于IMU和AHRS系统,其明显特点就是计算量小(computationally inexpensive),低频有效性(比如10hz)。Madgwick说该算法最后的精度比kalman_base算法要好,我也不知道,没实际测试过;基于梯度下降的数据融合算法能够显著降低对处理器速度的要求。

        Madgwick论文:《An efficient orientation filter for inertial and inertial magneticsensor arrays》和《Estimation of IMU and MARG orientation using agradient descent algorithm》。梯度wiki:https://en.wikipedia.org/wiki/Gradient_descent

        算法代码试下:http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/


Fig.3 Complete Orientation Filter

五、结论

        上述三种算法都是以陀螺仪采集的角速度数据位主要控制量,通过不同的算法处理加速度数据和磁力计数据对由陀螺仪估计的姿态进行修正补偿。比如mahony_base算法是通过构造PID反馈控制器实现对由陀螺仪估计的的姿态修正的,主要过程是基于重力或者重力和磁力参考向量修正陀螺仪数据,最后根据一阶毕卡(或多阶)更新姿态四元数;EKF是通过量测方程实现对由陀螺仪估计的姿态角修正的;Gradient descent是通过两种算法的融合来进行姿态解算的,首先是只用陀螺仪数据根据一阶毕卡更新四元数,然后才是梯度下降法对加速度数据和磁力计数据进行处理以便求出最小的误差四元数,最后根据权重值把两者融合到一起得到最终的姿态四元数。如果kalman算法是自适应的,那解算精度就比梯度下降算法强了。

        综上所述,姿态解算不过就是利用陀螺仪的高动态性能估计实时的姿态,但是由于陀螺仪固有的缺陷问题,导致随着时间的漂移实时的姿态估计的越来越不准确,所以呢,找一个也能估计姿态的sensor来修正一下,但是呢,总不能用两个陀螺仪吧,可以要找一个可以和陀螺仪固有缺陷相互补的sensor,那就是加速计了,无漂移,低频特性好。那么为何不直接只用加速度计进行姿态估计呢?原因就在于它的高频特性太烂,响应时间久,比如想实现一个3°角度变化量,多旋翼飞行速度很快,加速计响应时间来个上百ms的话,飞机早掉地上上升天了。这个也是为什么PX4里面对姿态控制部分分为两级PID控制的原因所在吧,内环控制角速度响应速度极快,外环控制角度响应速度相对较慢,但是有内环在接近实时的PID反馈修正,所以就不怕飞机升天了。

六、附加题

        经常关注群内的技术讨论有利于快速提升自我水平。所以,在群里水还是有很大好处的~~~好吧,就是找个借口而已~~~

        不知道如何添加附件,只能留网盘了,自己去下载吧。

        360云盘链接:https://yunpan.cn/cReQVk9qMKTGT (提取码:e25f)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍 的相关文章

  • PIXHAWK飞行模式

    PIXHAWK飞行模式 从mission planner中设置pixhawk的飞行模式时 xff0c 一共给出了多种飞行模式 xff0c 分别为 xff1a MANUAL STABILIZED ACRO RATTITUDE ALTCTL P
  • Pixhawk无人机飞行模式详解 (PX4源码)

    我帮大家把飞行模式控制量与特点总结一下 xff0c 方便看代码 xff0c 如下所示 xff1a 辅助模式 Position Mode 位置模式 xff08 定点模式 xff09 横滚俯仰控制角度 xff0c 油门控制上下速度 xff0c
  • SLAM --- VIO 基于 EKF 开源

    1 VIO based on EKF 已知一致性的Visual Inertial EKF SLAM 实现添加链接描述
  • 搜一下会发现CSDN上有不少树莓派连接Pixhawk的,或者ROS连接Pixhawk的

    搜一下会发现CSDN上有不少树莓派连接Pixhawk的 xff0c 或者ROS连接Pixhawk的 xff0c 来进行相对应的实验 看来大家基本都是用Pixhawk 有很多人已经做成了 xff0c 做出来了 xff0c 所以甚至感觉没必要去
  • pixhawk的offboard模式其实是和定高(AltHold) 定点(loiter) 这些模式平级的一个模式

    pixhawk的offboard模式其实是和定高 xff08 AltHold 定点 loiter 这些模式平级的一个模式 所以也是可以通过遥控器进入offboard模式的 不是什么特别的东西 https blog csdn net msq1
  • 通过pixhawk飞行日志读取飞行路线以及对应地图

    px4飞行日志为 bin文件或者 log文件 xff0c 将文件数据导入到flightplot中 xff0c 输出轨迹 xff08 export track xff09 xff0c 下载一个Google地图 xff0c 将保存成的文件在Go
  • 在PX4下更换pixhawk的IMU

    写在前面 出于一些原因 xff0c 这篇文章不给出具体的源码 xff0c 因此博主试着将这篇写成了一篇科普性质的文章 xff0c 如果你认真读的话 xff0c 应该会有收获的 为什么要更换pixhawk的传感器 xff1f 大多数的玩家拿到
  • 关于pixhawk硬件IMU和compass那点事儿

    文章目录 前言一 IMU和compass是什么 xff1f 二 导航坐标系与机体坐标系三 安装IMU xff0c compasss四 hwdef中设置IMU xff0c compass朝向总结 前言 继上一篇讲解了pixhawk的硬件组成
  • apm、pixhawk、pixhack飞控航拍后pos数据提取流程

    apm pixhawk pixhack飞控pos数据提取流程 下载日志 打开log分析 区域omap地图验证 验证之前将log文件使用mission planner进行kml验证 筛选相机pos坐标 xff08 选择CAM xff09 很重
  • Pixhawk-开篇

    Pixhawk 开篇 互联网上关于介绍Pixhawk的文章特别多 有心人自己去网上查看吧 本篇文章未完 可能会有更新 不足请指出 QQ 4862879 说重点 Pixhawk指的是一款开源的硬件 下图的那个 是把原来的PX4FMU 43 P
  • PX4/Pixhawk---高速成为开发人员(Windows)

    1 高速成为开发人员新手教程 xff08 翻译 xff09 官方 1 1 编译环境之版本号控制系统 xff08 1 xff09 安装 MSysGIT 安装完毕后 xff0c 配置GIT 安装注意 安装过程中除了以下一步外 xff0c 其它的
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • Pixhawk之姿态控制篇

    一 开篇 姿态控制篇终于来了 来了 来了 心情爽不爽 xff1f 愉悦不愉悦 xff1f 开心不开心 xff1f 喜欢的话就请我吃顿饭吧 xff0c 哈哈 其实这篇blog一周前就应该写的 xff0c 可惜被上一篇blog霸占了 但是也不算
  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • PX4/Pixhawk---uORB深入理解和应用

    The Instructions of uORB PX4 Pixhawk 软件体系结构 uORB 主题发布 主题订阅 1 简介 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c
  • 搭建pixhawk飞控无人小车--替换自带遥控器

    因为小车原装遥控器接收机和电调版整合在一个小板子上 xff0c 且没有相关资料 xff0c 无法接入飞控 因此单独购买遥控器 在某宝上购买富斯遥控器i6 xff0c 总共六个通道 三个双向开关 一个三向开关 遥控器简单入门视频如下 xff0
  • win7下 pixhawk (ardupilot) 的编译

    前几天都在搞pixhawk源码编译问题 xff0c 什么在window下用Console或者eclipse xff0c 还是在Ubuntu下 xff0c 都做了 xff0c 而且把 mk文件都看了 xff0c 结果还是有bug 总结一下三种
  • DroneKit教程(二):控制Pixhawk示例

    DroneKit教程 xff08 二 xff09 xff1a 控制Pixhawk示例 本篇提供了一个简单的示例 xff0c 配以详细的注释说明不同语句的功能 xff0c 希望能给各位一个总体的框架和印象 该示例文件改写自DroneKit的官
  • pixhawk px4 commander.cpp

    对于复杂的函数 xff0c 要做的就是看函数的输入是什么 来自哪里 xff0c 经过处理后得到什么 给谁用 xff0c 这样就可以把程序逻辑理清 中间的分析就是看函数如何处理的 span class hljs keyword extern
  • Pixhawk WIFI模块Station模式配置

    Pixhawk WIFI模块配置 最近在鼓捣Pixhawk的飞控 xff0c 用来控制双桨的无人船 xff0c 固件刷的最新的ArduRover4 0 0 xff0c 经过扒论坛 xff0c 现场调试 xff0c 终于能让一艘船按照航点前行

随机推荐

  • UE4数字人驱动(一)—坐标系转换

    好记性不如烂笔头 xff0c 之前通过研究VRPN实现了自定义的设备添加 xff0c 现在需要在UE4里利用采集的人体运动数据进行数字人驱动 整个功能实现包括 xff1a UE4端VRPN数据接收 数据坐标系转化 动捕骨骼与数字人骨骼匹配与
  • vscode下cmake工程环境配置以及调试配置(c++)

    1 准备工作 1 1MinGW的下载 MinGW将其托管到sourceforge上了 xff0c 也可以前往sourceforge下载 xff1a https sourceforge net projects mingw w64 files
  • 真香!腾讯竟然又偷偷开源了一套Android原生UI框架!

    今天在浏览技术新闻的时候 xff0c 发现腾讯就在今天开源了一套 Android 原生的 UI 框架 你们有没有发现 xff0c 腾讯特别喜欢干这种事 xff0c 哪一种事呢 xff1f 喜欢开源 UI 框架 xff0c 小程序也是这样的
  • STM32 Keil5报错-Target uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available-安装编译器解决

    现象 Keil MDK 5 3 6 编译代码报错 xff1a Target uses ARM Compiler Default Compiler Version 5 which is not available Rebuild starte
  • prometheus编译安装

    prometheus是搜集应用程序所使用的CPU 内存 以及磁盘使用大小的神器 xff0c 它可以根据用户所配置的性能阀值给出相应的处理 xff0c 比如 邮件告警等 xff0c 在这里就不啰嗦了 xff0c 由于本人也是刚刚学习 所以能说
  • 不同硬件传感器数据之间的时间同步问题

    主要分为硬同步和软同步 硬同步就是用一个硬件触发器 xff0c 直接通过物理信号 xff0c 触发相机和LIDAR记录一个data frame 软同步提供一个相同的时间源 xff08 一般都是主控电脑utc时间 xff09 给相机和LIDA
  • 多传感器融合定位开源工程与论文

    目录 1 LIC Fusion xff1a 基于激光雷达 惯性导航和相机结合的里程计 2 使用点线特征配合激光雷达辅助的单目视觉里程计 3 间歇的GPS辅助VIO xff1a 在线初始化和标定 4 强大的高精度视觉惯性激光SLAM系统 5
  • [BLE]CC2640之定时器(Clock)事件

    一 定时器 xff08 Clock xff09 所谓定时器本质上递减计数器 xff0c 当计数器减到零时可以触发某种动作的执行 这种动作可以通过回调函数来实现 xff0c 当定时器计时完成后 xff0c 自定义的回调函数会立即被调用 回调函
  • [BLE]低功耗蓝牙介绍

    一 BLE的协议栈框架 BLE协议栈包括两个部分 xff0c 主机 Host 和控制器 Controller 二者通过HCI Host Controller Interface 标准接口相互通信 常用的单芯片单模BLE芯片有TI的CC254
  • [BLE]低功耗蓝牙之GAP、GATT

    一 开篇 本篇主要介绍一下关于BLE开发过程中必须了解的两个协议 xff1a GAP xff08 通用访问协议 xff09 GATT xff08 通用属性协议 xff09 两个协议都隶属于Host层 xff0c 直接关系到应用层开发 xff
  • [memory]虚拟地址空间分布

    一 开篇 踏入嵌入式软件行业也接近2年了 xff0c 从研一开学起懵懵懂懂的开始学习C语言 xff0c 由于本科时对这方面了解的少之又少 xff0c 所以学起来比较困难 xff0c 但是有一群无私奉献的小伙伴 xff0c 慢慢的 xff0c
  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

    一 开篇 您有无人机么 xff1f 没有 那赶紧去某宝买一套 昨天 开会开到接近下午一点钟 xff0c 收获相当大 xff0c 原本不太清楚的ardupilot框架现在也大致熟悉了 xff0c 接下来主要就是结合源码了解其控制过程了 xff
  • RT-Thread学习笔记(11):互斥量

    目录 互斥量的优先级继承机制互斥量和二值信号量的区别 互斥量的运作机制互斥量控制块 互斥量的优先级继承机制 在RT Thread操作系统中为了降低优先级翻转问题利用了优先级继承算法 优先级继承算法是指 xff0c 暂时提高某个占有某种资源的
  • [BLE]CC2640之ADC功能实现和供电电压的采集

    一 开篇 Write programs that do one thing and do it well 发现很多人关于使用CC2640 CC2650的过程中比较难以应对的问题就是实现ADC xff0c 为了方便大家 xff0c 所以有了本
  • [Index]博文索引

    为了方便查看需要的博文 xff0c 在此给出所有博文的索引链接地址 UAV Software Version xff1a ArduCopter xff08 Ver 3 3 xff09 Hardware Version xff1a pixha
  • Pixhawk之姿态解算篇(1)_入门篇(DCM Nomalize)

    一 开篇 慢慢的 慢慢的 慢慢的就快要到飞控的主要部分了 xff0c 飞控飞控就是所谓的飞行控制呗 xff0c 一个是姿态解算一个是姿态控制 xff0c 解算是解算 xff0c 控制是控制 xff0c 各自负责各自的任务 xff0c 我也不
  • Pixhawk之姿态解算篇(4)_补充篇

    一 开篇 大家期待已久的第四篇来了 xff0c 但是本篇可能比较水啊 见谅 首先 xff0c 上一周没有什么收获 xff0c 虽然看了不少的论文 xff0c 但是却没有什么质的飞越 看的论文都是关于姿态解算的 xff0c 用的算法大部分也都
  • Pixhawk之学习杂谈

    一 开篇 距离上一篇博文已经很久了 xff0c 最近主要就是参加了几家公司的电话面试 xff0c 思考了一些问题 xff0c 本身就是半路杀进无人机领域的门外汉 对整个飞行控制部分理解的也是皮毛的皮毛 xff0c 经过几家面试之后 xff0
  • Pixhawk之姿态控制篇(2)_控制策略

    一 开篇 写在前面 xff1a 先占坑 现在关于该部分内部还在完善 xff0c 后续不上 三 实验平台 Software Version xff1a PX4Firmware Hardware Version xff1a pixhawk ID
  • Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍

    一 开篇 很久没更新blog了 xff0c 最近研究的东西比较杂乱 xff0c 也整理了很多东西 xff0c 没有来的及更新 xff0c 最近发现很多小伙伴都开始写blog了 xff0c 在不更新就要 被落后了 兄弟们 xff0c 等等我啊