www.gusucode.com > MATLAB编程毕业设计 EKF SLAM仿真全部源代码 > predict.m

    function [x,P]= predict (x,P,v,g,Q,WB,dt)
%卡尔曼滤波的预测步骤,通过运动模型,给出预测的状态X和状态协方差P

s= sin(g+x(3)); c= cos(g+x(3));
vts= v*dt*s; vtc= v*dt*c;

% 雅可比矩阵 
Gv= [1 0 -vts;
     0 1  vtc;
     0 0 1];
Gu= [dt*c -vts;
     dt*s  vtc;
     dt*sin(g)/WB v*dt*cos(g)/WB];
  
% 预测状态协方差
P(1:3,1:3)= Gv*P(1:3,1:3)*Gv' + Gu*Q*Gu';
if size(P,1)>3
    P(1:3,4:end)= Gv*P(1:3,4:end);
    P(4:end,1:3)= P(1:3,4:end)';
end    

% 预测状态
x(1:3)= [x(1) + vtc; 
         x(2) + vts;
         pi_to_pi(x(3)+ v*dt*sin(g)/WB)];