cartographer-project / cartographer

Cartographer is a system that provides real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations.
Apache License 2.0
7.03k stars 2.24k forks source link

Questions regarding hits, misses, lookup tables, value conversion tables #1872

Open jo-jstrm opened 2 years ago

jo-jstrm commented 2 years ago

First of all, thank you very much for providing such a great piece of software!

Background

As part of a research project, I am extending the 2d probability grid and submap with additional information. Therefore, I must change, among others, the ProbabilityGridRangeDataInserter2d and the ProbabilityGrid. So far I have mapped the whole scan matching and data insertion into the grid as sequence diagrams. Currently, I get the new data as far as the ProbabilityGridRangeDataInserter, where I now want to adapt Insert()and everything related. I would say I have a good overview over the inner workings of cartographer. Thanks to my diagrams, I see where the members in question (see below) are used, but I do not quite understand the meaning of some of them.

Questions

What I do not understand is:

1.) What is the conceptual purpose of the ValueConversionTables in Submap2d and the ProbabilityGrid? I see in the code comment that they map from int to float, but I do not understand the layout of ValueConversionTables.bounds_to_lookup_table_ and its purpose.

2.) Could you shed some light on the higher-level meaning of those conversion tables? Why do we need such a mapping from int to float? I think I will not need the conversion tables for storing new and different data, but still want to understand their meaning.

Related to that, I am not completely sure what the purpose of the hittable and misstable combined with ApplyLookupTable() in the ProbabilityGridRangeDataInserter is. As I currently understand it, the lookup tables store odds for points (hits and misses) and can be accessed with the same indexes as the correspondence_cost_cells of the Grid2d. The correspondence cost cells are combined with hit and miss tables by calling ApplyLookupTable().

3.) Is this simply the probability update that is described in the paper (section IV. B)? 3.1) If not, what exactly do the the correspondence_cost_cells store?