【滤波跟踪】基于自适应UKF和UKF算法实现运动刚体的位姿估计附matlab代码

简介: 【滤波跟踪】基于自适应UKF和UKF算法实现运动刚体的位姿估计附matlab代码

1 内容介绍

本文研究了基于单目视觉的运动刚体位姿估计问题,提出了基于自适应无迹卡尔曼滤波算法(Adaptive Unscented Kalman Filter,AUKF)的位姿估计方法.考虑到运动刚体位姿估计系统的量测方程为非线性且过程噪声统计特征未知,通过递推噪声估计器在线估计过程噪声的均值和方差阵,解决了位姿估计系统中过程噪声统计特性未知时估计精度下降的问题.实验结果表明,AUKF算法提高了位姿估计的精度,并实现了过程噪声统计特性的在线估计.

2 仿真代码

clear all;clc;

ag=1;

flag =1;

t=0.05*ag;


TxtData1 = importdata('Mvideo1.txt');

armjoints = importdata('ralPointFile.txt');

TxtData2 = importdata('Mvideo2.txt');

m = size(TxtData2,1);

% kx2 = 839.321428295768 ;ky2 = 840.483960297146 ;u02 = 243.868668455832 ;v02 = 216.650954197449 ;

% kx1 = 809.345902119970; ky1 = 803.055062922696;u01 = 380.962537796614;v01 = 234.830825833781;

% % kx1 = 802.336514588841 ;ky1 = 804.376231832541 ;u01 = 331.447470345934 ;v01 = 244.468762099674 ;

% % kx2 = 798.050806080183 ;ky2 = 797.408432851774 ;u02 = 358.151014009806 ;v02 = 232.751596763967 ;

% kx2 = 832.054901757104; ky2 = 828.444768253781;u02 = 332.664199846859;v02 = 211.936118674671;% kx1 = 880.050806080183 ;ky1 = 880.408432851774 ;u01 = 369.151014009806 ;v01 = 212.751596763967 ;

kx1 = 803.345902119970;ky1 = 803.055062922696;u01 = 380.962537796614;v01 = 233.830825833781;

kx2 = 830.054901757104;ky2 = 821.444768253781;u02 = 332.664199846859;v02 = 211.936118674671;

focalIndex = [kx1 ky1 u01 v01;kx2 ky2 u02 v02]';

RelatObjCoor = [-35,-80,0;

   35,-80,0;

   35,-10,0;

   -35,-10,0;

   -20,-65,0;

   20,-65,0;

   20,-25,0;

   -20,-25,0];


Init_X2 = [0;0;0;0;0;0;0;0;0;0.00001;0;0;0.000001;0;0;0.000001;0;0];

Init_X1 = [armjoints(1,1);armjoints(1,2);armjoints(1,3);0;0;0;0;0;0;armjoints(1,4)*pi/180;armjoints(1,5)*pi/180;armjoints(1,6)*pi/180;0.000001;0;0;0.000001;0;0];


x1 = Init_X1;

x2 = Init_X2;

P1 = 10*eye(18);P2 = P1;


%Q = diag([0,0,0,0.5,0.5,0.5,0.1,0.1,0.1,0,0,0,0.5,0.5,0.5,0.1,0.1,0.1],0);

% R = 0.06*eye(8);

%R = 10*diag([0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]);

x_aukf1=Init_X1;

P_aukf1 = 10*eye(18);

qaukf1=zeros(18,1);

%Qaukf1= 0.1*diag([0.00001,0.00001,0.00001,0.2,0.5,0.5,0.1,0.1,0.1,  0.00001,0.00001,0.00001,0.5,0.5,0.5,0.1,0.1,0.1],0);

Qaukf1 = 0.5*diag([0,0,0,0.5,0.5,0.5,0.1,0.1,0.1,0,0,0,0.5,0.5,0.5,0.1,0.1,0.1],0);

%Qaukf1=zeros(18,18);

raukf1=zeros(16,1);

Raukf1= 10*diag([0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]);




SData_X1 = zeros(fix(m/ag),6);

SData_X2 = zeros(fix(m/ag),6);


aa1=1.5;

aa2=-0.25;

aa3=0.75;

tic;

armjoints(1:m,1) =armjoints(1:m,1)-0.3;

armjoints(1:m,2) =armjoints(1:m,2)-0.1;

armjoints(1:m,3) =armjoints(1:m,3)-0.5;

armjoints(1:m,4) =armjoints(1:m,4)+0.8;

armjoints(1:m,5) =armjoints(1:m,5)-0.8;

armjoints(1:m,6) =armjoints(1:m,6)+0.5;

for i = 1:m/ag

   z1 = TxtData1(i,:)';

   z2 = TxtData2(i,:)';

   real =   armjoints(i,:)';

   z = [z1,z2];    

%    [ x1,P1 ] = NonlinerUKF(z1,x1,P1,focalIndex,t,RelatObjCoor,1);

   [ x_aukf1,P_aukf1,qaukf1,Qaukf1,raukf1,Raukf1,Q0 ] = NonlinerAUKF(z1,x_aukf1,P_aukf1,focalIndex,t,RelatObjCoor,qaukf1,Qaukf1,raukf1,Raukf1,1,i);

  %[ x2,P2 ] = NonlinerUKF(z,x2,P2,focalIndex,t,RelatObjCoor,4);tim2 = toc;

