【MATLAB例程】三维环境,基于TOA的动态轨迹定位,轨迹使用UKF(无迹卡尔曼滤波)进行滤波,模拟TOA/IMU的数据融合

请添加图片描述

本代码实现了一个基于到达时间(TOA)测距的三维定位系统,结合无迹卡尔曼滤波(UKF)对移动目标的轨迹进行优化。代码通过多锚节点(>3)的TOA测量数据,先进行初步定位解算,再通过UKF算法融合运动模型,实现对目标轨迹的高精度估计。

文章目录

  • 代码概述
  • 核心功能
  • 代码结构
  • 关键代码特点
  • 结果示例
  • 代码运行结果
    • 使用说明
  • MATLAB源代码

代码概述

本代码实现了一个基于到达时间(TOA)测距的三维定位系统,结合**无迹卡尔曼滤波(UKF)**对移动目标的轨迹进行优化。代码通过多锚节点(>3)的TOA测量数据,先进行初步定位解算,再通过UKF算法融合运动模型,实现对目标轨迹的高精度估计。

核心功能

  1. TOA定位仿真

    • 在三维空间中生成9个锚节点(baseP),通过三角函数添加随机扰动,模拟实际部署环境。
    • 目标沿预设轨迹(positions)运动:x轴匀速递增,y轴匀速递减,z轴保持恒定。
    • 计算每个锚节点到目标的真实距离(R_real),加入高斯噪声模拟TOA测量误差,生成带噪声的观测距离(R_calcu)。
  2. 最小二乘定位解算

    • 调用position_3dim函数,通过伪逆矩阵(pinv)求解超定方程组,实现目标位置的初步估计(p_out)。
  3. UKF轨迹优化

    • 构建状态空间模型:假设目标匀速运动(实际运动模型需根据场景调整)。
    • 使用Sigma点法处理非线性观测(如代码中Z = [x²/20; y; z]的非线性转换),通过预测-校正步骤优化定位结果。
    • 对比未滤波的纯观测解算(p_out)与UKF滤波结果,验证UKF对噪声的抑制能力。
  4. 可视化与误差分析

    • 三维轨迹图显示真实路径、观测值、UKF估计值及未滤波值的对比。
    • 分轴绘制绝对误差曲线,计算各时刻RMSE(均方根误差),量化定位精度。

代码结构

  1. 参数初始化

    • 设置光速(c)、测距误差(range_err)、目标轨迹(positions)及锚节点坐标(baseP)。
  2. 数据生成

    • 循环计算每个时刻目标的真实位置,生成含噪声的TOA测量数据。
  3. UKF滤波

    • 初始化噪声协方差矩阵(Q, R)及状态变量。
    • Sigma点生成、状态预测、观测更新及协方差调整。
  4. 结果分析

    • 绘制三维轨迹图及误差曲线,输出终点坐标误差及全程RMSE统计。

在这里插入图片描述

关键代码特点

  • 锚节点生成:采用三角函数叠加随机扰动(如sin(1:n)),确保锚节点在三维空间非共面分布,避免定位歧义。
  • 非线性观测模拟:在UKF观测模型中,故意将x坐标平方后除以20(Z = [x²/20; y; z]),测试滤波器处理非线性能力。

结果示例

  • 轨迹对比:UKF估计值(蓝色点)紧密贴合真实轨迹(蓝色线),显著优于未滤波的观测值(散点)和纯惯性模拟(未滤波值)。
  • 误差分析:UKF在各轴上的RMSE均低于直接观测,尤其在X轴(存在非线性观测)提升明显。
  • 统计输出:终点距离误差UKF较纯观测减少约30%~50%,验证滤波有效性。

代码运行结果

定位示意图:
在这里插入图片描述
三轴误差图:
在这里插入图片描述
命令行输出截图:
在这里插入图片描述
RMSE曲线对比(三轴误差合并为距离误差):
在这里插入图片描述

使用说明

  1. 参数调整

    • 修改range_err调整测距噪声强度,QR影响滤波器的收敛速度与稳定性。
    • 调整锚节点数量(n)及生成方式(baseP)以适应不同场景。
  2. 扩展方向

    • 替换运动模型为更复杂的动力学方程(如加速度模型)。
    • 改进观测模型,适配实际传感器的非线性特性。

MATLAB源代码

部分源代码如下:

