【MATLAB例程】三维组合导航,滤波使用EKF,带严格的惯导推算、雅克比求解函数,图像对比滤波前后的速度、位置、姿态

在这里插入图片描述

文章目录

  • 程序介绍
    • 系统建模
    • 滤波框架
    • 仿真设置
    • 性能对比
    • 代码优点
  • 运行结果
  • MATLAB源代码

程序介绍

本程序实现了 三维状态量的扩展卡尔曼滤波(EKF)组合导航仿真,采用严格的15维误差状态模型,状态向量包括:

x=[pxpypzvxvyvzϕθψbgxbgybgzbaxbaybaz]Tx = \begin{bmatrix} p_x & p_y & p_z & v_x & v_y & v_z & \phi & \theta & \psi & b_g^x & b_g^y & b_g^z & b_a^x & b_a^y & b_a^z \end{bmatrix}^T x=[pxpypzvxvyvzϕθψbgxbgybgzbaxbaybaz]T

其中,位置 ppp、速度 vvv、姿态欧拉角 (ϕ,θ,ψ)(\phi, \theta, \psi)(ϕ,θ,ψ)、陀螺偏差 bgb_gbg、加速度计偏差 bab_aba 构成完整的15维误差状态。

系统建模

  • 过程模型 由IMU观测驱动,采用离散状态转移函数:

pk+1=pk+vkΔtvk+1=vk+(Cbn(fm−ba)−g)ΔtΘk+1=Θk+(ωm−bg)Δtbg,ba视为随机游走模型\begin{aligned} p_{k+1} &= p_k + v_k \Delta t \\ v_{k+1} &= v_k + \big(C_{bn}(f_m - b_a) - g\big)\Delta t \\ \Theta_{k+1} &= \Theta_k + (\omega_m - b_g)\Delta t \\ b_g, b_a & \ \text{视为随机游走模型} \end{aligned} pk+1vk+1Θk+1bg,ba=pk+vkΔt=vk+(Cbn(fmba)g)Δt=Θk+(ωmbg)Δt 视为随机游走模型

其中,fm,ωmf_m, \omega_mfm,ωm 分别为测得的加速度与角速度,CbnC_{bn}Cbn 为姿态方向余弦矩阵。

  • 观测模型 来自GNSS,观测量为位置和速度

滤波框架

扩展卡尔曼滤波按以下步骤实现:

  • 预测:

x^k∣k−1=f(x^k−1,uk−1)\hat{x}_{k|k-1} = f(\hat{x}_{k-1}, u_{k-1}) x^kk1=f(x^k1,uk1)

Pk∣k−1=FPk−1FT+QP_{k|k-1} = F P_{k-1} F^T + Q Pkk1=FPk1FT+Q

  • 更新:
    若有GNSS观测:

Kk=Pk∣k−1HT(HPk∣k−1HT+R)−1K_k = P_{k|k-1} H^T (H P_{k|k-1} H^T + R)^{-1} Kk=Pkk1HT(HPkk1HT+R)1

x^k=x^k∣k−1+Kk(zk−h(x^k∣k−1))\hat{x}_{k} = \hat{x}_{k|k-1} + K_k(z_k - h(\hat{x}_{k|k-1})) x^k=x^kk1+Kk(zkh(x^kk1))

Pk=(I−KkH)Pk∣k−1P_k = (I - K_k H) P_{k|k-1} Pk=(IKkH)Pkk1

其中,FFFHHH 分别为系统雅可比矩阵和观测雅可比矩阵。

仿真设置

  • 真实轨迹为 螺旋上升运动,即圆周运动叠加线性爬升。
  • IMU数据由真实运动加噪声和随机偏差生成。
  • GNSS每秒输出一次位置与速度观测。

性能对比

程序对比了三种轨迹:

  1. 真实轨迹(蓝线)
  2. 纯IMU积分结果(红线)
  3. EKF融合结果(黑线)
    并绘制位置、速度、姿态曲线及误差随时间的变化,计算均方根误差 (RMSE) 作为性能指标。

代码优点

  • 使用严格的 15维误差状态建模,保证了惯导/GNSS组合导航的一致性推导。
  • 包含 状态转移雅可比矩阵观测雅可比矩阵 的显式计算,便于理论分析与扩展。
  • 程序结果直观展示了 EKF在三维导航中的精度改进:有效抑制纯IMU积分的发散,显著降低位置与速度误差。

运行结果

三维轨迹对比:
在这里插入图片描述
各轴速度、位置、姿态对比:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

误差对比:
在这里插入图片描述

MATLAB源代码

部分代码:

