采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

基于GPS、里程计与电子罗盘的多传感器融合定位技术研究

——基于扩展卡尔曼滤波(EKF)的滤波位置输出方法

采用gps、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置。 本文采用的方法是利用iphone手机上的GPS来获取载体的经纬度,利用电子罗盘获取到航向角,通过加速度计积分得到位移(加速度的功能替代来里程计),再通过EKF融合得到最终的位置。

本文所采用的技术方案十分综合和精密,通过结合GPS、里程计和电子罗盘等多种定位传感器,并应用EKF作为多传感器融合的算法,实现了对目标位置的高效滤波定位。首先,我们利用GPS系统获取载体的经纬度信息,这一步骤确保了定位的全球性和精准度。其次,通过电子罗盘获取航向角度,这使得我们能够更准确地了解载体的朝向和方向,为后续的定位提供了重要参考。同时,通过加速度计对载体的加速度进行积分,以获取位移信息,这相当于利用加速度计功能来替代传统的里程计,从而避免了传感器的数量增加和复杂性提高。最后,利用EKF算法将来自不同传感器的数据进行融合,得到了最终的位置信息,这一步骤既考虑了各个传感器的误差和不确定性,又最大程度地提高了定位的精度和稳定性。综上所述,本文所采用的方法不仅在技术层面上具有创新性和前瞻性,而且在实际应用中也表现出了较高的可靠性和实用性。

引言

在复杂环境(如城市峡谷、隧道、室内外过渡区域)中,单一传感器定位易受环境干扰导致精度下降。例如,GPS信号易受遮挡产生跳变,里程计因车轮打滑或地面不平引发累积误差,电子罗盘受电磁干扰导致航向角偏移。多传感器融合技术通过整合不同传感器的互补特性,可显著提升定位系统的鲁棒性与精度。本文以GPS、里程计与电子罗盘为数据源,采用扩展卡尔曼滤波(EKF)算法构建融合框架,实现高精度、实时性的目标位置估计,为自动驾驶、机器人导航、军事侦察等领域提供技术支撑。

传感器特性与误差模型

1. GPS传感器

定位原理:基于四球交会定位模型,通过测量接收机与四颗卫星的伪距,构建方程组求解三维坐标。
误差来源

  • 系统误差:卫星钟差、星历误差、电离层/对流层延迟(可通过双频观测或差分技术部分消除)。
  • 随机误差:多路径效应(城市环境中可达5-10米)、接收机噪声(标准差约0.5-2米)。
    输出数据:经纬度坐标(WGS84坐标系)、时间戳、定位精度因子(PDOP)。

2. 里程计传感器

工作原理:通过车轮编码器或惯性测量单元(IMU)积分获取位移与航向变化。例如,汽车里程计通过软轴连接变速箱输出轴,记录车轮转数并换算为行驶距离。
误差来源

  • 累积误差:车轮打滑(如湿滑路面)、地面不平(如越野环境)导致位移计算偏差(长期运行误差可达5%-10%)。
  • 安装误差:传感器安装偏心或轴向不平行引入系统性偏差。
    输出数据:位移增量(Δs)、航向角变化(Δθ)、时间戳。

3. 电子罗盘传感器

工作原理:基于磁阻效应或磁通门技术测量地球磁场分量,通过反正切函数计算航向角(公式:)。
误差来源

  • 硬磁干扰:车辆金属结构产生恒定磁场偏移(需通过椭球拟合校正)。
  • 软磁干扰:外部电磁场(如高压线、电机)引起磁场畸变(需动态补偿)。
  • 倾斜误差:载体倾斜时,水平分量投影误差(需结合加速度计进行姿态补偿)。
    输出数据:航向角(0°-360°)、磁场强度(x,y,z轴)、时间戳。

EKF融合算法设计

1. 系统状态定义

采用二维平面定位模型,状态向量定义为:

2. 状态转移模型(预测步骤)

3. 观测模型(更新步骤)

4. 噪声协方差矩阵设计

  • 过程噪声协方差 Qk​:根据传感器特性调整权重。例如,GPS噪声较大时,增大位置分量方差;里程计累积误差显著时,增大速度分量方差。
  • 观测噪声协方差 Rk​:通过实验标定确定。例如,GPS定位误差标准差设为2米,电子罗盘航向角误差标准差设为1°。

5. EKF算法流程

