in the RTAB-Map Settings we can set various Visual Word options (type, max number, max depth), but we also have the Odometry panel where we can set the similar parameters for features.
What happens if, for example, Odometry and Visual Word uses the same features and I set Odometry max depth to a different value than Visual Word max depth? Which settings have the priority?
From what I understood, Visual Words are used only for the building the vocabulary in Loop Closure Detection, while Odometry Features are used for computing the sensor pose and aligning point clouds. If they use the same detector/descriptor (GFTT+BRIEF, in my case), are they computed twice or the two modules get them from the same processing and then filter them out?
Sorry for my english, I hope I explained this thing properly... thanks! :)
The "Visual word" and "Odometry" panels are independent. The max depth in "Visual word" is used only for the vocabulary and the max depth in "Odometry" is used only for odometry. There is also a max depth used when re-extracting features on loop closure (loop closure constraint panel). The specific feature parameters (SURF, SIFT, GFTT, ORB, FAST, BRIEF...) are shared across all algorithms. If you are on ROS, they can be set differently as they are not in the same node.
The odometry is independent of the loop closure detection, so yes, the features are extracted in both even if they are the same type. The SensorData class contains setFeatures(...) method that could be used to fill extracted features from odometry before passing the data to rtabmap for loop closure detection. Then when creating a node from the SensorData coming from odometry, if there are already features in it, features are not re-extracted for loop closure detection. If you want to do that, the Odometry class should be modified so that features extracted are copied in SensorData.
I do not know if it's possible because these processes live in different modules, but for further optimization maybe it would be useful to have a flag in Preferences (independent from Re-extract Features in Loop Closure Detection) to set an unique detector/descriptor combination for both Visual Word and Odometry (like in your small space tutorial setup with GFTT+BRIEF) in order to perform an unique pass of features extraction and filter them with two different settings (max number and depth). I think the performance in this case would greatly benefit (almost double speed).