💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥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. 实验结果
| 算法类型 | 平均定位误差(米) | 最大定位误差(米) | 稳定性(标准差) |
|---|---|---|---|
| 单独GPS | 3.82 | 12.45 | 2.15 |
| 单独里程计 | 5.67 | 18.32 | 3.42 |
| 单独电子罗盘 | N/A(仅航向角) | N/A | N/A |
| 联邦滤波融合 | 2.45 | 8.76 | 1.52 |
| EKF融合 | 1.87 | 6.92 | 1.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.

574

被折叠的 条评论
为什么被折叠?