%    SData_X2(i,:) = [x1(1),x1(2),x1(3),x1(10)*180/pi,x1(11)*180/pi,x1(12)*180/pi];

   SData_X1(i,:) = [x_aukf1(1),x_aukf1(2)+aa2,x_aukf1(3)+aa3,x_aukf1(10)*180/pi,x_aukf1(11)*180/pi,x_aukf1(12)*180/pi];

end

toc

a = 1:m/ag;


save SData3 SData_X1;

%save SData5 SData_X2;


%save TrackTrue armjoints;

subplot(3,2,1);

plot(a,SData_X1(:,1),'r');hold on;

subplot(3,2,2);

plot(a,SData_X1(:,2),'r');hold on;

subplot(3,2,3);

plot(a,SData_X1(:,3),'r');hold on;

subplot(3,2,4);

plot(a,SData_X1(:,4),'r');hold on;

subplot(3,2,5);

plot(a,SData_X1(:,5),'r');hold on;

subplot(3,2,6);

plot(a,SData_X1(:,6),'r');hold on;


subplot(3,2,1);

plot(a,SData_X2(:,1),'b');hold on;

subplot(3,2,2);

plot(a,SData_X2(:,2),'b');hold on;

subplot(3,2,3);

plot(a,SData_X2(:,3),'b');hold on;

subplot(3,2,4);

plot(a,SData_X2(:,4),'b');hold on;

subplot(3,2,5);

plot(a,SData_X2(:,5),'b');hold on;

subplot(3,2,6);

plot(a,SData_X2(:,6),'b');hold on;

%

%

subplot(3,2,1);

plot(a,armjoints(:,1),'k');hold on;

subplot(3,2,2);

plot(a,armjoints(:,2),'k');hold on;

subplot(3,2,3);

plot(a,armjoints(:,3),'k');hold on;

subplot(3,2,4);

plot(a,armjoints(:,4),'k');hold on;

subplot(3,2,5);

plot(a,armjoints(:,5),'k');hold on;

subplot(3,2,6);

plot(a,armjoints(:,6),'k');hold on;

3 运行结果

4 参考文献

[1]张鋆豪, 杨旭升, 冯远静,等. 基于自适应无迹卡尔曼滤波和单目视觉的运动刚体位姿估计[C]// 中国控制会议. 2018.

[2]陈玉寅. 基于卡尔曼滤波器的运动刚体位姿估计方法研究. 浙江工业大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关文章
|
1天前
|
机器学习/深度学习 数据采集 算法
基于yolov2和googlenet网络的疲劳驾驶检测算法matlab仿真
本内容展示了基于深度学习的疲劳驾驶检测算法,包括算法运行效果预览(无水印)、Matlab 2022a 软件版本说明、部分核心程序(完整版含中文注释与操作视频)。理论部分详细阐述了疲劳检测原理,通过对比疲劳与正常状态下的特征差异,结合深度学习模型提取驾驶员面部特征变化。具体流程包括数据收集、预处理、模型训练与评估,使用数学公式描述损失函数和推理过程。课题基于 YOLOv2 和 GoogleNet,先用 YOLOv2 定位驾驶员面部区域,再由 GoogleNet 分析特征判断疲劳状态,提供高准确率与鲁棒性的检测方法。
|
1天前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
4天前
|
机器学习/深度学习 资源调度 算法
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
|
5天前
|
算法 数据安全/隐私保护 计算机视觉
基于sift变换的农田杂草匹配定位算法matlab仿真
本项目基于SIFT算法实现农田杂草精准识别与定位,运行环境为Matlab2022a。完整程序无水印,提供详细中文注释及操作视频。核心步骤包括尺度空间极值检测、关键点定位、方向分配和特征描述符生成。该算法通过特征匹配实现杂草定位,适用于现代农业中的自动化防控。
|
6天前
|
资源调度 算法 数据可视化
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。
|
7天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
7天前
|
算法 数据安全/隐私保护
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。
|
10天前
|
算法 数据安全/隐私保护
基于Adaboost的数据分类算法matlab仿真
本程序基于Adaboost算法进行数据分类的Matlab仿真,对比线性与非线性分类效果。使用MATLAB2022A版本运行,展示完整无水印结果。AdaBoost通过迭代训练弱分类器并赋予错分样本更高权重,最终组合成强分类器,显著提升预测准确率。随着弱分类器数量增加,训练误差逐渐减小。核心代码实现详细,适合研究和教学使用。
|
11天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
11天前
|
算法 数据安全/隐私保护
基于Big-Bang-Big-Crunch(BBBC)算法的目标函数最小值计算matlab仿真
该程序基于Big-Bang-Big-Crunch (BBBC)算法,在MATLAB2022A中实现目标函数最小值的计算与仿真。通过模拟宇宙大爆炸和大收缩过程,算法在解空间中搜索最优解。程序初始化随机解集,经过扩张和收缩阶段逐步逼近全局最优解,并记录每次迭代的最佳适应度。最终输出最佳解及其对应的目标函数最小值,并绘制收敛曲线展示优化过程。 核心代码实现了主循环、粒子位置更新、适应度评估及最优解更新等功能。程序运行后无水印,提供清晰的结果展示。

热门文章

最新文章