【无人机定位】基于特征匹配的GPS拒止环境下无人机Matlab定位
2026/5/16 23:15:51 网站建设 项目流程

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。

🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室

👇 关注我领取海量matlab电子书和数学建模资料

🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。

🔥 内容介绍

一、引言

在当今无人机广泛应用的时代,全球定位系统(GPS)一直是无人机定位导航的重要依赖。然而,在诸如室内、峡谷或受到电磁干扰等 GPS 拒止环境中,无人机无法依靠 GPS 信号进行精确定位,这严重限制了其任务执行能力。基于特征匹配的定位方法为解决这一难题提供了有效途径,通过对环境特征的提取与匹配,使无人机在 GPS 信号缺失的情况下仍能实现可靠定位。

二、GPS 拒止环境下无人机定位挑战

(一)信号缺失与误差积累

GPS 拒止环境中,由于无法获取 GPS 信号,传统基于 GPS 的定位方式失效。若采用惯性导航系统(INS)等其他定位手段,虽能在短期内提供定位信息,但随着时间推移,惯性器件的误差会不断积累,导致定位结果偏离真实位置,无法满足无人机长时间稳定飞行的需求。

(二)环境复杂性

不同的 GPS 拒止环境具有各自的复杂性。例如,室内环境存在大量相似的建筑结构和纹理,容易造成特征提取与匹配的混淆;而在峡谷等自然环境中,光线变化、地形起伏等因素增加了图像采集和特征识别的难度。这些复杂因素使得无人机难以快速、准确地确定自身位置。

三、基于特征匹配的定位原理

(一)特征提取

  1. 常用特征类型:无人机通过搭载的相机等传感器采集环境图像,从中提取具有独特性和稳定性的特征。常见的特征类型包括尺度不变特征变换(SIFT)特征、加速稳健特征(SURF)以及定向 FAST 和旋转 BRIEF(ORB)特征等。以 SIFT 特征为例,它具有尺度不变性、旋转不变性以及对光照变化、视角变化的鲁棒性。其提取过程包括尺度空间极值检测、关键点定位、方向赋值和特征描述符生成等步骤。

  2. 特征提取算法选择依据:在实际应用中,需根据不同环境特点和无人机性能选择合适的特征提取算法。例如,对于计算资源有限的小型无人机,ORB 特征由于计算速度快、占用内存少,可能是更优选择;而在对特征精度要求较高的复杂环境中,SIFT 或 SURF 特征可能更合适。

(二)特征匹配

  1. 匹配算法原理:将当前采集图像中提取的特征与预先构建的环境地图或数据库中的特征进行匹配。常用的匹配算法有暴力匹配(Brute - Force Matching)和 FLANN(Fast Library for Approximate Nearest Neighbors)匹配等。暴力匹配通过计算待匹配特征与数据库中每个特征的距离(如欧氏距离),选择距离最近的特征作为匹配对;FLANN 匹配则采用近似最近邻搜索算法,在保证一定匹配精度的前提下,大幅提高匹配速度,适用于大规模特征数据集的匹配。

  2. 匹配准确性与效率提升策略:为提高特征匹配的准确性和效率,可采用多种策略。例如,在匹配前对特征进行筛选,去除不稳定或重复的特征;利用几何约束条件(如对极几何关系)对匹配结果进行验证和优化,剔除错误匹配对。同时,结合并行计算技术,提高匹配算法的运行速度,以满足无人机实时定位的需求。

(三)定位计算

  1. 三角测量原理:当获取足够数量的特征匹配对后,可利用三角测量原理计算无人机的位置。假设已知环境地图中特征点的三维坐标,通过匹配得到无人机当前图像中对应特征点的像素坐标,结合相机的内外参数,建立几何模型,求解无人机的位置和姿态。例如,在双目视觉系统中,通过计算左右相机图像中匹配特征点的视差,进而计算出特征点的深度信息,最终确定无人机的位置。

  2. 多传感器融合定位:为进一步提高定位精度,可将基于特征匹配的定位结果与其他传感器数据(如惯性测量单元 IMU、气压计等)进行融合。采用扩展卡尔曼滤波器(EKF)、无迹卡尔曼滤波器(UKF)等数据融合算法,综合处理不同传感器的信息,有效抑制噪声和误差,实现更准确、稳定的定位。

