Open
Conversation
…when no loop closures are added
… ReduceGraph/DetectMoreLoopClosures: Make sure original parameters are saved back on closing. g2o: fixing optimizer to Levenberg for SBA to avoid [SetJac] infinite jac fatal error.
…of neighbor links based on Mem/STMSize parameter. Reduce graph: added direction parameter.
…t don't reduce if a NM link is longer than maxDistance.
…changed back to original params
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Usage:
While the offline approach uses the same code than the online graph reduction
Mem/ReduceGraph(as explained in this paper), it keeps all neighbor merged links instead of ignoring them like in the online version. When reducing nodes arbitrarily in the graph, with some configurations of links, it can split the graph if we don't propagate all neighbor merged links, that is not an issue with the online approach.--radiusparameter limits the length of loop closures that can be reduced. Note also to avoid super long neighbor merged links (propagated from reduced nodes to other reduced nodes), we don't merge a loop closure if any of the merged neighbor link on that node is longer than the radius.--keep_latestto do so.--pre_cleanupcan be used to remove all loop closure links linking nodes closer thanMem/STMSizenodes. This has been added for convenience for database with whichrtabmap-detectMoreLoopClosureshave been done without the change below.Other changes:
rtabmap-detectMoreLoopClosures: Now by default it won't add loop closures anymore on close nodes in terms of graph distance, i.e., underMem/STMSizenode distance of each other. That simulates online loop closures that are not done with nodes inside the STM. This also helps to not overwhelm odometry constraints with [normally] less accurate loop closures. Improve detect more loop closures tool to avoid overpowering odometry contribution in local graph optimization #1671. Note that to reproduce the old behavior, dortabmap-detectMoreLoopClosures --Mem/STMSize 1g2o/Optimizerparameter is now ignored for SBA, it will affect graph optimization only. We found that using gauss newton optimizer with SBA makes g2o easily abort with[SetJac] infinite jacfatal error. For SBA, levenberg optimizer is now hard-coded, so it makes it possible to use gauss newton for graph optimization while using SBA for other stuff at the same time without crashing.Tasks:
Mem/STMSizeminimum distance behavior could also be added to "Detect more loop closures" actions in main UI and the database viewer.