Ekumen-OS/beluga

Add option to remove the adaptiveness to the core filter pipeline

Opened this issue · 3 comments

Feature description

Some map representations don't allow (at least not in a straightforward, practical way) sampling randomly from the map.
This is the case, just to name one, of sparse voxel grids, where there're no notion of free space, only occupied space.

Given this difficulty, the adaptive part of the AMCL pipeline has limited effect, because of not being able to generate random states from the map.

For these cases, an option where adaptiveness is turned off could be of use, and remove the need of forcefully provide a random state generator.

RandomStateGenerator random_state_generator,

Definition of done

Add the feature described above, and make sure this is the option we use for all the nodes where randomly sampling from the map doens't make sense.

As of today, ndt and ndt_3d variants.

Coming back to this, is adaptiveness the problem or is it the use of random state samples to fight sample impoverishment? Good ol' AMCL does both, but it need not, does it? @nahueespinosa

It does not need to do both. But also, I don't like that we are providing a core amcl class in the main library. I think we should work on a way to easily define it from the pieces so we don't have to make assumptions or maintain multiple variants of similar things.

The particle filter pipeline is a step towards that, but it does not handle state well, that's why we need a class definition that holds all the pieces. There should be a better way of doing this.

I think we can discuss if a class is the best incarnation of a complete particle filtering algorithm with state, also if the core library is the best place for complete particle filtering algorithms, but I do think the project should provide them. Not all filtering algorithms are as simple and easy to understand and implement as (bootstrap) AMCL is. Most are not.