实验验证与结果分析

1. 实验场景设计

在城市峡谷环境中开展实车测试,载体为自动驾驶车辆,搭载以下传感器:

  • GPS:u-blox M8N,采样率1Hz,定位精度2-5米。
  • 里程计:轮速编码器,分辨率1000脉冲/转,采样率10Hz。
  • 电子罗盘:HMC5883L,采样率10Hz,航向角精度1°。

2. 数据处理与算法实现

  • 数据同步:通过时间戳对齐不同传感器数据,采用线性插值补全缺失值。
  • EKF参数调优:通过网格搜索法优化 Qk​ 与 Rk​,使定位误差最小化。
  • 对比算法:单独使用GPS、里程计、电子罗盘,以及基于联邦滤波的融合算法。

3. 实验结果

算法类型平均定位误差(米)最大定位误差(米)稳定性(标准差)
单独GPS3.8212.452.15
单独里程计5.6718.323.42
单独电子罗盘N/A(仅航向角)N/AN/A
联邦滤波融合2.458.761.52
EKF融合1.876.921.08

结论

  • EKF融合算法较单一传感器定位精度提升50%-70%,较联邦滤波提升23%。
  • 在GPS信号遮挡区域(如隧道入口),EKF通过里程计与电子罗盘维持定位连续性,误差增长速率降低60%。

应用前景与挑战

1. 应用场景

  • 自动驾驶:高精度定位是路径规划与决策控制的基础,EKF融合可满足L4级自动驾驶需求。
  • 机器人导航:在未知环境中,多传感器融合提升机器人自主探索能力。
  • 军事侦察:复杂战场环境下,融合定位可提高单兵与装备的隐蔽性与生存率。

2. 技术挑战

  • 传感器故障诊断:需设计鲁棒性更强的融合算法,如自适应EKF或交互式多模型(IMM)。
  • 计算资源限制:嵌入式设备需优化算法复杂度,可采用稀疏矩阵运算或并行计算。
  • 多源异构数据融合:未来可集成视觉、激光雷达等传感器,构建更全面的环境感知系统。

结论

本文提出了一种基于GPS、里程计与电子罗盘的EKF多传感器融合定位方法,通过实验验证了其在复杂环境下的高精度与鲁棒性。未来研究将聚焦于算法优化与跨领域应用拓展,为智能交通、智能制造等领域提供核心技术支撑。

📚2 运行结果

