PythonRobotics
PythonRobotics copied to clipboard
Implement BayesFilter base class and refactor localization filters (#1277)
Reference issue
Fixes #1277
What does this implement/fix?
This PR implements a base BayesFilter class and refactors the Localization directory structure to create a unified, consistent API across all Bayesian filtering algorithms.
Key Changes:
-
Base BayesFilter Class (
bayes_filter.py)- Created an abstract base class defining the common interface for all Bayesian filters
- Defines abstract methods:
predict(),update(),get_state(),get_covariance() - Provides optional
reset()method that can be overridden - Comprehensive documentation with docstrings
-
Extended Kalman Filter Implementation (
ekf_localization.py)- New ExtendedKalmanFilter class that inherits from BayesFilter
- Implements all required abstract methods
- Maintains Gaussian belief (state mean and covariance matrix)
- Includes motion and observation models with Jacobians
- Configurable process (Q) and measurement (R) noise covariances
-
Particle Filter Implementation (
pf_localization.py)- New ParticleFilter class that inherits from BayesFilter
- Implements all required abstract methods
- Represents belief as weighted particles for non-Gaussian distributions
- Includes low-variance resampling algorithm
- Provides effective particle count calculation
- Configurable noise parameters
Benefits:
- Consistency: All filters now share a common interface, making them interchangeable
- Maintainability: Changes to the base class automatically propagate to all implementations
- Extensibility: New filter types can easily be added by extending BayesFilter
- Clarity: Clear separation of concerns with well-documented abstract methods
- Type Safety: Abstract base class ensures all implementations provide required methods
Additional information
This implementation demonstrates the design pattern requested in issue #1277. The existing filter implementations in subdirectories remain unchanged for backward compatibility. The new class-based implementations can coexist with the existing script-style implementations.
Future work could involve:
- Refactoring existing filter scripts to use the new base class
- Adding more filter types (UKF, Cubature KF, etc.) using this pattern
- Creating example scripts demonstrating the unified API
- Adding unit tests for each filter implementation
CheckList
- [ ] Did you add an unittest for your new example or defect fix?
- [ ] Did you add documents for your new example?
- [ ] All CIs are green? (You can check it after submitting)