Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Potential AMCL Improvements (NDT, QMCL, etc) #1391

Open
SteveMacenski opened this issue Nov 25, 2019 · 11 comments
Open

Potential AMCL Improvements (NDT, QMCL, etc) #1391

SteveMacenski opened this issue Nov 25, 2019 · 11 comments

Comments

@SteveMacenski
Copy link
Member

SteveMacenski commented Nov 25, 2019

We should consider how to improve on AMCL by replacing, refactoring, or reconsidering algorithms given the state of the art. NDT is another method and a paper https://www.researchgate.net/publication/261352911_Normal_distributions_transform_Monte-Carlo_localization_NDT-MCL/link/587c8d6608ae4445c067dbb4/download uses NDT-MCL for localization to increase quality greatly resembling reflector-level localization errors (really good). There's also maybe (?) an MVP version here: https://github.com/OrebroUniversity/perception_oru/tree/port-kinetic


There's also an on-going discussion here (VorpalBlade/quickmcl#15) about potentially moving away from the software package that implements an MCL, AMCL, to another, QuickMCL (QMCL?).

Benefits are

  • More permissive licensing (probably)
  • Better structured software
  • Lower memory footprint
  • Scales linearly (vs o(n2)) with number of particle

Drawbacks

  • Quite a bit of work to migrate to ROS2
  • No beam skipping or beam model yet
  • No motion models yet
  • Not as rigorously tested in numerous environments

It seems like a good way to go if we can put in a little elbow grease. I'm not sure if folks' interests in getting away from AMCL are solely based on the AMCL-specific implementation or away from an MCL based localizer. I can see benefits (generic, works for most people) and drawbacks (generic, doesn't work great for anyone) of either direction. NDT is what the autonomous driving folks use, maybe a good option as another alternative algorithm.

This ticket is to bring up both QMCL as a potential alternative as well as get feedback if people think we should migrate entirely to a new default localization algorithm, and what that might be. Points to any suggestion that can be extended to 3D lidars as well as 2D (which MCLs and NDTs can be)


Adding additional restrictions on particle sampling. For instance, not allowing particles to be populated in collision states or not populating new particles that would require going through a wall.


https://discourse.ros.org/t/localization-architecture/8602/3

Take some queues from the autonomous driving crowd if we can find options computationally feasible for us

image

(using mulitiple sources like vision, laser, gnss looks interesting so we're not just using laser)

@SteveMacenski SteveMacenski added the nav2_wg Request discussion in the nav2 working group label Nov 26, 2019
@crdelsey
Copy link
Contributor

crdelsey commented Dec 9, 2019

Hmm. So, the option's are, port QuickMCL or fix AMCL, or leave AMCL alone and get a different type of algorithm going.

I don't see MPL-2 as a significant enough improvement over LGPLv2 to warrant the switch to QuickMCL. Making the switch involves a bunch of porting work and gains some performance benefits at the expense of features, so on technical reasons there's pros and cons.

For me, I think I'd rather spend the effort on making an new Apache license 3D capable localizer if one doesn't already exist.

@crdelsey crdelsey removed the nav2_wg Request discussion in the nav2 working group label Dec 13, 2019
@VorpalBlade
Copy link

I would be willing to consider Apache license. I do also believe that having a 2D localiser is still useful, since a lot of robots (especially student projects) can be quite computationally limited, running on for example a raspberry pi with a simple 2D laser. 2D MCL is quite a lot computationally cheaper than for example NDT-MCL (I'm not really familiar enough with other 3D localisation approaches to comment on those).

@SteveMacenski
Copy link
Member Author

SteveMacenski commented Feb 20, 2020

Well its also pretty trivial to extend AMCL to 3D if you have a 3D map to work with. its the same concept with raycasting except now its with voxels instead of pixels.

Anyhow, Apache would be great just to conform with the rest of the repo. With that said, things have changed on our end (most of the Intel people are no longer working on this project) and I will not have any time in the foreseeable future to work on this. However, I would like to see this and I would work with someone to port it to ROS2 and have it included, but I will not be able to do it myself in at least the 12 month horizon.

@SteveMacenski SteveMacenski changed the title Potential Migration to QMCL from AMCL Potential AMCL Improvements (NDT, QMCL, etc) Apr 29, 2020
@jmtc7
Copy link

jmtc7 commented Jul 6, 2020

The attached file exposes several potential alternatives and compares them based on the accuracy and cycle time they claim. A convenient way to go seems to implement vanilla NDT-MCL (Normal Distribution Transforms Monte-Carlo Localization), which could be improved in the future, giving particular attention to the performance in dynamic environments.

AMCL_Alternatives_for_ROS_2_s_Navigation_Stack.pdf

@SteveMacenski
Copy link
Member Author

Once we have a design to start implementing, append it to that doc and lets stick it in the /docs directory.

@SteveMacenski
Copy link
Member Author

(Consider also using openMP, TBB, or GPU to speed up various elements like particle filter updates or matching or what have you)

@abylikhsanov
Copy link

Hi, is someone actively working on this or done something already? As I am thinking to start from Vanilla AMCL as per suggestion and adding up the rest to come up with a robust commercial localization. The only thing is that I am planning to use ROS Noetic (not ROS2).

@SteveMacenski
Copy link
Member Author

SteveMacenski commented Jan 26, 2021

This is in the works currently, yes. But we have no plans to ever support ROS 1(in fact, I'd probably be unreasonably opposed to porting it back to ROS 1 as its a big draw for Nav2)

@abylikhsanov
Copy link

Can you share where can I find the current status? As before starting, it would be unreasonable to start everything from scratch if some work has been done already. Regarding the ROS1 port, this is okay, I can do that myself as in the environment where I am working everyone still use ROS1

@SteveMacenski
Copy link
Member Author

Its in the works, this is the specific work that's been done #1930 but unfortunately there's not a concise way to explain the status. I'm not sure there's a way to really collaborate in ROS 1.

@vishwaslip
Copy link

Hello, is there a particular reason the progress on this was halted? I have read through some of the papers, and DT-NDT-MCL seems very promising, though has there been second thoughts about the algorithm? Have there been discussions about better alternatives?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants