runExample.m
上传用户:zfsfly
上传日期:2018-05-24
资源大小:71k
文件大小:5k
源码类别:

matlab例程

开发平台:

Matlab

  1. function [U] = runExample(INTERACTIVE,RESAMPLE_METHOD)
  2. % The main script for running the Particle Filter example
  3. % ------------------------------------------------------------------------------------------------------
  4. % function [U] = runExample(INTERACTIVE,RESAMPLE_METHOD)
  5. %
  6. %   INTERACTIVE =       0/1 : do not/do show graphics and wait for key press
  7. %   RESAMPLE_METHOD =   0: Multinomial Resampling
  8. %                       1: Residual Resampling
  9. %                       2: Stratified Resampling
  10. %                       3: Systematic Resampling
  11. %
  12. % This function runs some steps of a particle filter and return some
  13. % statistics.
  14. %
  15. %  J.L. Blanco - University of Malaga, Spain
  16. % ------------------------------------------------------------------------------------------------------
  17. % ------------------------------------------------------------------------------------------------------
  18. % Copyright (c) 2007  Jose Luis Blanco Claraco.
  19. % Permission is hereby granted, free of charge, to any person obtaining a copy of
  20. % this software and associated documentation files (the "Software"), to deal in
  21. % the Software without restriction, including without limitation the rights to
  22. % use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
  23. % of the Software, and to permit persons to whom the Software is furnished to do
  24. % so, subject to the following conditions:
  25. % The above copyright notice and this permission notice shall be included in all
  26. % copies or substantial portions of the Software.
  27. % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28. % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29. % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30. % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31. % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32. % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  33. % SOFTWARE.
  34. % ------------------------------------------------------------------------------------------------------
  35. % --------------------------------------------------------
  36. %   PARAMETERS OF THE SIMULATION
  37. % --------------------------------------------------------
  38. global sensorNoiseStd;
  39. global resampleMethod;
  40. global Beta;
  41. global showResamplePlot;
  42. showResamplePlot=INTERACTIVE;
  43. resampleMethod=RESAMPLE_METHOD;
  44. M = 500;                                    % Number of particles
  45. Beta = 0.5;                                 % Resampling threshold for ESS [0,1]
  46. odometry_bias=[0.00 0.00 0.00];             % Bias of each odometry reading
  47. odometry_std=[0.02 0.02 0.001];             % Standard deviation of the gaussian noise of the x,y,phi components of the odometry
  48. sensorNoiseStd=0.05;                        % Noise for the simulated "global position"-sensor readings
  49. % --------------------------------------------------------
  50. %   END OF "PARAMETERS OF THE SIMULATION"
  51. % --------------------------------------------------------
  52. if (INTERACTIVE),
  53.     close all;
  54. end
  55. % Initial distribution of samples & weights:
  56. % All start at (0,0,0)
  57. x = zeros(M,3);         
  58. % or global localization:
  59. %x = [(rand(M,1)-0.5)*0.2 (rand(M,1)-0.5)*0.2 (rand(M,1)-0.5)*2*pi]; %
  60. w = ones(M,1) ./M;
  61. % Initialize the ground truth robot pose:
  62. x_GT = zeros(1,3);
  63. U(1) = M;    
  64. for t=1:20,
  65. if (INTERACTIVE),
  66.         % Erase plots:
  67.         figure(1);
  68.         subplot(2,2,1:2);
  69.         hold off;
  70.         % Draw the particles:
  71.         plotParticles(x,w);     % Dibujar.
  72.         title('Samples and ground truth');
  73.         % Draw the GT:
  74.         set(plot( x_GT(1:3:end), x_GT(2:3:end), 'b.'),'MarkerSize',30);
  75.         axis equal;
  76.        
  77.         % Wait a key and iterate
  78.         pause;
  79. end    
  80.     
  81.     
  82.     % Generate the desired (x,y,phi) action for "t":
  83.     action = [1.0 0 0];
  84.     if mod(t,2)==0,
  85.         action(3) = pi/3;
  86.     end
  87.     
  88.     % Move the "real robot":
  89.     x_GT(t*3+1) = x_GT((t-1)*3+1) + action(1).*cos(x_GT((t-1)*3+3)) - action(2).*sin(x_GT((t-1)*3+3));
  90.     x_GT(t*3+2) = x_GT((t-1)*3+2) + action(1).*sin(x_GT((t-1)*3+3)) + action(2).*cos(x_GT((t-1)*3+3));
  91.     x_GT(t*3+3) = x_GT((t-1)*3+3) + action(3);
  92.     
  93.     % Corrupt the action to emulate odometry noise:
  94.     action = action + odometry_bias + odometry_std .* randn(1,3);
  95.     % Observation: The real robot pose plus certain noise:
  96.     observation = [x_GT(t*3+1) x_GT(t*3+2)] + randn(1,2).*sensorNoiseStd;
  97.     
  98.     % Process one step of the particle filter:
  99.     % (resample.m updates subplots 2 & 3)
  100.     [ x,w ] = particleFilter( x,w, action, observation );
  101.             
  102.     % Compute the number of different PATH hypotheses:
  103.     U(t+1) = countPathHypotheses(x);    
  104.     if (INTERACTIVE),
  105.         disp(sprintf('ESS(%2i) = %f',t,ESS(w)));
  106.         disp(sprintf('# of different path hypotheses: %i',U(t+1)));
  107.     end
  108. end