-
Notifications
You must be signed in to change notification settings - Fork 31
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
Suboptimal result for range-only SLAM #864
Comments
Hi @tipf, thanks for posting. We were all out over the weekend, apologies for slow reply. We'll work through this to see what's going on and post back here. |
Hi Tim, think we are seeing some of the same problems in nonparametric solve. We also noticed the parametric solve slowed down significantly with recent upstream changes. TL;DR, we've decided to resolve two bigger specific issues (below). Would you mind if we use some of your code and comments above to build into unit testing for the various libraries as we fix this issue? Okay so the road we're going to follow to fix this issue (told backwards): the main blocker at the moment is a consolidated code update being worked on at Manifolds.jl: There has been a lot of discussion there, and we're close to clearing the many questions. Basically the effort on those threads are to make sure Caesar.jl and Manifolds.jl are 100% aligned on the math before we work the main fixes. I think the course is mostly set with Manifolds.jl, the action right now is sorting out the precise API/syntax on the new trait based Manifolds.jl: Our plan then is to follow up with Caesar.jl fixes fairly quickly (few weeks of work). One known issue specifically seems to be the cause of sub-optimum results you are seeing too. This might also have some links work Leo was doing. There have been several smaller fixes since, but we're confident this is the main issue to fix in the short term: We're actually going to do a code-quality / future-roadmap fix first which will allow fully Julian consolidation between parametric and nonparametric solutions: Apologies for the delay in closing out this issue, but think this will result in the overall best solution vs. effort. Once |
Thanks for the detailed response Dehann and sorry for my late reply, I was out of the office for two weeks. Please feel free to use any part of the code to create the required tests. |
Ground truth would be great to have for testing please! Manifolds.jl v0.8.11 just landed, so think the API path is set. |
It contains only the ego poses but for a test this might be enough: W100_GT.txt
|
In the above case, initalization (and possibly solving) can be improved by tuning 2 solver parameters. fg = initfg()
fg.solverParams.inflateCycles = ... #default 3
fg.solverParams.inflation = ... #default 5.0 Sorry I can't be of more help currently, but we will defenetely look more into this example in the future as its quite a nice case. |
Thanks for the pointer to the inflation parameter Johannes, I will give it a try in combination with The result of the parametric solver looks promising, but 10 minutes is quite a lot. For comparison, ceres needs 45 milliseconds for the batch problem and about 350 milliseconds for an incremental solution. |
Hi guys,
I implemented a small toy example for range-only SLAM. It is based on a 2D Manhattan-world trajectory surrounded by a polygon of 9 ranging beacons.
The graph consists of relative poses (odometry) and range measurements. All landmark positions are treated as unknown.
Unfortunately, the solver fails to find the optimal solution. As you can see in the attached plots, some of the landmarks (1, 2, and 3) are not at their actual positions, and the trajectory is distorted.
At the beginning (Pose 10), the landmark's uncertainty is high, and the trajectory looks correct - but later, the uncertainty shrinks while the position of the landmarks is still wrong.
I used an incremental estimation scheme but got a similar result by estimating the whole trajectory at once.
Plots for incremental and batch solutions (after timestep 1/10/100) are attached.
Result_0001.pdf
Result_0010.pdf
ResultFinal_Incremental.pdf
ResultFinal_Batch.pdf
To check my data, I created another scenario where a prior is added to each landmark based on its true position. This case converges successfully. I attached these plots also.
Result_GT_0001.pdf
Result_GT_0010.pdf
ResultFinal_GT.pdf
Finally, I threw the data (without the landmark priors!) into a parametric solver (ceres) and was astonished that it converges to the correct solution. A comparison plot is attached.
Result_Parametric.pdf
Maybe I was too optimistic about the capabilities of a nonparametric solver, but is this behavior expected? Shouldn't it be able to solve such a toy example?
And are there any specific settings or methods that might improve the result?
I furthermore attached my source code as well as the dataset file. You can switch between incremental and batch estimation by changing the "IncrementalEstimation" parameter.
W100_Input.txt
The text was updated successfully, but these errors were encountered: