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

matlab例程

开发平台:

Matlab

  1. function [ x,w ] = particleFilter( x,w, action, observation )
  2. % A simple SIS with resampling filter
  3. % ------------------------------------------------------------------------------------------------------
  4. % function [ x,w ] = particleFilter( x,w, action, observation )
  5. %
  6. % This function implements one step of the simple SIS with resampling
  7. % particle filter for the especific case of a 2D planar robot and a very simple observation model. 
  8. %  The parameters are:
  9. %   x : Mx(N*3) matrix, with M samples over N-steps in a 3-D path.
  10. %   w : A 1xM or Mx1 vector with the particle importance weights.
  11. %   action: A pose increment vector = (Ax,Ay,Aphi)
  12. %   observation: The actual robot pose (a 3-length vector).
  13. %
  14. % Returns:
  15. %   x : Mx((N+1)*3) matrix, the input with the new pose added to each row.
  16. %   w : 1xM matrix with the new weights.
  17. %
  18. %  J.L. Blanco - University of Malaga, Spain
  19. % ------------------------------------------------------------------------------------------------------
  20. % ------------------------------------------------------------------------------------------------------
  21. % Copyright (c) 2007  Jose Luis Blanco Claraco.
  22. % Permission is hereby granted, free of charge, to any person obtaining a copy of
  23. % this software and associated documentation files (the "Software"), to deal in
  24. % the Software without restriction, including without limitation the rights to
  25. % use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
  26. % of the Software, and to permit persons to whom the Software is furnished to do
  27. % so, subject to the following conditions:
  28. % The above copyright notice and this permission notice shall be included in all
  29. % copies or substantial portions of the Software.
  30. % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31. % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32. % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  33. % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34. % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35. % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  36. % SOFTWARE.
  37. % ------------------------------------------------------------------------------------------------------
  38. M = size(x,1);
  39. global Beta;
  40. global showResamplePlot;
  41. % Motion model
  42. % ------------------------------------------------
  43. [x] = motionModel( x , action );
  44. % Observation Model
  45. % ------------------------------------------------
  46. Wt = observationLikelihood(x,observation);
  47. w = w .* Wt;
  48. % Normalize the weights:
  49. % ------------------------------------------------
  50. w = w ./ sum(w);
  51. % Resample?
  52. % ------------------------------------------------
  53. ESS_before = ESS(w);
  54. if ( ESS_before < Beta*M ), 
  55.     % Find the indexes for the resample:
  56.     indx = resample(w);
  57.     
  58.     % Duplicate particles & set equal weights:
  59.     x(:,:)=x(indx,:);
  60.     w=ones(M,1)./M;
  61.     
  62.     if (showResamplePlot),
  63.         disp(sprintf('Resampling... ESS: %0.3f -> %0.3f',ESS_before, ESS(w)));
  64.     end
  65. end