% TOA测距定位,三维任意(>3)个锚节点,对一个未知点定位、带UKF的轨迹解算
% author:Evand(VX:matlabfilter)
% 2025-03-17/Ver1
clear;clc;close all;
rng(0);
%% 主程序
c = 3e8; %信号传输速度,即光速
range_err = 1e-9; %时钟与时间计算误差
point1 = [1,2,1]; %待求点坐标真值
% 生成目标的运动
positions = repmat(point1,21,1)+[0:0.2:4;0:-0.2:-4;zeros(1,21)]';for i1 = 1:size(positions,1)point1 = positions(i1,:);n = 9; %定义锚节点数量baseP = 2*[sin(1:n)+0.01*[1:n]+1;cos(4*(1:n))+0.01*[1:n]+1;cos(2*(1:n))+0.01*[1:n]+1]';R_real = sqrt(diag((point1-baseP)*(point1'-baseP')));TOA = R_real/c+range_err*randn; %含噪声的传播时间R_calcu = TOA*c;p_out(i1,:) = position_3dim(R_calcu,baseP);end%% UKF部分
% 滤波模型初始化
t = 1:1:size(positions,1); %设置时间序列
Q = 0.01 * diag([1, 1, 1]); % 过程噪声协方差矩阵
w = sqrt(Q) * randn(size(Q, 1), length(t)); % 过程噪声
R = 0.1 * diag([1, 1, 1]); % 观测噪声协方差矩阵
% v = sqrt(R) * randn(size(R, 1), length(t)); % 观测噪声
P0 = 0.2 * eye(3); % 初始状态协方差矩阵
X = zeros(3, length(t)); % 真实状态
X_ukf = zeros(3, length(t)); % 扩展卡尔曼滤波估计的状态
Z = zeros(3, length(t)); % 观测值形式

完整代码下载链接:https://download.csdn.net/download/callmeup/90538614

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

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

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

相关文章

旋转变换原理

