ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于卡尔曼滤波的IMU与GPS组合导航:原理、Matlab实现与调参指南

基于卡尔曼滤波的IMU与GPS组合导航:原理、Matlab实现与调参指南 简介本资源是一套基于Matlab实现的IMU与GPS组合导航数据融合完整方案面向计算机、电子信息工程、导航制导与控制等专业的本科生及研究生适用于课程设计、期末大作业或毕业设计中导航算法模块的开发与验证。方案以扩展卡尔曼滤波EKF为核心涵盖姿态更新qua_update、att_update、速度/位置修正vel_update、pos_update、坐标转换ecef2ned、euler2dcm等、误差建模noise_sbias、gyro_gen_delta、Allan方差分析allan_imu、allan_get_bdrift及仿真与实测数据处理synthetic-data、real-data等关键环节。压缩包共63个文件含56个Matlab函数.m、5个数据文件.mat、1个说明文档.md和1个地理可视化文件.kml总大小50.36MB。已有2986人学习下载提供从理论推导、代码实现到结果评估的全流程参考尤其适合具备一定Matlab编程基础与惯性导航知识的学习者开展算法复现、参数调优与性能对比分析。1. 项目概述从传感器数据到可靠轨迹拿到一个名为“基于Matlab卡尔曼滤波的IMU和GPS组合导航数据融合”的压缩包对于从事机器人、无人机、自动驾驶或者任何涉及运动载体定位的同学来说这几乎就是一个“宝藏”入门包。它直指一个核心工程问题如何把惯性测量单元IMU和全球定位系统GPS这两类优缺点鲜明的传感器数据揉在一起得到一条比它们各自单独工作时更平滑、更可靠、延迟更低的运动轨迹。IMU特别是消费级的微机电系统MEMSIMU能提供高频通常100Hz以上的角速度和加速度数据积分后可以得到姿态、速度和位置但它的致命伤是误差会随着时间累积而发散漂得没边。GPS则相反它能直接输出绝对位置有时还有速度误差有界不会随时间发散但更新频率低通常1-10Hz在城市峡谷、隧道或树下容易丢失信号动态响应也慢。这个项目的目标就是利用卡尔曼滤波这个“数据融合大脑”让IMU的“快”和GPS的“准”优势互补实现稳定、连续的导航。我处理过不少类似的传感器融合项目从学术仿真到实际嵌入式部署。这个Matlab项目源码的价值在于它提供了一个完整的、可运行的仿真验证环境。你不需要昂贵的硬件就能直观理解组合导航的核心原理、卡尔曼滤波的调参过程以及当GPS信号丢失时纯惯性导航是如何“撑住”一段时间的。这对于初学者建立系统级认知或者对于有经验的工程师快速验证算法改动都非常有帮助。接下来我会拆解这个项目里里外外的关键点从思路到代码从理论到实操让你不仅能跑通它更能吃透它。2. 核心思路与方案选型为什么是卡尔曼滤波在深入代码之前我们必须搞清楚为什么在这个场景下卡尔曼滤波KF或其变种如扩展卡尔曼滤波EKF几乎是唯一的选择。这源于我们对传感器和系统状态的理解。2.1 传感器特性与状态定义IMU测量的是载体坐标系下的比力加速度计和角速度陀螺仪。要得到我们关心的导航坐标系比如东北天下的位置、速度和姿态需要经过复杂的坐标变换和积分运算。这个过程中传感器零偏、尺度因子误差、安装误差等都会被积分放大。因此我们通常将系统的状态向量定义为需要估计的误差量而不是直接估计绝对量。这是一种常见的“误差状态卡尔曼滤波”思想在工程上更稳定。一个典型的15维误差状态向量可能包括位置误差(3维): 东北天方向的误差。速度误差(3维): 东北天方向的速度误差。姿态误差(3维): 通常用失准角俯仰、横滚、航向误差表示。陀螺仪零偏误差(3维): XYZ三轴的零偏变化量。加速度计零偏误差(3维): XYZ三轴的零偏变化量。这样定义的好处是很多误差可以被建模为缓慢变化的量甚至随机游走状态方程即误差如何随时间传播可以围绕标称轨迹进行线性化使得标准的卡尔曼滤波框架得以应用。如果直接对姿态四元数等非线性量进行估计就必须使用EKF或更复杂的非线性滤波器。2.2 松耦合与紧耦合架构项目中提供的源码大概率采用的是松耦合架构。这是最直观、最易实现的组合方式。松耦合IMU和GPS各自独立解算。IMU通过惯性导航算法机械编排独立输出位置、速度、姿态PVAGPS接收机也独立输出其PVT位置、速度、时间解。卡尔曼滤波器的观测量就是这两组PVA之间的差值。例如用GPS的位置减去IMU推算的位置作为位置观测误差输入到滤波器。滤波器估计出IMU解算中的各种误差状态然后反馈回去校正IMU的导航结果。紧耦合更深层次的融合。卡尔曼滤波器的观测量是GPS的原始测量值如伪距和载波相位而不是已经解算好的位置。它直接估计载体的状态并利用这些状态来预测GPS的原始测量值将预测值与实际测量值之差作为新息。紧耦合抗干扰能力更强在可见星数少于4颗时仍能工作但算法复杂得多需要处理GPS星历、钟差等更多信息。对于教学和大多数应用级项目松耦合已经完全够用且更容易理解和调试。我们的分析也将基于松耦合展开。2.3 卡尔曼滤波的五大核心公式卡尔曼滤波是一个“预测-更新”的递归过程。它维护着对系统状态我们定义的15维误差的估计以及对这个估计的不确定性协方差矩阵P。状态预测根据IMU数据输入控制量和上一时刻的状态预测当前时刻的状态。x_pred F * x_est B * u。这里F是状态转移矩阵描述了误差如何随时间传播由IMU的误差动力学方程推导而来B是控制输入矩阵u是IMU的测量值或误差。协方差预测同时预测状态估计的不确定性。P_pred F * P_est * F Q。Q是过程噪声协方差矩阵代表了我们对系统模型不确定性的信任程度比如IMU噪声的大小。这是调参的第一个关键点。卡尔曼增益计算当GPS测量到来时计算一个“权重”矩阵K决定我们应该在多大程度上相信新的测量值。K P_pred * H * inv(H * P_pred * H R)。H是观测矩阵描述了状态如何映射到观测值在松耦合中H矩阵非常简单通常是一个单位阵的部分行R是观测噪声协方差矩阵代表我们对GPS测量值的信任程度。这是调参的第二个关键点。状态更新用卡尔曼增益将预测状态和观测到的误差进行融合得到最优估计。x_est x_pred K * (z - H * x_pred)。z是实际的观测值GPS位置/速度与IMU推算值的差。协方差更新更新状态估计的不确定性。P_est (I - K * H) * P_pred。这个循环随着IMU数据高频不断进行预测步每当GPS数据低频到来时就执行一次更新步。最终我们得到的是经过校正的、最优的误差状态估计将其补偿到IMU的原始导航解中就得到了融合后的平滑轨迹。3. 代码结构解析与关键模块实现打开项目源码我们通常会看到几个核心的Matlab脚本或函数。下面我以一个典型的项目结构为例拆解每个部分的作用和实现细节。3.1 数据加载与预处理模块通常是一个名为load_data.m或main.m开头的脚本。它的任务是读取IMU和GPS的仿真或实测数据文件并进行时间同步和初步处理。% 示例加载数据 imu_data load(imu_data.txt); % 格式可能为 [时间戳, gx, gy, gz, ax, ay, az] gps_data load(gps_data.txt); % 格式可能为 [时间戳, lat, lon, alt, vn, ve, vd] % 时间同步是关键确保IMU和GPS数据有统一的时间基准。 % 通常做法以IMU的高频时间轴为主将GPS数据通过插值如线性插值对齐到IMU的时间戳上。 imu_time imu_data(:,1); gps_time gps_data(:,1); % 为每个IMU时刻寻找可用的GPS观测值 for k 1:length(imu_time) % ... 查找当前imu_time(k)附近是否有gps数据 ... % 如果有则记录观测值和对应的索引 end注意实测数据中时间戳的准确性和同步性是融合效果的基础。如果硬件没有提供硬件同步脉冲软件时间戳的误差会直接引入到融合系统中造成不可预测的漂移。在仿真中这个问题不存在但理解这一点对实际应用至关重要。3.2 惯性导航解算模块这个模块通常是一个函数如ins_mechanization.m。它负责进行IMU数据的“机械编排”即从原始的角速度和加速度通过积分得到姿态、速度和位置。function [pos, vel, att, quat] ins_mechanization(imu, pos0, vel0, att0, dt) % imu: 当前时刻的IMU测量值 [gx, gy, gz, ax, ay, az] % pos0, vel0, att0: 上一时刻的位置、速度、姿态欧拉角 % dt: 采样时间间隔 % 返回当前时刻的导航结果 % 1. 姿态更新常用四元数法比欧拉角法更稳定 % 利用陀螺仪数据计算旋转四元数增量 delta_theta imu(1:3) * dt; % 角增量 quat_delta ... % 根据角增量计算四元数增量具体公式略 quat_now quat_multiply(quat_prev, quat_delta); % 四元数乘法更新姿态 att_now quat2euler(quat_now); % 将四元数转换为欧拉角用于后续计算或输出 % 2. 比力坐标变换 % IMU测得的加速度是载体坐标系下的需要转换到导航坐标系下 C_b_n quat2dcm(quat_now); % 从载体到导航系的姿态转换矩阵 f_b imu(4:6); f_n C_b_n * f_b; % 导航系下的比力 % 3. 速度更新 % 需要扣除重力加速度并考虑科里奥利力等简化模型中可能忽略 g [0; 0; 9.7803267714]; % 重力矢量简单模型可设为常数 vel_now vel_prev (f_n - g) * dt; % 简化积分 % 4. 位置更新 pos_now pos_prev (vel_prev vel_now) * 0.5 * dt; % 梯形积分精度更高 % 保存当前状态用于下一时刻迭代 pos pos_now; vel vel_now; att att_now; quat quat_now; end实操心得机械编排是误差的发源地。即使使用高精度的数值积分方法如龙格-库塔由于传感器零偏和噪声的存在纯惯性解算的位置会在几十秒内漂出几百米。在代码中你会看到速度、位置迅速发散这正是我们需要GPS来校正的原因。调试时可以单独运行这个模块观察短时间内如1-2秒的积分精度这有助于你理解IMU的噪声特性。3.3 卡尔曼滤波器实现模块这是项目的核心可能在一个叫kalman_filter.m的函数里。它实现了上一节描述的五大公式。function [x_est, P_est] kalman_filter(x_est_prev, P_est_prev, u, z, dt, Q, R, F, H) % x_est_prev: 上一时刻后验状态估计 % P_est_prev: 上一时刻后验估计协方差 % u: 控制输入可能用于更精确的状态预测在误差状态模型中有时可省略 % z: 当前时刻的观测值 (GPS - INS) % dt: 时间间隔 % Q, R: 过程噪声和观测噪声协方差矩阵 % F, H: 状态转移矩阵和观测矩阵可能随状态或时间变化 % --- 1. 状态预测 --- x_pred F * x_est_prev; % 对于误差状态通常没有控制输入项 % --- 2. 协方差预测 --- P_pred F * P_est_prev * F Q; % --- 3. 卡尔曼增益计算 --- % 只有当有观测值(z不为空)时才执行更新步骤 if ~isempty(z) S H * P_pred * H R; % 新息协方差 K P_pred * H / S; % 卡尔曼增益使用矩阵右除代替inv数值更稳定 % --- 4. 状态更新 --- innovation z - H * x_pred; % 新息即观测残差 x_est x_pred K * innovation; % --- 5. 协方差更新 --- P_est (eye(size(K,1)) - K * H) * P_pred; else % 无观测仅预测 x_est x_pred; P_est P_pred; end end关键点解析这里的F矩阵是状态转移矩阵它是从IMU误差的连续时间微分方程离散化得到的。它的推导是组合导航的理论核心之一决定了误差如速度误差、姿态误差、零偏是如何随时间耦合、传播的。在提供的源码中F矩阵可能已经被预先计算好。理解它的每一个元素如速度误差如何受姿态误差影响对于调试滤波器至关重要。3.4 反馈校正与轨迹生成模块在主循环中我们会交替调用惯性导航解算和卡尔曼滤波。滤波器的输出误差状态估计x_est需要被反馈回去校正惯性导航解算的结果并重置误差状态。% 主循环伪代码 nav_pos init_pos; nav_vel init_vel; nav_att init_att; % 惯性导航结果 x_est zeros(15,1); P_est P_init; % 滤波器状态初始化 for k 1:length(imu_data) % 步骤1惯性导航解算仅使用IMU原始数据 [nav_pos, nav_vel, nav_att] ins_mechanization(imu_data(k,:), nav_pos, nav_vel, nav_att, dt); % 步骤2卡尔曼滤波预测每个IMU周期都执行 [x_pred, P_pred] kf_predict(x_est, P_est, dt, Q); % 步骤3检查是否有GPS数据到来 if has_gps_fix(k) % 构造观测值 z GPS测量值 - INS推算值 z_pos gps_pos(k,:) - nav_pos; z_vel gps_vel(k,:) - nav_vel; z [z_pos; z_vel]; % 假设观测位置和速度 % 卡尔曼滤波更新 [x_est, P_est] kf_update(x_pred, P_pred, z, R, H); % 步骤4反馈校正这是融合生效的关键一步。 % 将估计出的误差补偿到惯性导航结果上 nav_pos nav_pos x_est(1:3); % 校正位置 nav_vel nav_vel x_est(4:6); % 校正速度 % 姿态校正稍微复杂需要用估计的失准角构造旋转矩阵进行补偿 delta_theta x_est(7:9); C_n_n eye(3) - skewSymmetric(delta_theta); % 近似校正矩阵 % 更新姿态矩阵和欧拉角/四元数... % 步骤5误差状态重置或称为“归零” % 在反馈后被校正的误差状态应设为零因为其影响已体现在导航结果中 x_est(1:9) 0; % 通常重置位置、速度、姿态误差 % 注意传感器零偏误差(x_est(10:15))通常不重置它们作为状态被持续估计和补偿 else % 无GPS仅使用预测值作为当前估计不进行反馈或使用开环补偿 x_est x_pred; P_est P_pred; end % 记录融合后的最终结果 fused_trajectory(k,:) [nav_pos, nav_vel, nav_att]; end注意事项反馈校正和状态重置是闭环卡尔曼滤波的标准操作。如果不进行反馈滤波器估计的误差只会越来越大但永远不会真正修正导航解算的轨迹这就是“开环”滤波效果很差。重置是为了避免对同一误差进行重复校正。这是新手极易忽略或出错的地方。4. 核心参数调优与噪声模型设定项目能跑起来只是第一步要想得到好的融合效果关键在于调整卡尔曼滤波器的Q过程噪声和R观测噪声矩阵。这没有银弹需要基于对传感器性能的理解和实际数据来调整。4.1 过程噪声协方差矩阵 QQ矩阵代表了我们对系统模型不确定性的信任度。在我们的15维误差状态模型中Q通常是一个对角阵或块对角阵其对角线元素对应各个状态分量的噪声强度。位置/速度/姿态误差过程噪声这些误差是由IMU的角速度/加速度白噪声积分引起的。通常设得很小因为模型本身误差动力学方程已经很好地描述了它们的传播。可以设置为1e-6量级或更小。陀螺仪零偏噪声这代表了陀螺仪零偏的随机游走系数。可以从IMU的数据手册中找到单位通常是deg/s/√Hz或rad/s/√Hz。需要转换为离散时间下的方差。例如如果随机游走系数为0.01 deg/s/√Hz采样时间dt0.01s则离散方差约为(0.01 * π/180)^2 / dt。这是Q矩阵中非常关键的一个参数直接影响姿态误差的估计速度。加速度计零偏噪声同理代表加速度计零偏的随机游走系数单位是m/s^2/√Hz。转换方式同上。一个简化的Q矩阵设置可能如下数值仅为示例需根据实际传感器调整Q diag([ 1e-6, 1e-6, 1e-6, % 位置误差噪声 1e-4, 1e-4, 1e-4, % 速度误差噪声 1e-6, 1e-6, 1e-6, % 姿态误差噪声 (1e-4)^2/dt, (1e-4)^2/dt, (1e-4)^2/dt, % 陀螺零偏噪声假设随机游走系数1e-4 rad/s/√Hz (0.01)^2/dt, (0.01)^2/dt, (0.01)^2/dt % 加速度计零偏噪声假设0.01 m/s^2/√Hz ]);4.2 观测噪声协方差矩阵 RR矩阵代表了我们对GPS测量值的信任度。它通常也是一个对角阵。GPS位置噪声取决于GPS的精度。单点定位的民用GPS水平精度可能在2-5米1σ垂直精度更差。你可以根据接收机性能或实测数据的统计特性来设置。例如如果水平精度约为3米可以设R_pos_horizontal 3^2。垂直精度可能设为(5^2)或更大。GPS速度噪声GPS多普勒测速通常比定位更精确可能达到0.1-0.3 m/s的水平。可以相应设置R_vel。% 假设观测向量 z [纬度误差; 经度误差; 高度误差; 北向速度误差; 东向速度误差; 天向速度误差] % 注意经纬度需要转换为米制距离通常乘以一个近似的地球半径。 R_lat (3 / 6378137)^2; % 假设3米位置误差转换为弧度方差 R_lon (3 / (6378137 * cos(lat)))^2; R_alt 5^2; % 高度方差 5米 R_vel diag([0.2^2, 0.2^2, 0.5^2]); % 速度方差水平0.2m/s垂直0.5m/s R diag([R_lat, R_lon, R_alt, R_vel(1,1), R_vel(2,2), R_vel(3,3)]);调参心法调整Q和R的本质是在模型信任度和测量信任度之间做权衡。如果R设置得很大表示GPS很不准滤波器会更相信模型IMU融合轨迹会更平滑但对GPS跳变不敏感可能无法修正IMU的长期漂移。如果R设置得很小表示GPS很准滤波器会更相信GPS测量融合轨迹会紧跟GPS但也会把GPS的噪声和跳变引入结果轨迹会显得毛糙。Q矩阵特别是零偏的噪声强度决定了滤波器估计和补偿传感器零偏的“速度”和“力度”。设得太大零偏估计会波动剧烈设得太小滤波器对零偏变化反应迟钝。最佳实践在仿真或已知真值的场景下通过调整这些参数观察融合轨迹与真值的误差以及滤波器估计的零偏是否收敛到真实值附近。这是一个需要耐心和经验的过程。5. 仿真结果分析与性能评估运行项目代码后你通常会得到几张关键的对比图。看懂这些图是评估算法性能的关键。轨迹对比图将纯惯性导航INS轨迹、原始GPS轨迹和融合后INS/GPS的轨迹画在同一张图上。理想情况下INS轨迹会快速发散成一条无规则的“飞线”GPS轨迹是带噪声的点或折线而融合轨迹应该是一条紧贴GPS真值或参考轨迹的平滑曲线。在GPS信号中断的区间融合轨迹应能平滑地延续INS的推算而不是突然跳变或发散。位置/速度误差曲线图这是定量分析的核心。绘制融合结果与参考真值或高精度GPS在各个方向北、东、地的位置误差和速度误差随时间的变化。收敛性在滤波器初始阶段或GPS重新捕获后误差应能快速收敛到一个稳定值。稳态误差收敛后的误差均值应接近零波动范围标准差应小于单独使用GPS时的噪声水平。这体现了滤波器的平滑效果。GPS中断期间的性能在图中标出GPS丢失的时间段。观察融合位置误差的增长速度。它应该远慢于纯惯性导航的误差增长速度因为卡尔曼滤波器在GPS可用期间已经估计并补偿了IMU的大部分关键误差特别是零偏。滤波器状态估计图绘制卡尔曼滤波器估计的传感器零偏陀螺零偏和加速度计零偏随时间的变化。收敛性零偏估计值应能收敛到一个相对稳定的值而不是一直漂移或剧烈振荡。合理性收敛后的零偏值应在IMU传感器的典型零偏范围内例如MEMS陀螺零偏可能在几度/小时到几十度/小时。如果估计出的零偏值离谱例如几百度/小时很可能Q矩阵中的噪声参数设置不当或者观测模型H有问题。新息序列分析新息Innovationz - H * x_pred是观测值与预测观测值之差。在理想的、参数调好的卡尔曼滤波器中新息序列应该是一个零均值、白噪声序列。你可以计算新息的自相关函数检查它是否只在零滞后处有峰值。如果新息序列有色非白噪声说明滤波器模型F,H,Q,R未能完全描述系统动态存在未建模的误差或参数设置不当。6. 常见问题排查与实战技巧在实际运行和修改这类项目时你几乎一定会遇到下面这些问题。这里是我的排查清单和经验总结。6.1 轨迹发散或严重偏离症状融合轨迹比纯GPS轨迹还差或者直接飞掉。排查步骤检查数据同步这是头号嫌疑犯。确保IMU和GPS的每一个数据点都有正确、同步的时间戳。画一个简单的时间-索引图检查两者是否对齐。检查坐标系确认IMU机械编排和GPS数据使用的是同一个导航坐标系通常是东北天ENU或北东地NED。一个常见的错误是GPS输出经纬高LLH而惯性解算在ENU坐标系下进行却没有进行正确的坐标转换。必须先将GPS的LLH转换为本地ENU坐标再与INS的ENU位置做差。检查初始对准融合开始前需要给惯性导航一个准确的初始位置、速度和姿态。姿态特别是航向如果误差很大比如几十度会导致速度、位置误差急剧放大。确保你的初始姿态是从GPS速度矢量或静态初始化段准确估计得到的。检查反馈校正环节确认误差状态x_est被正确地、及时地反馈到了惯性导航解算结果中并且相应的误差状态在反馈后已被重置归零。漏掉这一步是导致发散的另一大原因。检查F矩阵对于高动态运动F矩阵可能需要考虑地球自转、哥氏力等项。在简单的车载或无人机仿真中这些项有时被忽略但如果速度很快200m/s或运行时间很长忽略它们会导致模型误差。6.2 融合轨迹过于“僵硬”或过于“平滑”症状轨迹完全跟着GPS点走没有平滑效果或者轨迹过于平滑在转弯处严重滞后于GPS。原因与解决这是R和Q矩阵调参不平衡的典型表现。轨迹太“僵硬”说明R观测噪声设置得太小滤波器过于信任GPS。适当增大R矩阵中对角线元素的值。轨迹太“平滑”/滞后说明R设置得太大或者Q特别是零偏噪声设置得太小导致滤波器过于信任惯性模型对GPS更新反应迟钝。尝试减小R或增大Q中与零偏相关的元素。6.3 滤波器估计的零偏不收敛或乱跳症状在x_est中陀螺或加速度计零偏的估计值没有稳定到一个常值附近而是持续漂移或高频振荡。排查步骤检查Q矩阵中的零偏噪声这是最主要的调节旋钮。如果零偏噪声 (Q(10:15,10:15)) 设置得过大滤波器会认为零偏变化很快导致估计值波动大。如果设置得过小滤波器会认为零偏几乎不变导致估计值无法跟踪真实的零偏变化如温度引起的零偏漂移。需要根据传感器数据手册中的“随机游走”和“零偏不稳定性”参数来合理设置。检查可观测性并不是所有状态在任何运动下都是可观测的。例如在静止或匀速直线运动时加速度计的某些零偏分量可能与重力分量耦合无法被单独观测到。缺乏激励的运动会导致零偏估计不准确。确保你的测试数据包含足够的机动加速、减速、转弯。检查观测矩阵H确认H矩阵正确地建立了观测值位置/速度差与状态包括零偏之间的关系。在某些简化模型中可能没有将零偏直接纳入观测模型导致零偏无法通过GPS观测来校正。6.4 数值不稳定与协方差矩阵不正定症状Matlab报错提示矩阵奇异或不是正定矩阵通常在计算卡尔曼增益K时发生。原因与解决协方差矩阵P失去正定性由于数值计算舍入误差在多次预测-更新循环后理论上应为对称正定的P矩阵可能失去这个性质。解决方案使用约瑟夫形式Joseph form的协方差更新公式P (I-KH)P(I-KH) KRK它在数值上更稳定。或者使用平方根滤波算法如Cholesky分解。R矩阵中有零元素如果某个观测值被认为绝对精确R中对应方差为0在计算新息协方差S HPH R时可能导致问题。确保R矩阵对角线元素均为正数即使很小。模型不一致检查F,H,Q,R矩阵的维度是否与状态向量、观测向量的维度一致。6.5 从仿真到实测的挑战当你把仿真代码用于真实传感器数据时会遇到更多挑战时间戳同步硬件上必须解决。最好使用硬件触发信号同步IMU和GPS的采样时钟。传感器标定IMU的尺度因子、非正交性、安装偏差等误差在仿真中常被忽略但在实测中必须通过标定来补偿。否则这些误差会进入状态方程破坏模型准确性。异常值处理实测GPS会有跳点多路径效应、周跳。需要在滤波前端增加一个新息检测或卡方检验模块当新息的幅值超过某个阈值时拒绝本次GPS更新防止坏数据污染滤波器状态。初始化实测中需要一段静止或已知运动来进行初始对准和零偏估计这个过程需要仔细设计。这个Matlab项目是一个完美的起点和沙盒。通过它你可以安全地试验所有想法理解每一个参数和步骤的影响。当你真正吃透了这里的每一行代码和背后的原理再去面对真实的传感器和复杂的工程环境时你手里握着的就不是一个黑盒而是一套可以灵活调试、解决问题的工具。本文还有配套的精品资源点击获取
返回列表