搜索
bottom↓
回复: 7

姿态求解,卡尔曼算法讨论,附程序,效果图

[复制链接]

出0入0汤圆

发表于 2011-11-20 13:57:58 | 显示全部楼层 |阅读模式
卡尔曼滤波MATlab程序:
% modeling data
% sample number N=200 points
% sample time T=0.1s
t=0:0.1:20-0.1;
T=0.1;            % sample time
v=0.5;            % initial velocity
y=ones(1,200);
y(1)=0;
for n=2:200;
    y(n)=y(n-1)+v*T;
end
figure(1);
plot(t,y,'-');
axis([0 20 0 20]);
xlabel('time');
ylabel('yp position');
title('the initial track of movement');


(原文件名:初始轨迹.jpg)

% add white gauss noise
a=0.5*randn(1,200);
s=y+a;            %data+noise
figure(2);
plot(t,s,'-');
axis([0 20 0 20]);
xlabel('time');
ylabel('yp position');
title('the track of movement with noise');
save initial_track s



(原文件名:加入高斯白噪声后的轨迹.jpg)

% kalman filtering

load initial_track  s; % y:initial data,s:data with noise
T=0.1;

% yp denotes the sample value of position
% yv denotes the sample value of velocity
% Y=[yp(n);yv(n)];
% error deviation caused by the random acceleration
% known data
Y=zeros(2,200);
Y0=[0;1];         %系统状态初始值
Y(:,1)=Y0;
A=[1,T;0,1];      %系统状态转移矩阵     
B=[1/2*(T)^2 T]'; %噪声输入矩阵
H=[1 0];          %观测阵

C0=[0,0;0,1];     %cov 初始值
C=[C0 zeros(2,2*199)];
Q=(0.25)^2;       %过程噪声
R=(0.25)^2;       %观测噪声


% kalman algorithm ieration
for n=1:200
    i=(n-1)*2+1;
    K=C(:,i:i+1)*H'*inv(H*C(:,i:i+1)*H'+R);
    Y(:,n)=Y(:,n)+K*(s(:,n)-H*Y(:,n));
    Y(:,n+1)=A*Y(:,n);
    C(:,i:i+1)=(eye(2,2)-K*H)*C(:,i:i+1);
    C(:,i+2:i+3)=A*C(:,i:i+1)*A'+B*Q*B';
end

% the diagram of position after filtering
figure(3)
t=0:0.1:20;
yp=Y(1,:);
plot(t,yp,'-');
axis([0 20 0 20]);
xlabel('time');
ylabel('yp position');
title('the track after kalman filtering');


(原文件名:加入噪声并卡尔曼滤波后波形.jpg)


% the diagram of velocity after filtering
figure(4)
yv=Y(2,:);
plot(t,yv,'-');
xlabel('time');
ylabel('yv velocity');
title('the velocity caused by random acceleration');   


(原文件名:随机误差对角速率的影响.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-11-20 14:02:03 | 显示全部楼层
这个是在网上找到的,有个疑问:这个程序采用的模型是什么样的呢?

出0入0汤圆

 楼主| 发表于 2011-11-20 15:36:39 | 显示全部楼层
个人对以上程序的理解:上面程序是对陀螺仪数据的一个预测与修正,其中陀螺仪的角速率v始终为0.5,共采集200个点,步长为0.1;y表示的是陀螺仪转过的实际角度,其初始值为0。Y包含陀螺仪的角速率(yv),以及角度(yp);采用的系统模型为yp(k)=yp(k-1)+yv(k-1)T+BpWp(k-1),yv(k)=yv(k-1)+BvWv(k-1);其中W为噪声。观测值为S=(s,sv)',其中s即加入白噪声后的角度,如图2所示,sv为0,观测模型为:S(k)=HY(k)+V(k),其中V(k)为观测噪声。不知正确与否,欢迎讨论。

出0入0汤圆

发表于 2011-11-22 16:09:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-12-4 15:38:54 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2012-2-4 11:29:08 | 显示全部楼层
好东西!

出0入0汤圆

发表于 2012-2-4 11:52:26 | 显示全部楼层
不知道好在哪裡。

Kalman filter 重點是系統模型和觀測模型(及噪訊協方差)的建立。
這兩個建立或假設錯誤,基本上就是garbage in garbage out(GIGO)。

上面做的東西基本上就是LPF,一點意義也沒有。

出0入0汤圆

发表于 2012-2-8 09:10:31 | 显示全部楼层
根本看不懂啊,现在才发现当初不听课的后果
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 04:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表