Advertisement
Guest User

EKF localization (prediction only)

a guest
Feb 18th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.17 KB | None | 0 0
  1. function [mu2, cov2] = ekf_localization(mu, cov, v, w, dt)
  2.     % prediction only
  3.    
  4.     % noise model
  5.     a1 = 0.01;
  6.     a2 = 0;
  7.     a3 = 0;
  8.     a4 = 0.01;
  9.    
  10.     theta = mu(3);
  11.     G = eye(3, 3);
  12.     M = zeros(2, 2);
  13.    
  14.     G(1, 3) = -(v/w)*cos(theta) + (v/w)*cos(theta + w*dt);
  15.     G(2, 3) = -(v/w)*sin(theta) + (v/w)*sin(theta + w*dt);
  16.  
  17.     V(1, 1) = (-sin(theta) + sin(theta + w*dt))/w;
  18.     V(1, 2) = v*(sin(theta) - sin(theta + w*dt))/(w*w) + v*cos(theta + w*dt)*dt/w;
  19.     V(2, 1) = (cos(theta) - cos(theta + w*dt))/w;
  20.     V(2, 2) = -v*(cos(theta) - cos(theta + w*dt))/(w*w) + v*sin(theta + w*dt)*dt/w;
  21.     V(3, 1) = 0;
  22.     V(3, 2) = dt;
  23.  
  24.     M(1, 1) = a1*v*v + a2*w*w;
  25.     M(2, 2) = a3*v*v + a4*w*w;
  26.    
  27.     mu2 = mu + [-(v/w)*sin(theta) + (v/w)*sin(theta + w*dt); (v/w)*cos(theta) - (v/w)*cos(theta + w*dt); w*dt];
  28.  
  29.     cov2 = G*cov*G' + V*M*V';    
  30. end
  31.  
  32. dt = 0.01;
  33.  
  34. mu = [0; 0; 0]; % initial state
  35. cov = zeros(3, 3); % initial covariance
  36. v = 1; % velocity, arbitary units
  37. w = 45*pi/180; % angular velocity, rads/s
  38.  
  39. cov_hist = [];
  40.  
  41. for i=1:6000
  42.     [mu2, cov2] = ekf_localization(mu, cov, v, w, dt);
  43.     mu = mu2;
  44.     cov = cov2;
  45.    
  46.     [vec, lambda] = eig(cov(1:2, 1:2));
  47.    
  48.     r1 = sqrt(lambda(1,1));
  49.     r2 = sqrt(lambda(2,2));
  50.  
  51.     cov_hist = [cov_hist; i*dt pi*r1*r2];
  52. end
  53.  
  54. figure(1);
  55. clf;
  56. hold on;
  57. plot(cov_hist(:,1), cov_hist(:,2), 'r;constant velocity ;');
  58. grid on
  59.  
  60. % with velocity inverted
  61. mu = [0; 0; 0]; % initial state
  62. cov = zeros(3, 3); % initial covariance
  63. v = 1; % velocity, arbitary units
  64. w = 45*pi/180; % angular velocity, rads/s
  65.  
  66. cov_hist = [];
  67.  
  68. for i=1:6000
  69.     if i == 1000
  70.         v = -v;
  71.         %w = -w;
  72.     end
  73.    
  74.     [mu2, cov2] = ekf_localization(mu, cov, v, w, dt);
  75.     mu = mu2;
  76.     cov = cov2;
  77.    
  78.     [vec, lambda] = eig(cov(1:2, 1:2));
  79.    
  80.     r1 = sqrt(lambda(1,1));
  81.     r2 = sqrt(lambda(2,2));
  82.  
  83.     cov_hist = [cov_hist; i*dt pi*r1*r2];
  84. end
  85.  
  86. figure(1);
  87. plot(cov_hist(:,1), cov_hist(:,2), ';velocity inverted at t=10 ;');
  88. xlabel("time (seconds)");
  89. ylabel("covariance area for xy (pi*major*minor axis)");
  90. title("EKF prediction only");
  91. grid on
  92. legend ("location", "northwest");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement