Ekumen-OS / beluga

A general implementation of Monte Carlo Localization (MCL) algorithms written in C++17, and a ROS package that can be used in ROS 1 and ROS 2.
https://ekumen-os.github.io/beluga/
Apache License 2.0
209 stars 17 forks source link

NDT-MCL #93

Open nahueespinosa opened 1 year ago

nahueespinosa commented 1 year ago

Description

This method proposes to relax the hard discretization assumption imposed by grid-based models in common MCL implementations by using a piecewise continuous normal distribution representation (NDT) of the map and measurements to achieve higher accuracy and repeatability. The NDT map is based on a regular grid containing estimated normal distribution parameters of the mapped environment.

Dual-Timescale NDT-MCL extends this idea to localize in highly dynamic environments and solve the SLAM problem.

See:

Definition of done

TBD

hidmic commented 1 year ago

Both https://doi.org/10.1109/ICRA.2013.6630878 and http://dx.doi.org/10.1177/0278364913499415 on how to build NDT based occupancy maps are worth a look too. Implementing the measurement model is straightforward once we have a way to build, update, and query such maps efficiently. Being able to draw an NDT map from a plain occupancy grid (ie. the typical 2D map / floor plan representation) would also be quite useful.

cslibs_ndt offers 2D and 3D NDT map implementations under a commercial friendly license. It doesn't seem to solve the occupancy grid-to-NDT map conversion though.

nahueespinosa commented 1 year ago

FYI @voldivh

hidmic commented 8 months ago

FYI @serraramiro1

serraramiro1 commented 3 months ago

Should we close this? This has been addressed with #422 . OFC there're different variants that we could try and/or optimizations we could implement, but seems like they're out of this ticket's scope.

WDYT @hidmic @nahueespinosa

hidmic commented 3 months ago

We have some work ahead still, to polish, benchmark, and demo NDT-MCL in full. This ticket is old though, and I'm having second thoughts about the value of meta-tickets in this project.

How about making it a discussion, and keep the useful context?