【PSINS工具箱】MATLAB例程,二維平面上的組合導航,EKF融合速度、位置和IMU數據,4維觀測量

在這里插入圖片描述

文章目錄

  • 關于工具箱
  • 程序簡介
    • 代碼概述
    • 核心功能與步驟
  • 運行結果
  • MATLAB代碼

關于工具箱

本文所述的代碼需要基于PSINS工具箱,工具箱的講解:

  • PSINS初學指導:https://blog.csdn.net/callmeup/article/details/137087932

本文為二維平面上的定位,另有三維的:

  • 【PSINS】以速度和位置作為觀測量(即6維觀測量)的組合導航濾波,EKF實現,提供可直接運行的MATLAB代碼:https://blog.csdn.net/callmeup/article/details/144404734?spm=1011.2415.3001.5331

程序簡介

代碼概述

本代碼實現了一個在二維平面上,采用擴展卡爾曼濾波(EKF)捷聯慣性導航系統(SINS)外部觀測(模擬GPS位置和DVL速度計) 進行組合導航的完整仿真流程。它使用專業的慣性導航算法工具箱 PSINS,模擬了載體的運動軌跡、IMU傳感器誤差,并通過EKF算法融合慣性解算結果與外部觀測信息,最終對濾波后的導航精度(姿態、速度、位置)進行了詳盡的評估和可視化。

核心功能與步驟

代碼的執行流程清晰地分為以下幾個階段:

  1. 環境初始化與軌跡生成 (trjsimu)

    • 清理工作區,設置隨機數種子以確保結果可重復。
    • 調用 glvspsinstypedef 載入PSINS工具箱的全局常量并定義系統類型。
    • 使用 trjsegmenttrjsimu 函數生成一條復雜的模擬軌跡,包括勻速、加速、左轉協調轉彎等多種機動動作,并計算出理想的載體姿態、速度、位置(avp)和IMU數據(imu)。
  2. 傳感器誤差模擬與系統初始化

    • 使用 imuerrset 定義IMU的陀螺儀和加速度計誤差參數(零偏、白噪聲)。
    • 使用 imuadderr 將上述誤差添加到理想IMU數據中,模擬真實傳感器輸出。
    • 設置初始導航參數的誤差 (avperrset),并初始化慣性導航解算 (insinit) 和卡爾曼濾波器 (kfinit)。
  3. 擴展卡爾曼濾波 (EKF) 主循環

    • 時間更新(預測):讀取帶噪聲的IMU數據,通過 insupdate 進行慣性導航解算,推算出最新的姿態、速度和位置。同時,更新EKF的狀態轉移矩陣和預測協方差矩陣。
    • 量測更新(校正):在固定的時間間隔(例如每秒),模擬GPS接收機提供經緯度觀測,DVL提供水平速度觀測(在真實值上添加了噪聲)。將INS解算出的位置/速度與外部觀測值進行比較,得到量測殘差,并用EKF公式校正INS的誤差狀態(包括姿態誤差、速度誤差、位置誤差以及IMU零偏估計)。最后通過 kffeedback 將誤差狀態反饋給INS,修正其導航結果。
  4. 結果分析與可視化

    • 這是代碼非常豐富的部分,它繪制了大量圖表來評估EKF的性能:
      • 誤差時序圖:繪制了航向角、東向/北向速度、緯度/經度隨時間變化的誤差。
      • 軌跡對比圖:將濾波后的估計軌跡與真實軌跡進行對比,清晰展示濾波效果。
      • 累積分布函數圖 (CDF):分析速度誤差的統計分布。
      • 位置誤差熱力圖:在二維平面上用顏色直觀顯示不同區域的定位誤差大小。
      • 誤差統計條形圖:計算并顯示位置誤差的均值、標準差、最大值和均方根誤差(RMS)。
      • 性能評估表:在圖形和命令行中輸出全面的量化指標,如MAE(平均絕對誤差)、RMSE(均方根誤差)、95%分位數等。

關鍵技術點:

  • 算法:擴展卡爾曼濾波 (EKF)
  • 模型:15狀態誤差模型(3個姿態誤差、3個速度誤差、3個位置誤差、3個陀螺零偏、3個加計零偏)
  • 觀測值:二維平面上的速度(東向、北向)和位置(緯度、經度)

運行結果

二維軌跡圖像:
在這里插入圖片描述

航向角誤差曲線:
在這里插入圖片描述

速度誤差時序圖:

在這里插入圖片描述

位置誤差時序圖:
在這里插入圖片描述

誤差統計特性:

在這里插入圖片描述

