RflySim | 滤波器设计实验二

本讲是关于无人机滤波器,其中包括无人机滤波器简介、测量原理、线性互补滤波器设计、线性互补滤波器参数分析、卡尔曼滤波器设计等。

滤波器设计实验2

卡尔曼滤波器是一种递推线性最小方差估计算法,它的最优估计需满足以下三个条件:

1)无偏性:即估计值的期望等于状态的真值;

2)估计的方差最小;

3)实时性。

假设线性离散系统模型如下:

图片

式中,过程噪声wk-1和观测噪声vk的统计特性为:

图片

卡尔曼滤波算法可总结为如下:

图片

图片

卡尔曼滤波器在进行滤波器估计的同时还产生了误差协方差阵,它可以用于表征估计精度,同时也能用于传感器的健康评估。一般来说,采样周期合理情况下,连续系统可观,离散化的系统也会可观。然而有时候采样周期选择不当,系统可能失去可控性及可观性。因此原则上应该检查离散化系统的可观性。  HkPk|k-1HTk+Pk|k-1需要是H非奇异的,否则kk Pk|k-1HTkHkPk|k-1HTk+Pk)-1无法实现。如果(ФK,K-1,Hk) 不可观,那么卡尔曼滤波器仍然可以运行,只不过不可观的模态没有进行修正,只是递推罢了。极端情况 Hk=0m`n ,那么    

图片

卡尔曼滤波器实现见文件“Attitude_ekf.m”,其主要部分如下

function [ x_aposteriori, P_aposteriori, roll, pitch] =

 Attitude_ekf( dt, z, q, r, x_aposteriori_k, P_aposteriori_k)  

%函数描述:  

%  状态估计的拓展卡尔曼滤波方法

%输入:  

%  dt: 更新周期

%  z: 测量值  

%  q:系统噪声,r:测量噪声

%  x_aposteriori_k: 上一时刻的状态估计

%  P_aposteriori_k: 上一时刻估计协方差

%输出:  

%  x_aposteriori:当前时刻的状态估计

%  P_aposteriori:当前时刻的估计协方差  

%  roll,pitch:欧拉角,单位: rad

w_m = z(1:3);  %角速度测量值  

a_m = z(4:6);  %加速度测量值

g = norm(a_m,2);   %重力加速度

%   w_x_=[ 0,-(wz-bzg, wy-byg;  

%         wz-bzg, 0 ,-(wx-bxg);  

%         -(wy-byg), wx-bxg, 0];  

w_x_ = [0, -(w_m(3) - x_aposteriori_k(3)), w_m(2) -x_aposteriori_k(2);

      w_m(3) - x_aposteriori_k(3), 0, -(w_m(1) - x_aposteriori_k(1));

      -(w_m(2) - x_aposteriori_k(2)), w_m(1) - x_aposteriori_k(1), 0];  

    bCn = eye(3, 3) - w_x_*dt;

 % 预测  

% 更新先验状态矩阵   

x_apriori = zeros(1, 6);    

x_apriori(1: 3) = x_aposteriori_k(1 : 3);  %角速度漂移   

x_apriori(4 : 6) = bCn*x_aposteriori_k(4 : 6);   %加速度归一化值

%[x]x    

x_aposteriori_k_x = [0, -x_aposteriori_k(6), x_aposteriori_k(5);

                        x_aposteriori_k(6), 0, -x_aposteriori_k(4);

                      -x_aposteriori_k(5), x_aposteriori_k(4), 0];

% 更新状态转移矩阵  

PHI = [eye(3, 3), zeros(3, 3);

         -x_aposteriori_k_x*dt, bCn];  

GAMMA = [eye(3, 3)*dt, zeros(3, 3); % 噪声驱动阵

      zeros(3, 3), -x_aposteriori_k_x*dt];

Q = [eye(3, 3)*q(1), zeros(3, 3);

   zeros(3, 3), eye(3, 3)*q(2)];

%  预测误差协方差矩阵

 P_apriori = PHI*P_aposteriori_k*PHI' + GAMMA*Q*GAMMA';

% 更新

R = eye(3, 3)*r(1);  

H_k = [zeros(3, 3), -g*eye(3, 3)];  

%卡尔曼增益

K_k = (P_apriori*H_k')/(H_k*P_apriori*H_k' + R);   

% 状态估计矩阵

x_aposteriori = x_apriori' + K_k*(a_m - H_k*x_apriori');  

% 估计误差协方差  

P_aposteriori = (eye(6, 6) - K_k*H_k)*P_apriori;   

% 计算滚转角和俯仰角,分别对应roll,pitch  

k = x_aposteriori(4 : 6) /norm(x_aposteriori(4 : 6), 2);     

roll = atan2(k(2), k(3));   % 滚转角

pitch = -asin(k(1));     %俯仰角

end

如下图所示的滤波结果及对比图。可以看到在飞行过程中,卡尔曼滤波比线性互补滤波的效果更好,与PX4自带滤波算法效果接近。

图片

注:本实验对应demo文件对于RflySim v3.0以下版本地址为:*\PX4PSP\RflySimAPIs\Exp02_FlightControl\e4-FilterDesign\e4.3;

对于RflySim v3.0及以上版本地址为:*\PX4PSP\RflySimAPIs\5.RflySimFlyCtrl\1.BasicExps\e4-FilterDesign\e4.3。

参考文献:

[1] 全权,杜光勋,赵峙尧,戴训华,任锦瑞,邓恒译.多旋翼飞行器设计与控制[M],电子工业出版社,2018.

[2] 全权,戴训华,王帅.多旋翼飞行器设计与控制实践[M],电子工业出版社,2020.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/184681.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCD充气桨板冲浪板充气泵方案——pcba/芯片方案

LCD充气桨板冲浪板充气泵规格书 一、主要功能介绍: 1、开机默认显示上次设定气压值, 2、测量范围:0~22psi、测量精度:0.5PSI 3、分辨率:0.01 PSI 4、温度范围:-10至50度摄氏 5、5个按键:PSI键、…

python自动化测试(十一):写入、读取、修改Excel表格的数据

目录 一、写入 1.1 安装 xlwt 1.2 增加sheet页 1.2.1 新建sheet页 1.2.2 sheet页写入数据 1.2.3 excel保存 1.2.4 完整代码 1.2.5 同一坐标,重复写入 二、读取 2.1 安装读取模块 2.2 读取sheet页 2.2.1 序号读取shee页 2.2.2 通过sheet页的名称读取she…

快来看看如何拿下7+干湿结合生信思路。赶紧拿起笔记本

今天给同学们分享一篇生信文章“CENPF/CDK1 signaling pathway enhances the progression of adrenocortical carcinoma by regulating the G2/M-phase cell cycle”,这篇文章发表在J Transl Med期刊上,影响因子为7.4。 结果解读: CENPF在AC…

易云维®工厂能耗管理平台系统方案,保证运营质量,推动广东制造企业节能减排

我国《关于完整准确全面贯彻新发展理念推进碳达峰碳中和工作的实施意见》出台,提出了推进碳达峰碳中和工作的总体目标。到2025年,广东具备条件的地区、行业和企业率先实现碳达峰,为全省实现碳达峰、碳中和奠定坚实基础;2030年前实…

Java算法(二):数组元素求和(元素个位和十位不能是 7 ,且只能是偶数)

java算法(二) 需求: ​ 有这样一个数组: 元素是:{68, 27, 95, 88, 171, 996, 51, 210} ​ 求出该数组中满足要求的元素和 ​ 要求是: 求和的元素各位和十位都不能是 7 ,并且只能是偶数 packa…

Android 深色模式切换适配

在Android11上测试 1&#xff0c;把需要适配的资源文件复制一份后缀加上-night&#xff0c;里面就放置变主题后的资源 2&#xff0c;两个主题一个白&#xff0c;一个黑&#xff0c;分别放置在对应的valuse-styles.xml中 <style name"Theme.LaserMachPor" parent&…

【delphi】中 TNetHTTPClient 注意事项

一、TNetHTTPClient 是什么&#xff1f; 用于管理 HTTP 客户端的组件。相当于indy中的TidHTTP控件&#xff0c;是实现HTTP请求的客户端控件。 二、TNetHTTPClient 需要注意什么&#xff1f; 需要注意的是几个Timeout&#xff0c;因为我们使用TNetHTTPClient控件的时候&#x…

046_第三代软件开发-虚拟屏幕键盘

第三代软件开发-虚拟屏幕键盘 文章目录 第三代软件开发-虚拟屏幕键盘项目介绍虚拟屏幕键盘 关键字&#xff1a; Qt、 Qml、 虚拟键盘、 qtvirtualkeyboard、 自定义 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object L…

JavaEE平台技术——MyBatis

JavaEE平台技术——MyBatis 1. 对象关系映射框架——Hibernate、MyBatis2. 对象关系模型映射3. MyBatis的实现机制4. MyBatis的XML定义5. Spring事务 在观看这个之前&#xff0c;大家请查阅前序内容。 &#x1f600;JavaEE的渊源 &#x1f600;&#x1f600;JavaEE平台技术——…

Oracle(13)Maintaining Data Integrity

目录 一、基础知识 1、Data Integrity 数据库的完整性 2、Types of Constraints 约束类型 3、Constraint States 约束状态 4、Guidelines for Constraints 约束准则 二、基础操作 1、Enabling Constraints 启用约束 2、命令方式创建约束 3、修改表创建的约束 4、删除约…

[vue-router]vue3.x Hash路由前缀问题

[vue-router]vue3.x Hash路由前缀问题 问题描述问题分析 问题描述 是在本地开发时&#xff0c;使用的HASH路由&#xff0c;然后在偶然的情况下在/#/前添加了前缀&#xff0c;发现不影响本地的路由的使用&#xff1f;&#xff1f;&#xff1f;&#xff01;&#xff01;&#xf…

2023年11月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2023年11月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

《LeetCode力扣练习》代码随想录——数组(长度最小的子数组---Java)

《LeetCode力扣练习》代码随想录——数组&#xff08;长度最小的子数组—Java&#xff09; 刷题思路来源于 代码随想录 209. 长度最小的子数组 滑动窗口——O(n) class Solution {public int minSubArrayLen(int target, int[] nums) {if(nums.length1){return nums[0]>targ…

Bash 4关联数组:错误“声明:-A:无效选项”

Bash 4 associative arrays: error “declare: -A: invalid option” 就是bash版本太低 1.先确定现在的版本 bash -version 我的就是版本太低 升级新版本bash4.2 即可 升级步骤 1.下载bash-4.2wget http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz 2. 下载完成解压 tar -zxvf…

【FI】FB02中Coding Block字段如何设置为可修改

本文基于S/4 HANA 2022 关于FB02下会计凭证行上的可更改字段的控制&#xff0c;以前以为只受“凭证明细行更变规则”&#xff08;OB32&#xff09;的影响。 今天碰到了Coding Block字段的情况&#xff0c;它不受OB32的影响&#xff0c;而是受表TCOBX控制。 如何确认该字段是Cod…

Python批量导入及导出项目中所安装的类库包到.txt文件(补充)

Python批量导入及导出项目中所安装的类库包到.txt文件 生成requirements文件 建议使用&#xff0c;该方式形成文档最简洁&#xff1a; pip list --formatfreeze > requirements.txt

jenkins Java heap space

jenkins Java heap space&#xff0c;是内存不够。 两个解决方案&#xff1a; 一&#xff0c;修改配置文件 windows系统中&#xff0c;找到Jenkins的安装路径&#xff0c; 修改jenkins.xml 将 -Xmx256m 改为 -Xmx1024m 或者更大 重启jenkins服务。 二&#xff0c;jenkins增…

Python教程之Python中文件路径

文章目录 前言一、Python中文件路径1.绝对路径和相对路径2.目录中的斜杠们3.正则表达式中的斜杠们 二、什么是文件路径&#xff0c;Python中如何书写文件路径&#xff1f;1.Windows上的反斜杠以及OS X和Linux上的正斜杠关于Python技术储备一、Python所有方向的学习路线二、Pyth…

AJAX-解决回调函数地狱问题

一、同步代码和异步代码 1.同步代码 浏览器是按照我们书写代码的顺序一行一行地执行程序的。浏览器会等待代码的解析和工作&#xff0c;在上一行完成之后才会执行下一行。这也使得它成为一个同步程序。 总结来说&#xff1a;逐行执行&#xff0c;需原地等待结果后&#xff0…

CSDN每日一题学习训练——Java版(对给定的两个日期之间的日期进行遍历、子集 II、填充每个节点的下一个右侧节点指针)

版本说明 当前版本号[20231107]。 版本修改说明20231107初版 目录 文章目录 版本说明目录对给定的两个日期之间的日期进行遍历题目解题思路代码思路参考代码 子集 II题目解题思路代码思路参考代码 填充每个节点的下一个右侧节点指针题目解题思路代码思路参考代码 对给定的两…