The core of the code and the enterance point for familirazaing yourself with a code is the interface Tracker and its' only (for now) implementation MonocularTracker. MonocularTracker fetches the data from the sensor and pass it to 5 main stages of a direct odometry:
- Pose estimation
- Feature selection
- Depth estimation
- Backend optimization
All four stages have identical behaviour to the original DSO implementation.
On the pose estimation stage we align a new frame to the built point cloud.The interface responsible for pose estimation (PoseAlignment) has 2 implemenations: CeresPhotometricBundleAdjustment and EigenPoseAlignment. Those implementations have identical behaviour. CeresPhotometricBundleAdjustment is implemented using the ceres library and mostly used in test to prove validiy of a custom pose aligner(EigenPoseAligment).
The interface responsible for feature selection is TrackingFeaturesExtractor and also has two implentation Sobel and Eigen. The second is identical to the original DSO feature selector.
The class DepthEstimation is responsible for gradualy refine the depth of the immature point. LandmarksActivator selects point to be activated from the immature points pool.
Same to pose estimation backend optimization has 2 implementations based on Ceres and Eigen.