template struct mrpt::bayes::CParticleFilterDataImpl
Overview
A curiously recurring template pattern (CRTP) approach to providing the basic functionality of any CParticleFilterData<> class.
Users should inherit from CParticleFilterData<>, which in turn will automatically inhirit from this base class.
See also:
CParticleFilter, CParticleFilterCapable, CParticleFilterData
#include <mrpt/bayes/CParticleFilterData.h> template <class Derived, class particle_list_t> struct CParticleFilterDataImpl: public mrpt::bayes::CParticleFilterCapable { // methods const Derived& derived() const; Derived& derived(); virtual double getW(size_t i) const; virtual void setW(size_t i, double w); virtual size_t particlesCount() const; virtual double normalizeWeights(double* out_max_log_w = nullptr); virtual double ESS() const; virtual void performSubstitution(const std::vector<size_t>& indx); }; // direct descendants class CMultiMetricMapPDF; class CPointPDFParticles; class CPose3DPDFParticles; class CPosePDFParticles; struct SimpleParticlePDF;
Inherited Members
public: // typedefs typedef std::function<double(const bayes::CParticleFilter::TParticleFilterOptions&PF_options, const CParticleFilterCapable*obj, size_t index, const void*action, const void*observation)> TParticleProbabilityEvaluator; // structs struct TFastDrawAuxVars; // methods void prepareFastDrawSample( const bayes::CParticleFilter::TParticleFilterOptions& PF_options, TParticleProbabilityEvaluator partEvaluator = defaultEvaluator, const void* action = nullptr, const void* observation = nullptr ) const; size_t fastDrawSample(const bayes::CParticleFilter::TParticleFilterOptions& PF_options) const; virtual double getW(size_t i) const = 0; virtual void setW(size_t i, double w) = 0; virtual size_t particlesCount() const = 0; void prediction_and_update(const mrpt::obs::CActionCollection* action, const mrpt::obs::CSensoryFrame* observation, const bayes::CParticleFilter::TParticleFilterOptions& PF_options); virtual void performSubstitution(const std::vector<size_t>& indx) = 0; virtual double normalizeWeights(double* out_max_log_w = nullptr) = 0; virtual double ESS() const = 0; void performResampling(const bayes::CParticleFilter::TParticleFilterOptions& PF_options, size_t out_particle_count = 0); static double defaultEvaluator( ] const bayes::CParticleFilter::TParticleFilterOptions& PF_options, ] const CParticleFilterCapable* obj, size_t index, ] const void* action, ] const void* observation ); static void computeResampling( CParticleFilter::TParticleResamplingAlgorithm method, const std::vector<double>& in_logWeights, std::vector<size_t>& out_indexes, size_t out_particle_count = 0 ); static void log2linearWeights( const std::vector<double>& in_logWeights, std::vector<double>& out_linWeights ); static std::vector<double> logWeightsToLinear(const std::vector<double>& in_logWeights);
Methods
virtual double getW(size_t i) const
Access to i’th particle (logarithm) weight, where first one is index 0.
virtual void setW(size_t i, double w)
Modifies i’th particle (logarithm) weight, where first one is index 0.
virtual size_t particlesCount() const
Get the m_particles count.
virtual double normalizeWeights(double* out_max_log_w = nullptr)
Normalize the (logarithmic) weights, such as the maximum weight is zero.
Parameters:
out_max_log_w |
If provided, will return with the maximum log_w before normalizing, such as new_weights = old_weights - max_log_w. |
Returns:
The max/min ratio of weights (“dynamic range”)
virtual double ESS() const
Returns the normalized ESS (Estimated Sample Size), in the range [0,1].
Note that you do NOT need to normalize the weights before calling this.
virtual void performSubstitution(const std::vector<size_t>& indx)
Replaces the old particles by copies determined by the indexes in “indx”, performing an efficient copy of the necessary particles only and allowing the number of particles to change.
The input index vector is sorted internally before processing.