【PDR2,MATLAB例程】用于IMU、步态检测、PDR融合的航位推算,适用于二维平面,融合方法为UKF。附完整代码的下载链接 完整代码含中文注释文章目录程序详解例程功能运行结果MATLAB源代码程序详解例程功能本例程面向二维行人导航先用仿真 IMU 数据生成步态冲击峰再通过阈值和最小步间隔完成步态检测。检测得到的步时刻和步态幅值用于构建 PDR 递推随后使用稀疏位置修正量进入 UKF。程序结构集中在一个.m文件内包含仿真、检测、滤波、误差统计和绘图函数。纯 PDR 轨迹会随步数增加逐渐漂移稀疏位置观测存在米级噪声且不是连续约束UKF 将两者融合后得到连续平滑轨迹并在本次调参后取得最低 RMSE。误差曲线和命令行 RMSE 表可以用于快速判断滤波器是否正确收敛。运行结果运行代码后程序会完成以下流程模拟 IMU 加速度与陀螺仪数据、检测步态峰值、构建 PDR 轨迹并利用稀疏位置观测进行 UKF 校正。本例程为二维平面行人导航仿真不考虑上下坡或三维高度变化也不依赖 PSINS 工具箱。步态检测结果展示加速度模值中的步态峰值检测结果红色标记对应被识别出的步态事件。二维轨迹对比对比真实轨迹、纯 PDR 轨迹、稀疏位置观测和 UKF 融合轨迹。定位误差曲线该图给出各方法随步数变化的平面位置误差用于观察累积漂移和滤波修正效果。命令行窗口会输出各方法的均值、中位数、标准差和 RMSE便于直接对比 PDR、观测量和融合结果MATLAB源代码部分代码如下%% PDR步态检测与UKF二维融合% 作者matlabfilterV同号接定位与导航、滤波相关的matlab代码定制% 2026-07-24/Ver1% 单文件例程仿真IMU、步态检测、PDR航位推算和二维UKF校正。clc;clear;close all;rng(0);algorithmNamePDR步态检测UKF_2Dim;cfg.fs50;% IMU sample rate, Hzcfg.nStep168;% true walking stepscfg.nominalPeriod0.62;% nominal step period, scfg.mapLimit[-595-2055];[imu,truth]simulatePedestrianImu(cfg);[stepTime,stepAmp]detectStepsFromAcc(imu.t,imu.accNorm,cfg.fs);[pdr,matchedTruth]buildPdrFromDetectedSteps(imu,truth,stepTime,stepAmp);zFixsimulateSparsePositionFix(matchedTruth.pos,8,1.15);ukfrunStepPdrUkf(pdr.stepLength,pdr.yawDelta,zFix,matchedTruth.pos(:,1));errPdrpointError(pdr.pos,matchedTruth.pos);errFixpointErrorWithNan(zFix,matchedTruth.pos);errUkfpointError(ukf.pos,matchedTruth.pos);printStats(algorithmName,errPdr,errFix,errUkf);plotStepDetection(imu.t,imu.accNorm,stepTime,algorithmName);plotTrajectory(matchedTruth.pos,pdr.pos,zFix,ukf.pos,cfg.mapLimit,algorithmName);plotErrors(errPdr,errFix,errUkf,algorithmName);%% Local functions完整代码和函数https://download.csdn.net/download/callmeup/93180247如需帮助或有导航、定位滤波相关的代码定制需求可从个人主页左侧联系我