Implementation of the Adaptive Monte Carlo Localization (AMCL) algorithm.
More...
#include <amcl_core.hpp>
template<class MotionModel, class SensorModel, class RandomStateGenerator, typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
class beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >
Implementation of the Adaptive Monte Carlo Localization (AMCL) algorithm.
- Template Parameters
-
MotionModel | Class representing a motion model. Must satisfy Beluga named requirements: MotionModel. |
SensorModel | Class representing a sensor model. Must satisfy Beluga named requirements: SensorModel. |
RandomStateGenerator | A callable able to produce random states, optionally based on the current particles state. Class 'T' is a valid RandomStateGenerator if given 't' a possibly const instance of 'T' any of the following conditions are true:
- t can be called without arguments returning an instance of 'SensorModel::state_type' representing a random state.
- t can be called with ‘const beluga::TupleVector<ParticleType>&> returning a callable that can be called without arguments and return an instance of 'SensorModel::state_type’.
|
WeightT | Type to represent a weight of a particle. |
ParticleType | Full particle type, containing state, weight and possibly other information . |
ExecutionPolicy | Execution policy for particles processing. |
Definition at line 80 of file amcl_core.hpp.
◆ estimation_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ map_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
using beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::map_type = typename SensorModel::map_type |
|
private |
◆ measurement_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
using beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::measurement_type = typename SensorModel::measurement_type |
|
private |
◆ particle_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
using beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::particle_type = ParticleType |
|
private |
◆ random_state_generator_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ spatial_hasher_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ state_type
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
using beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::state_type = typename SensorModel::state_type |
|
private |
◆ Amcl()
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::Amcl |
( |
MotionModel |
motion_model, |
|
|
SensorModel |
sensor_model, |
|
|
RandomStateGenerator |
random_state_generator, |
|
|
spatial_hasher_type |
spatial_hasher, |
|
|
const AmclParams & |
params = AmclParams{} , |
|
|
ExecutionPolicy |
execution_policy = std::execution::seq |
|
) |
| |
|
inline |
Construct a AMCL instance.
- Parameters
-
motion_model | Motion model instance. |
sensor_model | Sensor model Instance. |
random_state_generator | A callable able to produce random states, optionally based on the current particles state. |
spatial_hasher | A spatial hasher instance capable of computing a hash out of a particle state. |
params | Parameters for AMCL implementation. |
execution_policy | Policy to use when processing particles. |
Definition at line 105 of file amcl_core.hpp.
◆ force_update()
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
void beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::force_update |
( |
| ) |
|
|
inline |
Force a manual update of the particles on the next iteration of the filter.
Definition at line 204 of file amcl_core.hpp.
◆ get_random_state_generator()
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
decltype(auto) beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::get_random_state_generator |
( |
| ) |
const |
|
inlineprivate |
Gets a callable that will produce a random state.
Definition at line 208 of file amcl_core.hpp.
◆ initialize() [1/2]
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
template<class Distribution >
void beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::initialize |
( |
Distribution |
distribution | ) |
|
|
inline |
Initialize particles using a custom distribution.
Definition at line 131 of file amcl_core.hpp.
◆ initialize() [2/2]
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
template<class CovarianceT >
void beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::initialize |
( |
state_type |
pose, |
|
|
CovarianceT |
covariance |
|
) |
| |
|
inline |
Initialize particles with a given pose and covariance.
- Template Parameters
-
CovarianceT | type representing a covariance, compliant with state_type. |
- Exceptions
-
std::runtime_error | If the provided covariance is invalid. |
Definition at line 145 of file amcl_core.hpp.
◆ particles()
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
const auto& beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::particles |
( |
| ) |
const |
|
inline |
Returns a reference to the current set of particles.
Definition at line 127 of file amcl_core.hpp.
◆ update()
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
Update particles based on motion and sensor information.
This method performs a particle filter update step using motion and sensor data. It evaluates whether an update is necessary based on the configured update policy and the force_update flag. If an update is required, or if it was forced via force_update()
, the motion model and sensor model updates are applied to the particles, and the particle weights are adjusted accordingly. Also, according to the configured resampling policy, the particles are resampled to maintain diversity and prevent degeneracy.
- Parameters
-
control_action | Control action. |
measurement | Measurement data. |
- Returns
- An optional pair containing the estimated pose and covariance after the update, or std::nullopt if no update was performed.
Definition at line 165 of file amcl_core.hpp.
◆ update_map()
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
void beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::update_map |
( |
map_type |
map | ) |
|
|
inline |
Update the map used for localization.
Definition at line 150 of file amcl_core.hpp.
◆ control_action_window_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ execution_policy_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
ExecutionPolicy beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::execution_policy_ |
|
private |
◆ force_update_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
bool beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::force_update_ {true} |
|
private |
◆ motion_model_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
MotionModel beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::motion_model_ |
|
private |
◆ params_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
AmclParams beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::params_ |
|
private |
◆ particles_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ random_probability_estimator_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ random_state_generator_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ resample_policy_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ sensor_model_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
SensorModel beluga::Amcl< MotionModel, SensorModel, RandomStateGenerator, WeightT, ParticleType, ExecutionPolicy >::sensor_model_ |
|
private |
◆ spatial_hasher_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
◆ update_policy_
template<class MotionModel , class SensorModel , class RandomStateGenerator , typename WeightT = beluga::Weight, class ParticleType = std::tuple<typename SensorModel::state_type, WeightT>, class ExecutionPolicy = std::execution::sequenced_policy>
The documentation for this class was generated from the following file: