Hi,
The problem is that the working memory (WM) is very small. For this map size, nodes should be easily be all in WM (even on a RPI3). The real problem is that just for processing one frame, you already reached the time threshold of 700 ms, thus locations just seen are already transferred to long-term memory. You can disable memory management to see the difference (Rtabmap/TimeThr=0
). Looking at the timing statistics saved in the database (using rtabmap-databaseViewer -> Statistics view -> TimingMem):
A lot of time is used to create the local occupancy grids (green line). Signature creation
curve includes all others. What is your computer? Here is on my computer (also in ms):
You are feeding 720p stereo images to create the grid. When input is stereo, disparity image should computed (at 720p) to create the grids. If you are using a ZED, I would recommend to use the depth image already created by the ZED wrapper to save time on disparity computation. Another way is to use smaller images as input to rtabmap node. Another approach is to decimate the stereo images prior to compute the disparity image, using Mem/ImagePostDecimation=2
for example (you would need to set Grid/DepthDecimation=2
if you do so).
To save time on feature extraction (red line of first figure), you can set Mem/ImagePreDecimation=2
.
For the 2d pose estimate button of RVIZ, you should remap its publishing topic to /rtabmap/initialpose
(well, assuming rtabmap node is started in rtabmap namespace), and this only works in localization mode (Mem/IncrementalMemory=false
).
cheers,
Mathieu
Ok after reading more papers on Rtabmap, I have figured out that some of by bag-of-words went to the Long term memory as I have set the parameter for the TimeThr = 700. Still, I cannot understand why I cannot localise the robot myself with a button and how to use the long term saved memory for the nav