localization is great,It works very well within standalone since version 0.10.01. As my understand, the workflow work as below.
1.loaded pre-build map.
2.enter localization mode
3.refresh coordinate in path node where kinect belong to
if any incorrect, Pls update me.
Currently I have three map, I want kinect capture compare with map one by one. when kinect capture match with map, It stop comparing.
May I integrate this function to our program without rtabmap GUI?
Which functions should I call and which class should I implement?
any help appreciated.
Localization mode can be triggered anytime (can be before or after loading a pre-built map, or after mapping in the same session). Note sure about your 3, but when a loop closure is found with a location in any of maps contained in the loaded database, the kinect is aligned to this location. In mapping mode, the both maps would be merged together. In localization mode, the kinect is now in the same referential than the map. It may drift over time if no other loop closures are detected.
Do you have three maps in separated databases? or in the same? But yes, the comparison is done in the core, so you don't need rtabmap GUI. If in your program you don't use threading, you can call Rtabmap::getLoopClosureId() after Rtabmap::process() to know if a match occurred (when returned id > 0). If you are using RtabmapThread, the event RtabmapEvent is posted after processing data and if there is a loop closure, it is saved in the Statistics::kLoopAccepted_hypothesis_id() key of the Statistics object contained in the event.