|
1 | | -# QDVO: Quasi-Direct Visual-Inertial Odometry |
| 1 | +# [QDVO: Quasi-Direct Visual Odometry](https://youtu.be/pYeO0l5dH5Q) |
2 | 2 |
|
| 3 | +[](QDVO_presentation.pdf) |
3 | 4 |  |
| 5 | + |
| 6 | +QDVO is a real-time monocular visual odometry algorithm which combines the benefits of a indirect and direct methods. It does this by modelling point correspondences with a non-gaussian *correspondence distribution*. By doing this, QDVO is able to use both corner and edge landmarks which overcoming the sensistivity to illumination changes often seen with direct (photometric) methods. |
| 7 | + |
| 8 | +This work was presented at [Purdue's AAE Research Symposium Series in 2019](https://engineering.purdue.edu/AAE/academics/studentorgs/aaerss/past_presenters/index_html) and won "Best Undergraduate Presentation". You can find the slides for this presentation [here](https://github.com/k-sheridan/qdvo/blob/master/QDVO_presentation.pdf). |
| 9 | + |
| 10 | +## Demo Videos |
| 11 | +[](https://youtu.be/TU5lfFeBUuo) |
| 12 | +[](https://youtu.be/5oMmafv2QXk) |
| 13 | + |
| 14 | +# A Note on Correspondence Distributions |
| 15 | + |
| 16 | +The correspondence distributions are represented with gaussian mixture models. In QDVO, the similarity score used is ZNCC. To ensure convergence far from the optimial solution, QDVO filters low similarity pixels in the correspondence distribution. |
| 17 | +<img width="950" height="536" alt="correspondence_distribution" src="https://github.com/user-attachments/assets/0e6de5ba-1b13-4a2d-a1ca-65095fa17b96" /> |
| 18 | + |
| 19 | +## Quasi-Direct Residual |
| 20 | +To ensure we can efficiently minimimize the negative log likelihood, QDVO uses *Iteratively Reweighted Non-Linear Least Squares* optimization. By doing this, QDVO is able to practically bound the compute per residual by exploiting the exponential fall-off in the influence of far away gaussians in the GMM. |
| 21 | +<img width="953" height="637" alt="Quasi-Direct_Residual_1" src="https://github.com/user-attachments/assets/a101fa79-1840-41cd-9ff6-195f34577c2f" /> |
| 22 | +<img width="949" height="714" alt="Quasi-Direct_Residual_2" src="https://github.com/user-attachments/assets/b881e9eb-01a2-44d5-aefa-268b37ebac5d" /> |
| 23 | + |
| 24 | +# ArgMin: a semi-generic, fully templated optimizer designed for Sliding Window Estimators |
| 25 | + |
| 26 | +The CPP implementation of QDVO is based on a custom optimizer with the following capabilities: |
| 27 | +- Supports arbitrary manifold variables |
| 28 | + - Built in support for SE3, SO3, InverseDepth, and Scalar |
| 29 | +- Supports arbitrary error terms |
| 30 | +- Built in support for marginalization of error terms and variables into a gaussian prior |
| 31 | +- Based on a Sparse Schur Solver implementation to exploit sparsity in landmark variables. |
| 32 | +- Built on top of [SlotMap and Slot Array](docs/source/SlotMap.md) implementation for cache friendly access of sub-matrices |
| 33 | + |
| 34 | +## ArgMin: Examples |
| 35 | +The most complete example on how to use ArgMin is in this test: [TestArgMinExampleProblem.cpp](https://github.com/k-sheridan/qdvo/blob/master/test/TestArgMinExampleProblem.cpp) |
| 36 | + |
| 37 | +## ArgMin: Documentation |
| 38 | +The most complete documentation of ArgMin's SSEOptimizer can be found [here](docs/source/SSEOptimizer.md) |
| 39 | + |
0 commit comments