Skip to content
matlabbe edited this page Mar 14, 2017 · 12 revisions
  1. When opening a db file, I'm asked to select a download option. what do the different choices mean and how are they different?

    • "Local" means that only data from nodes in Working Memory (WM) are downloaded.
    • "Global" means that data from all nodes in WM and Long-Term Memory (LTM) are downloaded. For more information about WM and LTM, see this paper.
    • "Optimized" means that graph optimization is done, so you have the corrected map from loop closures.
    • "Not Optimized" refers to raw odometry graph (without loop closure corrections).
  2. Once a database is open, I noticed that pressing the number keys changes the colors of the cloud(s) in the 3D graph window (like at 2:18 in this video). what do these different coloring patterns signify?

    • 1: Random color
    • 2: Map color (useful to visualize multi-session maps, see Multi-session tutorial for an example)
    • 3: Color gradiant along x-axis
    • 4: Color gradiant along y-axis
    • 5: Color gradiant along z-axis
    • 6: RGB color (when available)
    • 7: Color gradiant for normals along x-axis (when available)
    • 8: Color gradiant for normals along y-axis (when available)
    • 9: Color gradiant for normals along z-axis (when available)
  3. When exporting 3D Clouds, What is the difference between exporting an 'Organized Point Cloud' and a 'Dense Point Cloud'.

    • An organized point cloud is organized like an image with width and height greater than 1 (e.g., 640x480). Some points may be also NaN. If not assembled, each individual clouds will keep this property, otherwise the assembled cloud will be converted to dense. That format can be used to create fast meshes (e.g., adjacent pixels are vertices of the same polygon) or for other point cloud filtering techniques using the organized property. See this PCL documentation for more information.

    • A dense point cloud contains only valid values (no NaNs) and the height is 1. It is a vector of unordered points.

  4. In the 'Detection' menu, what is the difference between mapping and localization modes? How does this affect the way the applications works?

    • Mapping Mode: The map is updated and new data are appended to map. This could be also called SLAM Mode. The memory and processing time will increase as more data are added to map, which could trigger the memory management of RTAB-Map to keep the processing online (see this paper).

    • Localization Mode: The map is not updated, only current position is corrected when localization happens with the map. That mode may be more useful for robots after a first map is created. If the environment is not changing too much, this has the advantage to fix the memory and limit processing time. This can be also used to localize a simple webcam/phone camera on a map with a depth sensor (see this post).

  5. In the 'Edit' Menu, what exactly do the 'Download All Clouds (Update cache)' and 'Download graph only' options do? When might I use these, and might I pick one over the other for some specific reason?

    • These actions are used to get data from the core module to be displayed in the GUI. The core module and the GUI module are two independent processes like rtabmap and rtabmapviz nodes on ROS respectively. To actually see something in the GUI, we need to download data from the core module. "Download All Clouds" action downloads the graph and node's data (e.g., RGB image, depth image, laser scans, occupancy grids) to be used for 3D rendering. "Download graph only" actions only download the graph. This option can be useful to compare "optimized" and "not optimized" maps after mapping (without re-downloading everything like the first option).
  6. Is it possible to perform certain actions against a RTAB-Map database file from the command line? Specifically, Is it possible to export 3D Cloud(s), RGB Images & bundle file(s)?

  7. What exactly is Sparse Bundle Adjustment (SBA)? Where would I learn more about how the different options work and whether/when I should use it when processing captures?

    • Sparse Bundle Adjustment is an optimization process using visual feature correspondences. It requires more computation time than graph optimization, but may give a better optimized map as more constraints are used. The textures would be better aligned. Unlike g2o for bundle adjustment, cvsba requires visual correspondences between all frames to work properly, as it doesn't use the graph constraints. Both options are available in post-processing. If the optimization result is worst, it can be reverted by doing again "Edit->Download graph only" (which use only graph optimization).
  8. I have a map created on a tango where the pose estimation seems to have drifted in a way that essentially ruined the scan. Is there a way to reprocess the map using a different odometry method to attempt a recovery of the drift?

    • There is no automatic approach to recover bad odometry, but manually there is a couple of options:
    1. Set high variance on the link(s) causing the problem (similar to this post but the inverse). Use Database Viewer tool (e.g., "Tools->Edit database...") to find those problematic neighbor links (using Constraints View), then do (sqlite3 app should be installed) $ sqlite3 map.db "update link set rot_variance=1, trans_variance=1 where from_id=1 and to_id=2;" to update variance of link 1->2. This will maximize the error in this area on graph optimization. Loop closures between locations before and after the drift should be found to actually propagate errors in those links. I added an issue to implement this option directly in Database Viewer tool.
    2. Re-do mapping in RTAB-Map Desktop (using the database as source): 1) stop mapping before where the drift started, 2) go in Preferences->Source under database options and set a starting position index after the drifting (you can click on the small magnifying glass to browse the database and get the index, not the ID), 3) make sure that parameter "Start new map only ..." under RTAB-Map Settings (Advanced) is not checked, 4) start mapping again. A new map will be created, hiding the first one. The second part of the database must have revisited locations of the first part (e.g., loop closures) to actually merge the two maps (e.g., to make the first part re-appear).

Unanswered Questions:

(ask question here and notify through an issue)