四、基于特征匹配的无人机定位系统实现

(一)系统架构

  1. 传感器模块:主要包括相机(单目、双目或多目相机)用于采集环境图像,IMU 用于测量无人机的加速度和角速度,气压计用于获取高度信息等。这些传感器为特征提取、匹配以及定位计算提供基础数据。

  2. 数据处理模块:负责对传感器采集的数据进行预处理,如对图像进行去噪、增强等操作,以便更好地提取特征。同时,在该模块中实现特征提取、匹配以及定位计算等算法,将处理后的数据转换为无人机的位置和姿态信息。

  3. 地图构建与管理模块:预先构建环境地图或数据库,存储环境特征信息。在飞行过程中,根据新采集的图像和匹配结果对地图进行更新和优化,确保地图的准确性和完整性,为后续的定位提供可靠依据。

(二)关键技术实现

  1. 实时特征提取与匹配:为满足无人机实时飞行的需求,需要优化特征提取与匹配算法,提高计算速度。例如,采用并行计算框架(如 OpenMP、CUDA 等)对算法进行加速,利用图形处理器(GPU)的并行计算能力,快速处理大量图像数据,实现实时的特征提取与匹配。

  2. 地图更新与维护:随着无人机的飞行,环境信息可能发生变化,需要及时更新地图。通过对新采集图像的特征匹配和定位结果,判断环境特征的变化情况,对地图中的特征点和相关信息进行添加、删除或修正,确保地图与实际环境的一致性。

⛳️ 运行结果

📣 部分代码

function MapCrop()

img1 = imread('map/8KUHD_FongYuan2.png');

% 圖像調整

img1 = histeq(img1);

img1 = imgaussfilt(img1, 2);

img1 = cat(3, img1(:,:,1), img1(:,:,2), img1(:,:,3));

% h = fspecial('unsharp');

% img1 = img1 + 30;

% 調整解析度

sfactor1 = 1;

img1 = imresize(img1, sfactor1);

% 切割

% 把矩陣大小補零,這樣在做切割時才不會有問題

numrow = size(img1, 1); % 取img1的row數

numcol = size(img1, 2);

numrow = ceil(numrow / 300) * 300; % 將numrow往上取到size的倍數

numcol = ceil(numcol / 300) * 300;

img1(numrow,numcol,3) = 0;

figure()

imshow(img1)

SkipStep = 300; % 每個切割後圖片塊的大小

M_img1 = 300; % 圖片塊的長

N_img1 = 300; % 圖片塊的寬

n = 0; % 圖片塊的編號

Double_img1 = im2double(img1); % 把圖片轉成雙精值

[H,W,t] = size(Double_img1); % 得到矩陣的大小

xStepNum = floor((W-N_img1)/SkipStep+1); % 朝負無窮方向取整,寬度方向block移動的次數

yStepNum = floor((H-M_img1)/SkipStep+1); % 朝負無窮方向取整,長度方向block移動的次數

for i = 1:xStepNum

for j = 1:yStepNum

n = n + 1;

P_img1 = Double_img1((j-1)*SkipStep+1:(j-1)*SkipStep+M_img1, (i-1)*SkipStep+1:(i-1)*SkipStep+N_img1, :); % 分割圖像

Cut_a = strcat('cmap\',num2str(n),'.png'); % 儲存的圖片位置及每幅圖片塊的命名

imwrite(double(P_img1),Cut_a);

end

end

end

🔗 参考文献

🍅更多免费数学建模和仿真教程关注领取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询