MATLAB代碼

部分代碼如下:

% 【PSINS】二維平面上的位置、速度為觀測的154,濾波方法為EKF
% 作者 :matlabfilter
% 2025-08-20/Ver1
% 清空工作空間,清除命令窗口,關閉所有圖形窗口
clear; clc; close all;
rng(0); % 設置隨機數種子為0,以確保結果可重復
glvs % 調用全局變量設置
psinstypedef(153); % 設置PSINS類型ts = 0.1;       % sampling interval
avp0 = [[0;0;0]; [0;0;0]; [0;0;0]]; % 初始化avp
traj_ = [];
%% 軌跡設置
seg = trjsegment(traj_, 'init',         0);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'accelerate',   10, traj_, 1);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'coturnleft',   45, 2, traj_, 4);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'coturnleft',   45, 2, traj_, 4);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'deaccelerate', 5,  traj_, 2); %2
seg = trjsegment(seg, 'uniform',      100);
% generate, save & plot
trj = trjsimu(avp0, seg.wat, ts, 1);% 初始設置
[nn, ts, nts] = nnts(2, trj.ts); % 獲取時間序列的參數
% imuerr = imuerrset(0.03, 100, 0.001, 5); % (注釋掉的)設置IMU誤差參數
imuerr = imuerrset(8, 14, 0.18, 57); % 設置IMU誤差參數
imu = imuadderr(trj.imu, imuerr);  % 對IMU數據添加誤差
% imuplot(imu); % (注釋掉的)繪制IMU數據% 設置初始姿態誤差
davp0 = avperrset(0.1*[1; 1; 1], 0, [1; 1; 3]);%% 速度觀測EKF
ins = insinit(avpadderr(trj.avp0, davp0), ts); % 初始化慣性導航系統

完整代碼:

如有導航、定位相關的代碼定制需求,請通過下方卡片聯系作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94265.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MiMo-VL 技術報告

摘要 我們開源了 MiMo-VL-7B-SFT 和 MiMo-VL-7B-RL 兩個強大的視覺語言模型,它們在通用視覺理解和多模態推理方面均展現出最先進的性能。MiMo-VL-7B-RL 在 40 項評估任務中的 35 項上優于 Qwen2.5-VL-7B,并在 OlympiadBench 上獲得 59.4 分,超越了參數量高達 780 億的模型。…

CTFshow Pwn入門 - pwn 19

先看main函數:fclose(_bss_start) fclose(stdout) 關閉了默認fd1的輸出,所以system的結果無法直接看到。 思路: 輸出重定向。 ls 1>&0 ls >&0 ls >&2 ###三種寫法均可將輸出重定向到能回顯的終端并獲得一個新的交互…

Redis(以Django為例,含具體操作步驟)

簡介Redis(Remote Dictionary Server)是一個開源的內存數據結構存儲系統,支持多種數據結構(如字符串、哈希、列表、集合、有序集合等),可用作數據庫、緩存或消息隊列。其核心特點包括:高性能&am…

瀏覽器解析網址的過程

問題瀏覽器解析網址的過程我的回答當你在瀏覽器地址欄輸入一個URL(比如www.example.com)并按下回車后,會發生以下一系列步驟:首先,瀏覽器會解析URL結構,確定要訪問的協議、域名和路徑。如果你沒有輸入協議部…

NVIDIA Nsight Systems性能分析工具

* 性能分析 NVIDIA Nsight Systems (推薦): 這是 NVIDIA 官方推薦的更現代、功能更強大的分析工具。 安裝 Nsight Systems在 Docker 容器中啟動程序:# 確保你在啟動容器時掛載了/usr/local/cuda/targets/x86_64-linux/lib/ 和 /usr/local/nvidia/lib64 #…

后臺管理系統-14-vue3之tag標簽頁的實現

文章目錄 1 tag靜態實現 1.1 CommonTag.vue(el-tag) 1.2 Main.vue(普通組件標簽) 2 tag通過pinia管理 2.1 CommonAside.vue(菜單點擊事件) 2.2 stores/index.js(selectMenu()和tags) 2.3 CommonTag.vue(計算屬性tags) 3 點擊tag之后跳轉到指定頁面 3.1 views/Mail.vue(商品) 3.…

CMake2: CMakeLists.txt的常用命令

參考鏈接: 愛編程的大丙 | CMake教程 CMakeLists指令以及常用方法 現代 CMake 教程 文章目錄1. cmake_minimum_required( )2. project( )3. add_executable( )4. set()5. aux_source_directory( )6. file( )7. include_directories( )8. add_library( )9. link_libraries()與li…

