Releases: robotology/bayes-filters-lib
Releases · robotology/bayes-filters-lib
BayesFilters 0.10.1 (2025-10-08)
What's Changed
- Fix typo in README by @traversaro in #100
- Update files vendored from YCM to YCM v0.15.1 by @traversaro in #101
- Add conda installation information in the README by @GiulioRomualdi in #103
- Fix compatibility with Eigen3 5.0.0 and bump version to 0.10.1 by @traversaro in #105
New Contributors
- @traversaro made their first contribution in #100
- @GiulioRomualdi made their first contribution in #103
Full Changelog: 0.10.0...v0.10.1
BayesFilters 0.10.0 (2022-11-21)
CMake
- Minor version increases since API compatibility is broken.
Filtering utilities
- Improve documentation of methods
bfl::utils::quaternion_to_rotation_vector(),bfl::utils::rotation_vector_to_quaternion(),bfl::utils::sum_quaternion_rotation_vector(),bfl::utils::diff_quaternion(),bfl::utils::mean_quaternion(). - Implemented class
VectorDescriptionwhich describes the size of the inner components of a state/measurement vector (linear, rotational and noise parts). - Updated the
FunctionEvaluationalias withinsigma_point.hin order to use aVectorDescriptionas one of the outputs. - Updated implementation of variants of the
unscented_transform()transforms withinsigma_point.htaking into account the new definition of theFunctionEvaluationalias. - Added a constructor to the
UTWeightstruct such that it can be constructed starting from aVectorDescriptiondescription. - Added support for quaternions in
bfl::sigma_point::sigma_point()method. - Added support for quaternions in
bfl::sigma_point::unscented_transform()method. - Implemented method
VectorDescription::dof_size()providing the number of degrees of freedom associated to the vector (which might be different fromVectorDescription::total_size()). - Fixed implementation of
bfl::sigma_points::UTWeightconstructor such that it uses the number of degrees of fredom of the vector to decide the number of sigma points to be initialized. - Added support for arguments inheriting from
Eigen::MatrixBase<T>with different instances ofTwithin the constructors of methodsbfl::utils::sum_quaternion_rotation_vector(),bfl::utils::diff_quaternionandbfl::utils::mean_quaternion().
Filtering functions
- Substituted
ExogenousProcess::getOutputSize()withExogenousProcess::getStateDescription()which uses theVectorDescriptionclass to describe the size of the output of the exogenous process. - Substituted
StateProcess::getOutputSize()with pure virtualStateProcess::getStateDescription()which uses theVectorDescriptionclass to describe the size of the state of the state model. - Added pure virtual method
StateProcess::getInputDescription()which uses theVectorDescriptionclass to describe the size of the input to the state model. - Substituted
MeasurementModel::getOutputSize()withMeasuremnetModel::getMeasurementDescription()which uses theVectorDescriptionclass to describe the size of the measurement of the measurement model. This method is not mandatory and a default implementation (raising an exception) is provided as not all measurements are provided with a vectorial description. - Added method
MeasurementModel::getInputDescription()which uses theVectorDescriptionclass to describe the size of the input to the measurement model. This method is not mandatory and a default implementation (raising an exception) is provided as not all measurements are provided with a vectorial description. - Updated implementation of class
WhiteNoiseAccelerationto take into account changes in theStateModelinterface. - Updated implementation of class
AdditiveStateModelto take into account changes in theStateModelinterface. - Updated implementation of class
SimulatedLinearSensorto take into account changes in theStateModelandMeasurementModelinterfaces. - Added method
StateModel::setSamplingTime()that sets the sampling time of the state model.
Filtering algorithms
- Updated implementation of
SUKFCorrectionin order to extract relevant information on the measurement size using theVectorDescriptionof the adopted measurement model. - Updated implementation of
UKFCorrectionin order to extract relevant information on the measurement size using theVectorDescriptionof the adopted measurement model. - Updated implementation of
UKFPredictionin order to extract relevant information on state size using theVectorDescriptionof the adopted state model. - Added support for measurement models having a time-varying input
VectorDescriptioninUKFCorrection. The feature is enabled using a boolean argument in the constructor.
Test
- Updated tests
test_Gaussian_Density_UVR,test_UKF,test_UPF,test_UPF_MAP,test_mixed_KF_SUKF,test_mixed_KF_UKFandtest_mixed_UKF_KFto account for the changes in the interface of theAdditiveMeasurementModel,UKFPrediction,UKFCorrectionandSUKFCorrectionclasses.
BayesFilters 0.9.0 (2021-06-14)
CMake
- Minor version increases since API compatibility is broken.
Bugfix
- Fixed missing self-assignment check in move assignment operators.
General improvements
- Changed any::any default pointer value to nullptr.
Filtering utilities
- Constructor EstimatesExtraction::EstimatesExtraction() takes the state size, both linear and circular.
- Class EstimatesExtraction does not assume that the state is a 7-vector containing cartesian position and axis/angle representation of orientation anymore.
- Implemented MAP (maximum a posteriori) estimate extraction within method EstimatesExtraction::map().
- Implemented overloaded version of EstimatesExtraction::extract() taking extra arguments (particle weights at the previous time step, likelihoods at the current step and matrix of Markov transition probabilities between previous and current states) required to expose MAP extraction utiliy to the user.
- Implemented method GaussianMixture::resize().
- Implemented method
GaussianMixture::augmentWithNoise(). - Implemented method Gaussian::resize().
- Implemented method ParticleSet::resize().
- Added support for quaternions in classes
Gaussian,GaussianMixtureandParticleSet. - Implemented evaluation of a multivariate Gaussian probability density function in method utils::multivariate_gaussian_density.
- Implemented evaluation of the logarithm of a multivariate Gaussian probability density function in method utils::multivariate_gaussian_log_density.
- Implemented evaluation of a multivariate Gaussian probability density function with UVR factorized covariance matrix in method
utils::multivariate_gaussian_density_UVR(). - Implemented evaluation of the logarithm of a multivariate Gaussian probability density function with UVR factorized covariance matrix in method
utils::multivariate_gaussian_log_density_UVR(). - Methods EstimatesExtraction::extract() return a std::pair containing a boolean indicating if the estimate is valid and the estracted estimate.
- Methods EstimatesExtraction::extract() assume that particle weights are in the log space.
- Constructor HistoryBuffer::HistoryBuffer() takes the state size.
- Renamed Logger::log_filenames() in Logger::log_file_names().
- Renamed Logger::get_prefix_path() in Logger::get_folder_path().
- Renamed Logger::get_prefix_name() in Logger::get_file_name_prefix().
- Logger::enable_log() now requires absolute or relative paths as input.
- Added method
bfl::utils::quaternion_to_rotation_vector()that takes the logarithm of a unitary quaternion and return its imaginary part belonging to the tangent space, i.e. it is a rotation vector. - Added method
bfl::utils::rotation_vector_to_quaternion()that takes the exponential of rotation vector, i.e. the associated unitary quaternion. - Added method
bfl::utils::sum_quaternion_rotation_vector()that evaluates the colwise sum between a unitary quaternion and a set of rotation vectors. The i-th sum is obtained as the quaternion product between the exponential of the i-th rotation vector and the quaternion. - Added method
bfl::utils::diff_quaternion()that evaluates the colwise difference between a set of quaternions and a given unitary quaternion (right operand). The i-th difference is obtained as the logarithm of the quaternion product between the i-th quaternion and the conjugated right operand, i.e it is a rotation vector. - Added method
bfl::utils::mean_quaternion()that evaluates the weighted mean of a set of unitary quaternions. - utils.h is now a template header-only utility file.
- Add
Skipperinterface class to model skipping functionalities. - Add
Skippableinterface class to model a functionality that can be skipped on command. - Rename
Skippable::getSkipState()inSkippable::is_skipping().
Filtering functions
- Added pure public virtual method GaussianPrediction::getStateModel() (required to properly implement GPFPrediction::getStateModel()).
- Implemented method KFPrediction::getStateModel().
- Implemented method KFCorrection::getLikelihood().
- Implemented method UKFPrediction::getStateModel().
- Implemented method UKFCorrection::getLikelihood().
- Implemented method
SUKFCorrection::getLikelihood(). - Changed implementation of GaussianLikelihood::likelihood().
- Changed implementation of GPFPrediction::getStateModel().
- Changed implementation of GPFCorrection::getLikelihood().
- Changed implementation of GPFCorrection::evaluateProposal().
- Changed implementation of WhiteNoiseAcceleration.
- Fixed missing const(s) keywords in signature of method StateModel::getTransitionProbability().
- Fixed missing const(s) keywords in signature of method WhiteNoiseAcceleration::getTransitionProbability().
- SUKFCorrection::getNoiseCovarianceMatrix() is now virtual.
- Method MeasurementModel::freeze() takes an input argument of type Data.
PFCorrection::correct()now does not perform measurements freeze before callingPFCorrection::correctStep().GaussianCorrection::correct()now does not perform measurements freeze before callingGaussianCorrection::correctStep().GPFPrediction::predictStep()callspredict()instead ofpredictStep()on the underlyingGaussianPrediction.GPFPrediction::correctStep()callscorrect()instead ofcorrectStep()on the underlyingGaussianCorrection.GaussianPredictionis not a friend ofGPFPredictionanymore.GaussianCorrectionis not a friend ofGPFCorrectionanymore.- Removed decorator classes. Using decorator was an easy way of extending functionalities, but at the cost of writing erroneous behavior in the filters.
- Removed friendships from
*Predictionand*Correctionclasses. - Implemented
freeze_measurmentsfor*Correctionclasses. - Made
skip-related variable value in*Predictionclasses coherent with assigned values. - Removed setters from
*Predictionand derived classes. All the required data to create an object are passed to the constructor. - Removed setters from
*Correctionand derived classes. All the required data to create an object are passed to the constructor. - Add
StateProcessinterface class to describe state model functionalities. - Add
ExogenousProcessinterface class to describe exogenous model functionalities. - Add
GaussianMixturePredictioninterface class to describe Gaussian mixture-based prediction functionalities. - Move
ExogenousModelinsideStateModel. Consequently, the prediction classes only need to handle aStateModelthat in turns will handle theExogenousModelproperly, if present. - Add
Filterinterface class to describe Bayes filter functionalities. - Rename
FilteringAlgorithm::getFilteringStep()inFilteringAlgorithm::step_number(). - Rename
FilteringAlgorithm::isRunning()inFilteringAlgorithm::is_running(). - Rename
FilteringAlgorithm::filteringRecursion()inFilteringAlgorithm::filtering_recursion(). - Rename
FilteringAlgorithm::initialization()inFilteringAlgorithm::initialization_step(). - Rename
FilteringAlgorithm::filteringStep()inFilteringAlgorithm::filtering_step(). - Rename
FilteringAlgorithm::runCondition()inFilteringAlgorithm::run_condition(). - Method
PFCorrection::freeze_measurements()takes an input argument of typeData. - Method
GaussianCorrection::freeze_measurements()takes an input argument of typeDatasuch that it can be passed to the underlyingMeasurementModel::freeze(const bfl::Data&). LinearModelnow inherits fromLTIMeasurementModel.
Filtering algorithms
SIS::filteringStep()performs measurements freeze before performing the actual correction. The correction is skipped if the freeze fails. The user might want to re-implement this method (or provide their own algorithm) if they need to handle the measurements freeze differently.- Add method
GaussianFilter::prediction()returning reference to the underlyingGaussianPredictionprediction_(now private). - Add method
GaussianFilter::correction()returning reference to the underlyingGaussianCorrectioncorrection_(now private). - Add method
ParticleFilter::initialization()returning reference to the underlyingParticleSetInitializationinitialization_. - Add method
ParticleFilter::prediction()returning reference to the underlyingPFPredictionprediction_(now private). - Add method
ParticleFilter::correction()returning reference to the underlyingPFCorrection``correction_(now private). - Add method
ParticleFilter::resampling()returning reference to the underlyingResamplingresampling_.
Test
- Mean extraction is performed using EstimatesExtraction utilities in test_UPF.
- Add mean extraction and logging in test_SIS to simplify inspection of the algorithm outcome.
- Reduce number of particles in test_SIS to reduce testing computation time in Debug.
- Add testUPF_MAP testing MAP (maximum a posteriori) estimate extraction within a UPF particle filter.
- Add
test_Gaussian_Density_UVRtesting the methodutils::multivariate_gaussian_density_UVR(). - Change
test_Gaussianin order to test resizing, noise augmentation and support for quaternions. - Update
test_KF,test_UKF,test_mixed_KF_UKF,test_mixed_UKF_KF,test_mixed_KF_SUKFto account for the removed measurements freeze withinGaussianCorrection::correct(). - Add
test_QuaternionUtilstesting quaterion utilities in theutilsnamespace
BayesFilters 0.8.0 (2018-12-18)
Dependencies
- Removed OpenCV dependency.
CMake
- Devel branch will now have +100 on the patch number to differentiate from master branch.
- Fourth number of the project version has been removed to be compliant with SemVer system.
- Third number of SemVer increases since API compatibility is broken.
Data types
- Using only double data type within the whole library.
Filtering algorithms
- Added logging capabilities to FilteringAlgorithm.
- Removed SIS::setInitialization(), SIS::setPrediction(), SIS::setCorrection and SIS:setResampling methods. The associated unique_ptr classes are now mandatory arguments of ParticleFilter constructor.
- Constructor SIS::SIS takes the state size, both linear and circular, and the filtering step classes as arguments to initialize, respectively, the ParticleSet and the ParticleFilter classes.
- Method SIS::filteringStep uses VectorXi instead of VectorXf to represent particle parents.
- Method SIS::filteringStep uses particle weights in log space instead of linear space.
- Moved default logging facilities of class SIS from method SIS::filteringStep to overridden method Logger::log.
- Re-implemented class KalmanFilter, a general Gaussian filtering algorithm using a GaussianPrediction and a GaussianCorrection.
- Renamed class KalmanFilter to GaussianFilter.
- Added call to virtual method Logger::log in method GaussianFilter::filteringStep.
Filtering functions
- Renamed UpdateParticles in BootstrapCorrection.
- Removed VisualParticleFilter class.
- Removed PFVisualCorrection and derived classes.
- Added LikelihoodModel interface class.
- Added GaussianLikelihood class.
- Added class GaussianPrediction, a generic Gaussian prediction step.
- Added class GaussianCorrection, a generic Gaussian correction step.
- Added class KFPrediction, a (Gaussian) Kalman prediction step for LinearStateModel models.
- Added class KFCorrection, a (Gaussian) Kalman correction step for LinearMeasurementModel models.
- Added class UKFPrediction, a (Gaussian) unscented Kalman prediction step for StateModel and AdditiveStateModel models.
- Added class UKFCorrection, a (Gaussian) unscented Kalman correction step for MeasurementModel and AdditiveMeasurementModel models.
- Added class SUKFCorrection, a (Gaussian) unscented Kalman correction step for AdditiveMeasurementModel models.
- Added class GPFPrediction, a particle filter prediction step that propagates the Gaussian belief associated to particles.
- Added class GPFCorrection, a particle filter correction step that propagates the Gaussian belief associated to particles and weights them according to a Gaussian proposal distribution.
- PFCorrection::getLikelihood() method is now pure virtual.
- Used new ParticleSet class within classes PFPrediction, PFPredictionDecorator, PFCorrection, PFCorrectionDecorator, DrawParticles, BootstrapCorrection, Resampling, ResamplingWithPrior, ParticleSetInitialization, InitSurveillanceAreaGrid and SIS.
- Method ResamplingWithPrior::resample heavily changed (due to use of ParticleSet).
- Methods Resampling::resample and ResamplingWithPrior::resample use VectorXi instead of VectorXf to represent particle parents.
- Methods Resampling::resample and Resampling::neff uses particle weights in log space instead of linear space.
- Methods ResamplingWithPrior::resample uses particle weights in log space instead of linear space.
- PFCorrection now performs measurements freeze before calling PFCorrection::correctStep and does not call it if measurements freeze fails.
- BootstrapCorrection::correctStep now does not freeze measurements anymore.
- BootstrapCorrection::correctStep uses particle weights in log space instead of linear space.
- InitSurveillanceAreaGrid::initialize uses particle weights in log space instead of linear space.
State models
- Added SimulatedStateModel class to simulate kinematic or dynamic models using StateModel classes.
- Added non-pure virtual method StateModel::getTransitionProbability.
- Added non-pure virtual method StateModel::getJacobian.
- Added pure virtual method StateModel::getOutputSize
- Added pure virtual method ExogenousModel::getOutputSize
- Implemented method StateModelDecorator::getOutputSize
- Implemented AdditiveStateModel class inheriting from StateModel.
- Implemented LinearStateModel class inheriting from AdditiveStateModel.
- Implemented LTIStateModel class inheriting from LinearStateModel.
- WhiteNoiseAcceleration class now inherits from LinearStateModel.
- Implemented method WhiteNoiseAcceleration::getOutputSize
- Implemented method WhiteNoiseAcceleration::getTransitionProbability.
Measurement models
- Added SimulatedLinearSensor class.
- Added MeasurementModelDecorator class.
- Added logging capabilities to MeasurementModel.
- Removed method MeasurementModel::getNoiseSample.
- Added pure virtual method MeasurementModel::getOutputSize
- Method MeasurementModel::measure replaces method MeasurementModel::getAgentMeasurements and does not take the state as input.
- Method MeasurementModel::freezeMeasurements replaces method MeasurementModel::bufferAgentData const.
- Method BootstrapCorrection::correctStep uses MeasurementModel::freezeMeasurements.
- Added class AdditiveMeasurementModel.
- Added class LinearMeasurementModel.
- Added class LTIMeasurementModel.
- Renamed LinearSensor to LinearModel.
- LinearModel class now inherits from LinearMeasurementModel.
- LinearModel class now does not implement MeasurementModel::measure.
Filtering utilities
- Added Data class in order to have a type for encapsulating data coming from any process.
- Added GaussianMixture, Gaussian and ParticleSet classes.
- Added directional_add(), directional_sub() and directional_mean() functions in directional_statistics.h/cpp.
- Added sigma_point(), unscented_weights() and unscented_transform() functions in sigma_point.h/cpp.
- Added UTWeight struct to store unscented transform weights in sigma_point.h/cpp.
- Added alias FunctionEvaluation in sigma_point.h/cpp.
- Added method utils::log_sum_exp to evaluate the logarithm of a sum of exponentials.
Test
- Removed test_ParticleFilter.
- Added test_DirectionalStatisticsUtils for directional_statistics.h/cpp.
- Added test_SigmaPointUtils for sigma_point.h/cpp.
- Added test_Gaussian for Gaussian and GaussianMixture classes.
- Added test_KF testing Gaussian filtering with KFPrediction and KFCorrection.
- Added test_UKF testing Gaussian filtering with UKFPrediction and UKFCorrection.
- Added test_mixed_KF_UKF testing Gaussian filtering with KFPrediction and UKFCorrection.
- Added test_mixed_UKF_KF testing Gaussian filtering with UKFPrediction and KFCorrection.
- Added test_mixed_KF_SUKF testing Gaussian filtering with KFPrediction and SUKFCorrection.
- Added test_UPF testing particle filtering with UKFPrediction and UKFCorrection.
- Updated test_SIS.
- Updated test_SIS_Decorators.
BayesFilters 0.7.1.0 (2018-06-27)
Bugfix
- Fix WhiteNoiseAcceleration implementation.
BayesFilters 0.7.0.0 (2018-06-07)
Filtering classes
- Remove PFVisualCorrection::getVisualObservationModel() and PFVisualCorrection::setVisualObservationModel().
Bugfix
- Fix PF prediction and correction move constructor (minor fix).
CMake
- Threads is now a dependency of the exported library. This will solve a CMake error during configuration in CMake projects linking BayesFilters.
- BayesFilters is now fully relocatable.
BayesFilters 0.6.2.0 (2018-01-24)
Filtering classes
- Add ResamplingWithPrior class.
- Add HistoryBuffer and EstimatesExtraction classes.
Filtering features
- Add 'all' option to skip() method of particle filters. This option is particularly useful to reset the internal status of the filters.
Dependencies
- Removed Eigen::NullaryExpr() calls. Now the library can be compiled with any Eigen 3.3 version.
Bugfix
- Windows is now fully supported and tested.
Test
- Add Appveyor and Travis yml files. Tests still need to be improved.
CMake
- Update CMake modules.
BayesFilters 0.6.1.0 (2017-11-20)
CMake
- Update installation helper files, which are updated from YCM commit f162fcb.
BayesFilters 0.6.0.1 (2017-11-08)
Bugfixes
FilteringAlgorithm::filteringRecursion: fix the invocation position of initialization.
BayesFilters 0.6.0.0 (2017-11-06)
This is the first public release of the BayesFilters library.