I do not understand the meaning of this parameter. What does it mean the option VisIcp? Can I perform visual registration while using lidar odometry and vice-versa? Is VisIcp an additional form of registration that leverages both icp and visual information?
Also, can I use visual registration (Reg/Strategy = 0) while using icp odometry?
About your last statement I would like to better understand the entire process a KeyFrame undergoes. Suppose we have our first KeyFrame with timestamp=0. This will make the STM to create our first node. The same KeyFrame goes into the icp_odometry node. Then a second KeyFrame with timestamp=1 arrives and its ignored by the STM because not enough time has been elapsed (<1/detetctionRate) . However, this second KeyFrame goes into the icp_odometry node where we do icp registration and we obtain a pose update. After 1/detectionRate a second node is created. Now we have to add a link between the first two nodes. How do we do this? Do we look in the tf tree for the transform from /map to /base_link and we give this position to the second node? Or we take the respective sensor data of the two nodes and we do registration calculating a transform? In this second case, it makes sense to have any registration available because we could do icp odometry and then a visual registration between the images associated with the nodes to obtain the transformation to be given to the link.
rtabmap works independently of the odometry aprpoach used, thus the key frames used by rtabmap won't be the same as the ones used in odometry (if visual or lidar odometry is used).
rtabmap adds key frame temporally based on the detection rate (Rtabmap/DetectionRate). When adding a new node to STM, it uses TF to get the displacement from the previous node. It is possible to do another registration at that time when RGBD/NeighborLinkRefining is true. We generally enable it when using noisy wheel odometry and 2d lidar (with Reg/Strategy=1). When using icp_odometry, the transform would be already accurate (even better) between two successive nodes, so not very useful to enable it (as it uses some processing time).
Thank you very much for the clear and helpful answer.
In the case of having RGBD/NeighborLinkRefining activated, is Rtabmap using the TF as a guess to do visual or icp registration? What happens in the case of VisIcp registration? Does it use the TF as a guess for a visual registration and then the visual registration as a guess for icp?
Moreover, when RGBD/NeighborLinkRefining is activated and the registration (visual or icp) fails does rtabmap take the transform from the TF as it is and simply goes on with the process?
Yes for all your questions :P When refining fails, transform from TF is used directly. This can happen if we try to refine with vision and there are not enough features in field of the view of the camera. Similar case can happen with lidar, if there are no walls in the range of the lidar. In those cases, wheel odometry will be taken directly.