annotate toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_partial_kf.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
rev   line source
wolffd@0 1 % See how well partial Kalman filter updates work
wolffd@0 2
wolffd@0 3 seed = 0;
wolffd@0 4 rand('state', seed);
wolffd@0 5 randn('state', seed);
wolffd@0 6 nlandmarks = 6;
wolffd@0 7 T = 12;
wolffd@0 8
wolffd@0 9 [A,B,C,Q,R,Qbig,Rbig,init_x,init_V,robot_block,landmark_block,...
wolffd@0 10 true_landmark_pos, true_robot_pos, true_data_assoc, ...
wolffd@0 11 obs_rel_pos, ctrl_signal] = mk_linear_slam(...
wolffd@0 12 'nlandmarks', nlandmarks, 'T', T, 'ctrl', 'leftright', 'data-assoc', 'cycle');
wolffd@0 13
wolffd@0 14 % exact
wolffd@0 15 [xe, Ve] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
wolffd@0 16 'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
wolffd@0 17
wolffd@0 18
wolffd@0 19 % approx
wolffd@0 20 %k = nlandmarks-1; % exact
wolffd@0 21 k = 3;
wolffd@0 22 ndx = {};
wolffd@0 23 for t=1:T
wolffd@0 24 landmarks = unique(true_data_assoc(t:-1:max(t-k,1)));
wolffd@0 25 tmp = [landmark_block(:, landmarks) robot_block'];
wolffd@0 26 ndx{t} = tmp(:);
wolffd@0 27 end
wolffd@0 28
wolffd@0 29 [xa, Va] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
wolffd@0 30 'model', true_data_assoc, 'u', ctrl_signal, 'B', B, ...
wolffd@0 31 'ndx', ndx);
wolffd@0 32
wolffd@0 33
wolffd@0 34
wolffd@0 35 nrows = 10;
wolffd@0 36 stepsize = T/(2*nrows);
wolffd@0 37 ts = 1:stepsize:T;
wolffd@0 38
wolffd@0 39 if 1 % plot
wolffd@0 40
wolffd@0 41 clim = [0 max(max(Va(:,:,end)))];
wolffd@0 42
wolffd@0 43 figure(2)
wolffd@0 44 if 0
wolffd@0 45 imagesc(Ve(1:2:end,1:2:end, T))
wolffd@0 46 clim = get(gca,'clim');
wolffd@0 47 else
wolffd@0 48 i = 1;
wolffd@0 49 for t=ts(:)'
wolffd@0 50 subplot(nrows,2,i)
wolffd@0 51 i = i + 1;
wolffd@0 52 imagesc(Ve(1:2:end,1:2:end, t))
wolffd@0 53 set(gca, 'clim', clim)
wolffd@0 54 colorbar
wolffd@0 55 end
wolffd@0 56 end
wolffd@0 57 suptitle('exact')
wolffd@0 58
wolffd@0 59
wolffd@0 60 figure(3)
wolffd@0 61 if 0
wolffd@0 62 imagesc(Va(1:2:end,1:2:end, T))
wolffd@0 63 set(gca,'clim', clim)
wolffd@0 64 else
wolffd@0 65 i = 1;
wolffd@0 66 for t=ts(:)'
wolffd@0 67 subplot(nrows,2,i)
wolffd@0 68 i = i+1;
wolffd@0 69 imagesc(Va(1:2:end,1:2:end, t))
wolffd@0 70 set(gca, 'clim', clim)
wolffd@0 71 colorbar
wolffd@0 72 end
wolffd@0 73 end
wolffd@0 74 suptitle('approx')
wolffd@0 75
wolffd@0 76
wolffd@0 77 figure(4)
wolffd@0 78 i = 1;
wolffd@0 79 for t=ts(:)'
wolffd@0 80 subplot(nrows,2,i)
wolffd@0 81 i = i+1;
wolffd@0 82 Vd = Va(1:2:end,1:2:end, t) - Ve(1:2:end,1:2:end,t);
wolffd@0 83 imagesc(Vd)
wolffd@0 84 set(gca, 'clim', clim)
wolffd@0 85 colorbar
wolffd@0 86 end
wolffd@0 87 suptitle('diff')
wolffd@0 88
wolffd@0 89 end % all plot
wolffd@0 90
wolffd@0 91
wolffd@0 92 for t=1:T
wolffd@0 93 %err(t)=rms(xa(:,t), xe(:,t));
wolffd@0 94 err(t)=rms(xa(1:end-2,t), xe(1:end-2,t)); % exclude robot
wolffd@0 95 end
wolffd@0 96 figure(5);plot(err)
wolffd@0 97 title('rms mean pos')
wolffd@0 98
wolffd@0 99
wolffd@0 100 for t=1:T
wolffd@0 101 i = 1:2*nlandmarks;
wolffd@0 102 denom = Ve(i,i,t) + (Ve(i,i,t)==0);
wolffd@0 103 Vd =(Va(i,i,t)-Ve(i,i,t)) ./ denom;
wolffd@0 104 Verr(t) = max(Vd(:));
wolffd@0 105 end
wolffd@0 106 figure(6); plot(Verr)
wolffd@0 107 title('max relative Verr')