% 三维状态量的EKF例程(严格的组合导航推导)
% 基于15维误差状态模型:位置(3)、速度(3)、姿态(3)、陀螺偏差(3)、加速度计偏差(3)
% 作者:matlabfilter
% 2025-08-25/Ver1 clear; clc; close all;
rng(0); % 固定随机种子%% 系统参数设置
dt = 0.1;           % 采样时间间隔 (s)
total_time = 100;   % 总仿真时间 (s)
N = total_time / dt; % 采样点数%% 噪声参数设置
% IMU噪声参数
gyro_noise_std = 0.01 * pi/180;      % 陀螺噪声标准差 (rad/s)
accel_noise_std = 0.001;             % 加速度计噪声标准差 (m/s^2)
gyro_bias_std = 0.001 * pi/180;      % 陀螺偏差标准差 (rad/s)
accel_bias_std = 0.0001;             % 加速度计偏差标准差 (m/s^2)% GNSS观测噪声
gnss_pos_noise_std = 3;             % GNSS位置噪声标准差 (m)
gnss_vel_noise_std = 0.1;           % GNSS速度噪声标准差 (m/s)%% 过程噪声协方差矩阵Q (15×15)
% 状态顺序:[位置(3), 速度(3), 姿态(3), 陀螺偏差(3), 加速度计偏差(3)]
Q = zeros(15, 15);
% 位置噪声(通过速度积分产生)
Q(1:3, 1:3) = eye(3) * (accel_noise_std * dt^2 / 2)^2;
% 速度噪声
Q(4:6, 4:6) = eye(3) * (accel_noise_std * dt)^2;
% 姿态噪声
Q(7:9, 7:9) = eye(3) * (gyro_noise_std * dt)^2;
% 陀螺偏差噪声
Q(10:12, 10:12) = eye(3) * (gyro_bias_std * dt)^2;
% 加速度计偏差噪声
Q(13:15, 13:15) = eye(3) * (accel_bias_std * dt)^2;

完整代码:

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

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

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

相关文章

港资企业在大陆,如何靠 SD-WAN 专线畅连香港?

在当前市场形势下,港资企业在大陆的业务布局不断拓展,企业间访问香港总部系统以及香港员工到内陆出差时访问相关系统,成为日常运营的高频需求。然而,网络问题却常常阻碍业务的顺畅开展,基于 SD-WAN 专线的到香港加速网…

并发编程——08 Semaphore源码分析

1 概述Semaphore 是基于 AQS CAS 实现的,可根据构造参数的布尔值,选择使用公平锁,还是非公平锁。Semaphore 默认使用非公平锁;2 构造函数 // AQS的实现 private final Sync sync;// 默认使用非公平锁 public Semaphore(int permi…

Java全栈开发面试实战:从基础到微服务的深度解析

Java全栈开发面试实战:从基础到微服务的深度解析 一、面试开场 面试官(中年工程师,穿着休闲但专业):你好,我是李工,今天来聊一下你的技术背景。你之前在XX科技做全栈开发,对吧&#…

CVPR深度学习论文创新合集拆解:模型训练速度算提升

关注gongzhonghao【CVPR顶会精选】大语言模型扩散Transformer的深度融合,让文本到图像生成更精准、细节更丰富;同时,专家轨迹正则化深度强化学习在自动对焦中的稳定加速表现,也展示了深度学习与轨迹建模结合的潜力。这样的组合正在…

【智能体】零代码学习 Coze 智能体(2)创建智能体的完整步骤

欢迎关注【AGI使用教程】 专栏 【智能体】零代码学习 Coze 智能体(1) 【智能体】零代码学习 Coze 智能体(2) 【智能体】零代码学习 Coze 智能体(1)1、登录 Coze 平台2、创建智能体3、智能体编排页面4、编写…

WPF和WinFrom区别

WPF 总结Windows Presentation Foundation (WPF) 是微软开发的一个用于构建 Windows 桌面应用程序的用户界面框架。它基于 .NET Framework,提供丰富的图形、动画和数据绑定功能,帮助开发者创建现代化、高性能的应用程序。以下是其核心要点总结&#xff1…

数据库原理及应用_数据库基础_第3章数据库编程_常用系统函数

前言 "<数据库原理及应用>(MySQL版)".以下称为"本书"中3.1.2节内容 引入 数据库常用系统函数的分析.上一篇帖子分析了,数据库函数需要看看能否被C语言函数替代 1.字符串函数 1)计算字符串字符数的函数和字符串长度的函数 语法: CHAR_LENGTH(str)…

回归问题的损失函数

简单来说&#xff0c;​在回归问题中&#xff0c;最常用的损失函数是均方误差&#xff08;MSE, Mean Squared Error&#xff09;和平均绝对误差&#xff08;MAE, Mean Absolute Error&#xff09;​。它们衡量的都是模型预测值&#xff08;ŷ&#xff09;与真实值&#xff08;y…