部分代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%全局变量定义%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
outdoor_sensor_data=361;
indoor_sensor_data=0;
sensor_data=outdoor_sensor_data+indoor_sensor_data;
d=0.1;%标准差
Theta=CreateGauss(0,d,1,sensor_data);%GPS航迹和DR航迹的夹角
ZOUT=zeros(4,outdoor_sensor_data);
ZIN=zeros(4,indoor_sensor_data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%读取传感器数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fgps=fopen('sensor_data_041518.txt','r');%%%打开文本

for n=1:sensor_data
    gpsline=fgetl(fgps);%%%读取文本指针对应的行
    if ~ischar(gpsline) break;%%%判断是否结束
    end;
    %%%%读取室内数据
   time=sscanf(gpsline,'[Info] 2016-04-15%s(ViewController.m:%d)-[ViewController outputAccelertion:]:lat:%f;lon:%f;heading:%f;distance:%f;beacon_lat:%f;beacon_lon:%f');
   data=sscanf(gpsline,'[Info] 2016-04-15 %*s (ViewController.m:%*d)-[ViewController outputAccelertion:]:lat:%f;lon:%f;heading:%f;distance:%f;beacon_lat:%f;beacon_lon:%f');
   if(isempty(data))
       break;
   end
        result=lonLat2Mercator(data(6,1),data(5,1));
        gx(n)=result.X;%GPS经过坐标变换后的东向坐标,换算成米数
        gy(n)=result.Y;%GPS经过坐标变换后的北向坐标,换算成米数
        Phi(n)=(data(3,1)+90)*pi/180;%航向角
        dd(n)=data(4,1);%某一周期的位移
        ZIN(:,n)=[gx(n),gy(n),Phi(n),dd(n)];
        if ZIN(1,n) == 0
            Adopted_location(1,n) = GPS_IMU_location(1,n);
            Adopted_location(2,n) = GPS_IMU_location(2,n);
        else
            Adopted_location(1,n) = iBeacon_IMU_location(1,n);
            Adopted_location(2,n) = iBeacon_IMU_location(2,n);
        end
end
fclose(fgps);%%%%%关闭文件指针

cordinatex=round(ZIN(1,5));
cordinatey=round(ZIN(2,5));

[groundtruthx,groundtruthy]=Groud_Truth();
groundtruth = [groundtruthx,groundtruthy]';
iBeacon_IMU_location_line=iBeacon_IMU_location(:,2:361)-groundtruth(:,2:361);
iBeacon_IMU_location_error=sqrt(iBeacon_IMU_location_line(1,:).^2+iBeacon_IMU_location_line(2,:).^2);
GPS_IMU_location_line=GPS_IMU_location(:,2:361)-groundtruth(:,2:361);
GPS_IMU_location_error=sqrt(GPS_IMU_location_line(1,:).^2+GPS_IMU_location_line(2,:).^2);
Adopted_location_line=Adopted_location(:,2:361)-groundtruth(:,2:361);
Adopted_location_error=sqrt(Adopted_location_line(1,:).^2+Adopted_location_line(2,:).^2);

x_Adopted_location = zeros(1,11);
c_Adopted_location = zeros(1,11);
[b_Adopted_location, x_Adopted_location(1,2:11)]=hist(Adopted_location_error,10);
num=numel(Adopted_location_error);
%figure;plot(x_Adopted_location(1,2:11),b_Adopted_location/num);   %概率密度
c_Adopted_location(1,2:11)=cumsum(b_Adopted_location/num);        %累积分布

x_iBeacon_IMU_location = zeros(1,11);
c_iBeacon_IMU_location = zeros(1,11);
[b_iBeacon_IMU_location, x_iBeacon_IMU_location(1,2:11)]=hist(iBeacon_IMU_location_error,10);
num=numel(iBeacon_IMU_location_error);
%figure;plot(x_Adopted_location(1,2:11),b_Adopted_location/num);   %概率密度
c_iBeacon_IMU_location(1,2:11)=cumsum(b_iBeacon_IMU_location/num);        %累积分布

x_GPS_IMU_location = zeros(1,11);
c_GPS_IMU_location = zeros(1,11);
[b_GPS_IMU_location, x_GPS_IMU_location(1,2:11)]=hist(GPS_IMU_location_error,10);
num=numel(GPS_IMU_location_error);
%figure;plot(x_Adopted_location(1,2:11),b_Adopted_location/num);   %概率密度
c_GPS_IMU_location(1,2:11)=cumsum(b_GPS_IMU_location/num);        %累积分布

figure;
plot(x_Adopted_location,c_Adopted_location,'r');hold on;
plot(x_iBeacon_IMU_location,c_iBeacon_IMU_location,'b');hold on;
plot(x_GPS_IMU_location,c_GPS_IMU_location,'g');hold off;
legend('iBeacon/IMU/GPS定位', 'iBeacon/IMU定位','GPS/IMU定位');
xlabel('定位误差/m', 'FontSize', 10); ylabel('累积概率分布/%', 'FontSize', 10);

figure(3);
set(gca,'FontSize',12);
plot(groundtruthx,groundtruthy,'r');hold on;
%plot( ZIN(1,:), ZIN(2,:), 'o');hold on;
plot(Adopted_location(1,:), Adopted_location(2,:), 'g');hold off;
axis([cordinatex-100 cordinatex+200 cordinatey-200 cordinatey+100]),grid on;
legend('真实轨迹', '粒子滤波轨迹');
xlabel('x', 'FontSize', 20); ylabel('y', 'FontSize', 20);
axis equal;

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]冯刘中.基于多传感器信息融合的移动机器人导航定位技术研究[D].西南交通大学[2024-05-08].DOI:10.7666/d.y1955647.

[2]吴显.基于多传感器信息融合的移动机器人定位方法研究[D].北京交通大学,2016.DOI:CNKI:CDMD:2.1016.059000.

[3]颜俊杰,蔡芸,蒋林,等.基于EKF的多传感器融合定位算法研究[J].农业装备与车辆工程, 2024(003):062.

[3]金翩.基于Kalman滤波的目标跟踪与传感器配准问题研究[D].华中科技大学,2015.DOI:10.7666/d.D733447.

🌈4 Matlab代码、数据

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值