Ansible入門:自動化運維基礎

Ansible 基礎概念與安裝1. 自動化動機 (Motivation for Automation)概念解釋: 指為什么要用Ansible等工具來替代手動管理服務器。核心動機包括:效率與速度: 同時在上百甚至上千臺服務器上執行任務,秒級完成,遠非人工可…

【測試】基于博客系統的測試報告

前言 本篇博客對簡易的博客系統做的測試總結一份測試報告,包含功能測試,自動化測試,性能測試 💓 個人主頁:zkf ? 文章專欄:測試 若有問題 評論區見📝 🎉歡迎大家點贊👍…

Oracle:配置讓插入語句時id自動輸入

Oracle:配置讓插入語句時id自動輸入無需手動指定,核心是利用 序列(Sequence) 或 自增列(Identity Column) 來自動生成唯一值。以下是兩種常用方案:方案 1:使用序列(Sequence&#xf…

秒殺服務的回調方案

在秒殺場景中,用戶點擊“搶購”后,后端需要通過異步處理應對高并發(避免請求阻塞),同時需通過實時回調機制將最終結果(成功/失敗)推送給客戶端并展示。核心方案是:“前端發起請求→后…

php apache無法接收到Authorization header

Apache 默認不傳遞 Authorization頭到后端環境(如 PHP)。其表現是:print_r($_SERVER)時, 沒有 [Authorization] :Array ([Accept-Language] > zh,en;q0.9,zh-CN;q0.8,en-US;q0.7[Accept-Encoding] > gzip, defla…

當我們想用GPU(nlp模型篇)

在個人設備上“把 GPU 真正用起來”做 NLP,分五步:準備 → 安裝 → 驗證 → 訓練/推理 → 踩坑排查。下面每一步都給出可復制命令和常見錯誤。 ────────────────── 1. 硬件準備 ? 一張 NVIDIA GPU,算力 ≥ 6.1&#xff08…

CryptSIPVerifyIndirectData函數分析

可以使用此函數從SIP接口對應的文件中提取簽名信息 CryptSIPVerifyIndirectData:將當前文件的哈希結果做為“指紋”,并與從CryptSIPGetSignedDataMsg中提取的簽名信息進行比較。 如果哈希結果相同,則意味著當前文件與之前簽名的文件相同&…

20250823解決榮品RD-RK3588-MID開發板在充電的時候大概每10s屏幕會像水波紋閃爍一下

20250823解決榮品RD-RK3588-MID開發板在充電的時候大概每10s屏幕會像水波紋閃爍一下 2025/8/23 17:58【結論】:使用直流電源供電,給電池【快速】充電,但是直流電源的電壓穩定,電流抖動導致的!那個是2.4G 已經知道了我司…

CANN安裝

前提條件 請參考本文檔正確安裝和使用CANN軟件,不建議將CANN安裝在共享磁盤后,通過掛載的方式使用CANN,因為CANN對文件系統有文件鎖的依賴,部分共享存儲不支持文件鎖,可能導致任務拉起失敗。 root用戶和非root用戶安裝CANN軟件包的步驟一致,當前示例步驟以非root用戶為例…

docker的基礎配置

目錄 數據卷 數據卷容器 端口映射與容器互聯 互聯機制實現便捷互訪(基于容器搭建論壇) 數據卷 1.創建數據卷 [rootopenEuler-1 /]# docker volume create test test [rootopenEuler-1 /]# docker volume ls DRIVER VOLUME NAME local test [ro…

VSCode Import Cost:5 分鐘學會依賴瘦身

一句話作用:在代碼里 import 時,實時顯示包大小,幫你一眼揪出體積炸彈。1?? 30 秒安裝 & 啟動 打開 VSCode → 擴展商店搜索 Import Cost → 安裝重啟 VSCode,立即生效,零配置。2?? 使用方式(開箱即…

TCP/UDP詳解(一)

UDP報文源端口16bit 目的端口16bit校驗和checksum16bit 總長度16bit--------------------------------------------------------------------------------------------------------------------------源目端口用于標識應用層協議,分為知名端口&#x…

數據庫優化提速(一)之進銷存庫存管理—仙盟創夢IDE

從存儲過程到通用 SQL:進銷存系統的數據操作優化在進銷存系統的開發與維護中,數據庫查詢語句的編寫方式對系統的性能、兼容性和可維護性有著深遠影響。本文將圍繞給定的三段 SQL 代碼展開,深入探討將存儲過程轉換為通用 SQL 在進銷存場景下的…