RflySim | 滤波器设计实验二

news2024/11/24 14:47:15

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

滤波器设计实验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.coloradmin.cn/o/1187030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】静态代理

例子: 租房子 角色: 我 (I ) 中介( Proxy ) 房东( host ) Rent 接口 package org.example;public interface Rent {void rent(); }房东 package org.example;public class Host implements Rent{Overridepublic void rent() …

NAT协议

目录 NAT 前言 NAT地址转换表 NAT分类 前言 静态NAT 192.168.1.2访问200.1.1.2执行过程 动态NAT 192.168.1.2访问200.1.1.2执行过程 NAPT 192.168.1.2的5000端口访问200.1.1.2的80端口执行过程 基本命令 配置动态NAPT转换 定义内外网接口 配置NAPT 静态NAPT配置…

NetworkManager 图形化配置 bond

1、在桌面右下角找到网络连接标识,鼠标右击,选择编辑连接,如下图 注意:此次示例使用 ens37 和 ens38 两张网卡组成 bond。在配置 bond 前为了网 络稳定如果子网卡已有网络连接的建议先删除 bond 子网卡的网络连接。 2、单击按钮&a…

Python高级语法----Python异步编程入门

文章目录 异步编程概念asyncio模块基础event loop和coroutineasync与await关键字代码示例结论在现代软件开发中,异步编程已经成为一个不可或缺的概念,尤其是在处理I/O密集型任务和高并发需求时。Python作为一门多范式编程语言,自3.5版本以来,通过引入asyncio模块和async/aw…

UseGalaxy.cn生信云平台文本文件操作手册

文本文件是生物信息学中应用非常广泛的文本格式,甚至可以说是最重要的文件格式,比如常见的测序下机数据Fastq、参考基因组保存格式Fasta、比对文件SAM,以及突变列表VCF,它们都是文本文件。熟练地进行文本文件的处理,对…

facebook分享-错误记录

无法拉起分享 "code":30000,"msg":"fail:API_ERROR: API_ERROR" 1.确认facebook的app_id是否一致 2.确认是否在app_id应用的白名单里,注册meta开发者,然后把主页的user_id给管理员加 A ContentProvider for this app was…

响应式生活常识新闻博客资讯网站模板源码带后台

模板信息: 模板编号:30483 模板编码:UTF8 模板分类:博客、文章、资讯、其他 适合行业:博客类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS&a…

Pandas - 数据转换

数据转换一班包括一列数据转换为多列数据,行列转换,DataFrame转换为字典、DataFrame转换为列表和DataFrame转换为元组等。 1.一列数据转换为多列数据 如原始地址数据为:“广东省 深圳市 罗湖区 xxxx”, 此时如果我们需要按照省来…

解密网易数帆DataOps“三剑客”:从数据开发治理、指标中台到ChatBI

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日,以“数智聚力,共赴新程”为主题的2023网易数字大会在杭州召开。在这次大会上,数据猿采访了网易副总裁、网易数帆总经理汪源,网易数帆大数据产品线总经理余利华,对…

centos7部署Canal与Canal集成使用

1、简介 canal [kə’nl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigge…

项目实战:中央控制器实现(2)-优化Controller,将共性动作抽取到中央控制器

1、FruitController FruitController已经和Web没有关系了,和Web容器解耦,可以脱离Web容器做单元测试 package com.csdn.fruit.controller; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import com.csdn.fruit.dto.R…

Linux C基础(7)

1、二维数组 1.1 概念 本质:元素为一堆数组的数组(数组的数组)数组的特点:(1)数据类型相同 (2)地址连续 1.2 定义 数组:存储类型 数据类型 数组名[元素个数]二维数组&…

TinyEngine 开源低代码引擎首次直播答疑QA合集

前言 10月27日晚8点,OpenTiny 社区开启了 TinyEngine 开源低代码引擎首次答疑直播,本次直播我们通过收集开发者诉求,精心策划和组织了内容,希望提供给大家最明确和清晰的答疑方式。这是 TinyEngine 低代码引擎直播计划的开端&…

什么是数字化管理?产业园区如何进行数字化管理?

工业园区的数字化管理涉及利用技术和数据驱动的工具来优化工业园区环境中的运营、提高效率并改进决策流程。它通常包括使用各种数字技术和数据分析技术来监视、控制和增强公园运营的各个方面。 以下是工业园区数字化管理的一些关键方面以及如何实施: 1.数据收集和…

vue3怎么获取el-form的元素节点

在元素中使用ref设置名称 在ts中通过从element-plus引入formInstance,设置formRef同名名称字段来获取el-form节点

酷开科技持续推动智能投影行业创新发展

近年来,投影仪逐渐成为年轻人追捧的家居时尚单品。据国际数据公司(IDC)报告显示,2022年中国投影机市场总出货量505万台,超80%为家用投影仪。相比于电视,投影仪外观小巧、屏幕大小可调节,无论是卧…

C#中基于.NET6的动态编译技术

前几天要解决动态计算问题,尝试着使用了不同的方法。问题是给定一个包含计算的字符串,在程序运行中得到计算结果,当时考虑了动态编译,在网上查了一些资料完成了这项功能,可是基于不同的.NET平台使用的编程代码相差比较…

sparksql明明插入了但是表里数据是null

现象 将数据插入表的时候,表里的数据是null 代码 原因 建表语句的时候detail字段的类型写成了bigint,而要插入的数据类型是string,所以把建表语句的字段类型改了然后sql文件重跑就解决了

动态轮换住宅代理是什么?为何需要使用它?

随着越来越多的企业完善网络活动,IP代理的重要性变得显而易见。代理可确保顺利、安全且不受限制地访问互联网的大量资源。在不同类型的代理中,轮换代理脱颖而出,那么他哪里有别于其他IP代理呢? 一、什么是动态轮换代理&#xff1f…

Navicat的使用--mysql

表关系 数据库的操作,表字段的设计,一般都由于图形化界面工具Navicat完成。 而表中数据的增删改查,需要熟悉sql语句。 一对一 一对一:一个A对应一个B,一个B对应一个A 将A或B任意一张表的主键设置为外键 一对多 一…