吴恩达机器学习(四)

一、神经网络神经元模拟逻辑单元&#xff1a;神经网络简单模型&#xff1a;神经网络中的前向传播过程&#xff1a;依次计算激活项&#xff0c;从输入层到隐藏层再到输出层的过程。样例&#xff1a;多元分类&#xff1a;

【重学 MySQL】九十三、MySQL的字符集的修改与底层原理详解

【重学 MySQL】九十三、MySQL的字符集的修改与底层原理详解一、字符集修改方法1. **配置文件修改**2. **SQL命令修改**3. **数据迁移方案**二、底层原理与注意事项1. **字符集与排序规则**2. **存储与性能影响**3. **数据一致性风险**三、常见问题解决1. **乱码问题**2. **性能…

pdf 转图片工具实现

一、安装 sudo yum install poppler-utils pdftoppm -v pdftoppm -png -r 300 a.pdf /tmp/page 运行效果&#xff1a; PDF转图片工具 - 在线PDF转PNG/JPG/TIFF转换器 | 免费在线工具 后台实现&#xff1a; using System.Diagnostics; using System.IO.Compression;namespac…

Zynq开发实践(FPGA之输入、输出整合)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】fpga开发的时候习惯上先把功能拆分成若干个模块。针对这些模块&#xff0c;一个一、个实现好之后&#xff0c;再用wire连接即可。这一点有点像软件编…

【Linux基础】深入理解计算机启动原理:MBR主引导记录详解

目录 引言 1 硬盘分区初始化概述 1.1 为什么需要硬盘分区 1.2 硬盘分区格式的发展 1.3 分区初始化的基本流程 2 MBR详解 2.1 MBR的定义与位置 2.2 MBR的结构详解 2.3 分区表结构详解 2.4 MBR的工作原理 2.5 MBR的引导程序 3 MBR的局限性 3.1 硬盘容量限制 3.2 分…

Linux 线程同步

线程同步 由于线程共享内存&#xff0c;访问共享数据&#xff08;全局变量、堆内存&#xff09;必须进行同步&#xff0c;以防止竞态条件&#xff08;Race Conditions&#xff09;导致数据不一致或程序崩溃。 子线程没有独立的地址空间&#xff0c;数据通常是共享的&#xff1b…

世界模型的典型框架与分类

1.概述 人类和动物智能的一个重要方面是我们对世界的内部模型。我们使用这个模型来预测我们的行为将如何影响我们的环境&#xff0c;预测未来的事件&#xff0c;并计划复杂的行动序列以实现目标。当前大多数机器学习研究都集中在被动理解数据的模型上&#xff0c;例如图像分类…

【Day 35】Linux-Mysql错误总结

&#xff08;一&#xff09;MySQL 基础操作与服务故障类 连接层错误&#xff08;客户端与服务器的连接建立失败&#xff09; 解决 socket 路径、文件存在性及服务可用性问题。 1、MySQL 客户端连接失败&#xff08;报错 “Cant connect to local MySQL server throgh socket…

MYSQL速通(2/5)

六、多表查询1、多表关系①、一对多&#xff08;多对一&#xff09;举例&#xff1a;一个部门对多个员工实现&#xff1a;多的那边建立外键&#xff0c;指向一的那边的主键②、多对多举例&#xff1a;一个学生可选多门课&#xff0c;一门课可被多个学生选实现&#xff1a;建立中…

CRM、ERP、HRP系统有啥区别?

要理解CRM、ERP、HRP系统&#xff0c;需先明确三者的核心定位&#xff08;聚焦客户、企业全资源、特定领域资源&#xff09;&#xff0c;再从管理范围、目标、用户等维度区分。以下是详细解析&#xff1a; 一、各系统核心定义与核心模块 1. CRM系统&#xff1a;客户关系管理系统…

【系统分析师】高分论文:论系统测试技术及应用

【摘要】 2022 年 7月&#xff0c;我作为项目负贵人&#xff0c;参加了某银行的统计数据发布系统建设项目。该项目合同金额230 万元&#xff0c;合同工期为半年。统计数据发布系统的主要目标是为该行建设一个企业级的数据统计、分析、发布平台&#xff0c;实现定制化的数据应用…

第5篇 c++ 函数的多返回值实现-返回多个值

c 函数的多返回值实现std::tuple<Mat, int, double, std::string> AuatoPafackSydstem::GetMatchingValue(Mat mat_img, std::string img_template_path) {Mat a;return {a,1,0.001,""}; }std::tuple<Mat, int, double, std::string> GetMatchingValue(M…