Python example: mrpt_bayes_example.py
Configures particle filter options and algorithms with mrpt.bayes.
Modules: mrpt.bayes
1#!/usr/bin/env python3
2"""
3Configures particle filter options and algorithms with mrpt.bayes.
4
5Demonstrates:
6 - TParticleFilterOptions: configure algorithm, resampling, ESS threshold
7 - TParticleFilterAlgorithm / TParticleResamplingAlgorithm enums
8 - CParticleFilter: inspect and modify the filter object
9
10NOTE: CParticleFilter.executeOn() requires a C++ CParticleFilterCapable PDF
11object which cannot be constructed from pure Python. For a full RBPF SLAM
12example see rbpf_slam.py, which drives CMetricMapBuilderRBPF from C++.
13This example focuses on what CAN be done directly: configuring the filter
14parameters before passing them to a C++ algorithm.
15"""
16
17from mrpt.bayes import (
18 CParticleFilter,
19 TParticleFilterOptions,
20 TParticleFilterAlgorithm,
21 TParticleResamplingAlgorithm,
22 TParticleFilterStats,
23)
24
25# ---------------------------------------------------------------------------
26# Enumerations
27# ---------------------------------------------------------------------------
28print("TParticleFilterAlgorithm values:")
29for name in ["pfStandardProposal", "pfAuxiliaryPFStandard",
30 "pfOptimalProposal", "pfAuxiliaryPFOptimal"]:
31 val = getattr(TParticleFilterAlgorithm, name)
32 print(f" {name} = {int(val)}")
33
34print("\nTParticleResamplingAlgorithm values:")
35for name in ["prMultinomial", "prResidual", "prStratified", "prSystematic"]:
36 val = getattr(TParticleResamplingAlgorithm, name)
37 print(f" {name} = {int(val)}")
38
39# ---------------------------------------------------------------------------
40# CParticleFilter — configuration
41# ---------------------------------------------------------------------------
42pf = CParticleFilter()
43print(f"\nDefault CParticleFilter: {pf}")
44
45# Tune options
46pf.options.BETA = 0.75 # resample when ESS drops below 75%
47pf.options.sampleSize = 200 # number of particles
48pf.options.PF_algorithm = TParticleFilterAlgorithm.pfStandardProposal
49pf.options.resamplingMethod = TParticleResamplingAlgorithm.prStratified
50
51print(f"After tuning: BETA={pf.options.BETA}, sampleSize={pf.options.sampleSize}")
52print(f" algorithm = {pf.options.PF_algorithm}")
53print(f" resampling = {pf.options.resamplingMethod}")
54print(f" {pf.options}")
55
56# ---------------------------------------------------------------------------
57# TParticleFilterStats — result statistics container
58# ---------------------------------------------------------------------------
59stats = TParticleFilterStats()
60print(f"\nTParticleFilterStats (empty): ESS={stats.ESS_beforeResample:.4f}")
61# In a real run, stats would be filled by executeOn()
62stats.ESS_beforeResample = 0.42
63print(f"After setting: {stats}")