旋转变换原理 旋转是仿射变换的一种,通过变换矩阵实现图像绕指定中心旋转,保持直线和平行性不变。其数学表示为: 其中: ( c x , c y ) (c_x, c_y) (cx​,cy​) 是旋转中心。 θ \theta θ 是旋转角度(逆时针为正&…

【计算机网络】DHCP工作原理

DHCP(动态主机配置协议) Dynamic Host Configuration Protocol 基于UDP协议传输 DHCP分配IP地址的过程 (1)DHCP DISCOVER客户机请求 IP 地址: 当一个 DHCP 客户机启动时,客户机还没有 IP 地址,所以客户机要通过 DHC…

应用于汽车车灯电路中的电感产品选型及质量管控标准

随着汽车的智能化与电动化发展,汽车车灯系统逐渐从单一照明功能向集成化、智能化和高能效方向演进。汽车车灯的性能关系着行车安全和驾驶体验,而车规级电感器作为车灯驱动电源电路中的核心元件,其性能直接决定了汽车车灯的效率、可靠性及环境…

MinGW下编译ffmpeg源码时生成compile_commands.json

在前面的博文MinGW下编译nginx源码中,有介绍到使用compiledb工具在MinGW环境中生成compile_commands.json,以为compiledb是捕获的make时的输出,而nginx生成时控制台是有输出编译时的命令行信息的,笔者之前编译过ffmpeg的源码&…

JDBC FetchSize不生效,批量变全量致OOM问题分析

背景 一个简单的基于 JDBC 采集数据库表的功能,当采集 Postgre SQL 某表,其数据量达到 500万左右的时候,程序一启动就将 JVM 堆内存「6G」干满了。 问题是程序中使用了游标的只前进配置,且设置了 fetchSize 属性: q…

OpenCV 图形API(或称G-API)

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 引言 OpenCV 图形API(或称G-API)是一个新的OpenCV模块,旨在使常规图像处理更快且更便携。通过引入一种新的基于图的执行…

注意!ChatGPT 全新 AI 图像功能延迟对免费用户开放

2025 年 3 月 25 日,OpenAI 正式宣布在 ChatGPT 中推出基于 GPT-4o 模型的全新原生图像生成功能。 这一功能允许用户通过对话生成和编辑图像,支持从写实风格到插图风格的多种形式。OpenAI 首席执行官萨姆・奥特曼(Sam Altman)在社…

方阵幂次(矩阵快速幂)

#include <bits/stdc.h> using namespace std;int n; vector<vector<int>> fuc(vector<vector<int>> a,vector<vector<int>> b){ // 矩阵乘法函数vector<vector<int>> f(n,vector<int>(n));for(int i0;i<n;i){…

MySQL-- 多表查询的分类,SQL92与SQL99,7种JOIN的实现,SQL99语法的新特性

目录 一&#xff0c;多表查询的分类 角度1&#xff1a;等值连接 vs 非等值连接 角度2&#xff1a;自连接 vs 非自连接 角度3&#xff1a;内连接 vs 外连接 二&#xff0c;SQL92语法实现内连接&#xff1a;见上&#xff0c;略SQL92语法实现外连接&#xff1a;使用 -…

IEEE PDF Xpress校验出现 :字体无法嵌入问题以及pdf版本问题

文章目录 问题描述一、字体嵌入问题首先查看一下&#xff0c;哪些字体没有被嵌入查看window的font文件夹里的字体下载字体的网站修复字体嵌入问题 二、pdf版本不对 问题描述 在处理IEEE的camera ready的时候&#xff0c;提交到IEEE express的文件没有办法通过validate&#xf…

产生式系统的完整示例——医疗诊断系统(附python代码)

产生式系统在现实社会中依然有很重要的应用价值&#xff0c;为了更好的理解它的构建、推理以及完整的实现过程&#xff0c;本文一医疗诊断系统为例&#xff0c;进行详细说明。以下是一个包含10条规则的医疗诊断产生式系统示例&#xff0c;包含完整的规则定义、推理流程图、Pyth…

【CSS3】02-选择器 + CSS特性 + 背景属性 + 显示模式

本文主要介绍&#xff1a;选择器、CSS属性、背景属性和显示模式的操作写法。 目录 1. 复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器 1.4 交集选择器 2. 伪类选择器 2.1 超链接&#xff08;拓展&#xff09; 3. CSS特性 3.1 继承性 3.2 层叠性 3.3 优先…

清华大学第10讲:迈向未来的AI教学实验396页PPT 探索未来教育的无限可能|附PPT下载方法

导 读INTRODUCTION 今天跟大家分享的是清华大学新闻与传播学院、人工智能学院双聘教授沈阳教授团队出品的《迈向未来的AI教学实验》课程作业集&#xff0c;随着人工智能技术的飞速发展&#xff0c;教育领域也迎来了前所未有的变革。该报告为沈阳教授与学生们在“迈向未来的AI教…

亮数据爬取API爬取亚马逊电商平台实战教程

前言 在当今数据驱动的商业环境中&#xff0c;企业需要快速、精准地获取互联网上的公开数据以支持市场分析、竞品调研和用户行为研究。然而&#xff0c;传统的手动网页爬取方式面临着诸多挑战&#xff1a;IP封锁、验证码干扰、网站结构频繁变更&#xff0c;以及高昂的运维成本…

【新手初学】读取服务器敏感文件数据

一、引言 想要让利用注入点让SQL语句能执行读取相关文件的操作&#xff0c;需要一个非常重要的条件&#xff0c;即在MySql数据库的配置文件my.ini中一定要有 secure file priv" " 二、读取文件配置 ①在虚拟机中查看my.ini文件中有没有secure file priv" &qu…

央视少儿APP V2.6.2

安装好软件就能直接看&#xff0c;界面干净&#xff0c;播放流畅得很。里面的内容都是经过严格筛选的&#xff0c;动画、纪录片、教育课程这些资源应有尽有 这款软件的画质高清到让人惊艳&#xff0c;就算不登录也丝毫不影响观看体验&#xff0c;播放的时候几乎不用缓冲&#…

mysqlworkbench导入.sql文件

1、MySQL Workbench 新建数据库 或者 在左侧导航栏的 ​Schemas 区域右键选择 ​Create Schema...输入数据库名称&#xff08;例如 mydatabase&#xff09;&#xff0c;点击 ​Apply确认创建&#xff0c;点击 ​Finish 2、选择目标数据库 在左侧导航栏的 ​Schemas 列表中&a…

比较4点结构和4次函数

在行列可自由变换的平面上3点结构只有6个 设与之对应的函数分别是 3a1 x*x*y y*y*x 3a2 xy*y*y 3a3 x*x*y y*y*y 3a4 x*x*x y*y*x 3a5 x*x*xy*y*y 3a6 x*x*xy 用同样的办法计算4点结构的16个函数 4(4a1-1)2*3a32*3a1 4(4a2-1)3a43a33a53a1 4(4a3-1)3a23a3…

线性回归 + 基础优化算法

线性回归 线性回归是机器学习最基础的模型&#xff0c;也是理解后续所有深度学习的基础。 线性模型可以看做是单层神经网络。 上述有个0.5是在求导的时候可以很方便的将2消去。 实际上&#xff0c;这里的数据样本受限很大&#xff0c;比如地球上房子就那么多&#xff0c;肯…

邪性!Anaconda安装避坑细节Windows11

#工作记录 最近不断重置系统和重装Anaconda&#xff0c;配置的要累死&#xff0c;经几十次意料之外的配置状况打击之后&#xff0c;最后发现是要在在Anaconda安装时&#xff0c;一定要选“仅为我安装”这个选项&#xff0c;而不要选“为所有用户安装”这个选项。 选“仅为我安…