loop-closures with memory management

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

loop-closures with memory management

akunin
Hi,
As far as i understood WM/LTM works ~FIFO+cache when old nodes removed to LTM and new nodes/most visited are kept in WM.
Lets assume WM is only 10 nodes, we have a long aisle at warehouse and returning for the first time to same node #1 from a different direction/node# 17. In case node #1 already moved to LTM ..there is no chance to have a loop-closure with it since it and its neighbors are in LTM.
Is there any mechanism to retrieve all nodes from LTM to WM in the region near the current location to get loop-closure?

LTM.png
Reply | Threaded
Open this post in threaded view
|

Re: loop-closures with memory management

matlabbe
Administrator
It is true, unless the first node "has been seen a longer time" than the others, which in this case a loop closure could be found with node #17 (and then neighbors of 1 brought back from LTM to WM). One should set Mem/RehearsalSimilarity appropriately to avoid pure FIFO effect.

There is no mechanism to bring back nodes based on proximity because we cannot estimate the distance of the current node to any nodes in LTM without a global optimized graph.
Reply | Threaded
Open this post in threaded view
|

Re: loop-closures with memory management

akunin
it may explain worse accuracy when we using memory-management.
2 following questions:
1. is it same in localization mode where you have fully optimized map and theoretically could load close nodes to WM based on proximity vs current pose?
2. though pose is not very accuracy before graph optimization still we could define a mechanism loading all nodes withing certain radios (e.g. +-10m) that for sure could load all relevant nodes around current position. am i miss anything?  
Reply | Threaded
Open this post in threaded view
|

Re: loop-closures with memory management

matlabbe
Administrator

1. If you have the full optimized graph in WM, it means all the nodes are already in WM. We have an option called "Mem/InitWMWithAllNodes" to load all nodes in WM independently if memory management is enabled or not. In general, processing time is significantly lower on localization mode, so depending of the map, all nodes can then be used in localization mode while they could not in mapping mode.

2. the error could be larger than 10 meters relatively fast (see some examples in this video https://www.youtube.com/watch?v=XrnyhaxPCro). We could however estimate a radius based on the accumulated odometry covariance (e.g, similar to EKF SLAM odometry error propagation).  One problem is that with memory management, we couldn't correct the accumulated error on loop closures if we don't have all nodes from the beginning of that session (so that resulting pose-graph optimization residual makes sense). The error would then grow out of bound, eventually including the whole map. This would also not work for multi-session mapping, as the original odometry frame will be different between the sessions.