{"id":14992252,"url":"https://github.com/mpizenberg/visual-odometry-rs","last_synced_at":"2025-03-16T09:32:24.269Z","repository":{"id":57671680,"uuid":"126795498","full_name":"mpizenberg/visual-odometry-rs","owner":"mpizenberg","description":"Visual Odometry in Rust (vors)","archived":false,"fork":false,"pushed_at":"2020-01-17T19:04:01.000Z","size":912,"stargazers_count":53,"open_issues_count":6,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-12T21:01:14.560Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://crates.io/crates/visual-odometry-rs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mpizenberg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-26T08:10:34.000Z","updated_at":"2024-06-25T14:24:42.000Z","dependencies_parsed_at":"2022-08-30T14:41:26.483Z","dependency_job_id":null,"html_url":"https://github.com/mpizenberg/visual-odometry-rs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpizenberg%2Fvisual-odometry-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpizenberg%2Fvisual-odometry-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpizenberg%2Fvisual-odometry-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpizenberg%2Fvisual-odometry-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mpizenberg","download_url":"https://codeload.github.com/mpizenberg/visual-odometry-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221661479,"owners_count":16859531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-24T15:00:53.613Z","updated_at":"2024-10-27T10:18:05.056Z","avatar_url":"https://github.com/mpizenberg.png","language":"Rust","funding_links":[],"categories":["Localization and Mapping"],"sub_categories":[],"readme":"# Visual Odometry in Rust (vors)\n\nThis repository provides both a library (\"crate\" as we say in Rust) named visual-odometry-rs,\n(shortened vors) and a binary program named `vors_track`,\nfor camera tracking (\"visual odometry\").\n\nThe program works on datasets following the [TUM RGB-D dataset format][tum-rgbd].\nIt is roughly a hundred lines of code (see `src/bin/vors_track.rs`),\nbuilt upon the visual-odometry-rs crate also provided here.\n\nOnce you have cloned this repository,\nyou can run the binary program `vors_track` with cargo directly as follows:\n\n```sh\ncargo run --release --bin vors_track -- fr1 /path/to/some/freiburg1/dataset/associations.txt\n```\n\nHave a look at [mpizenberg/rgbd-tracking-evaluation][rgbd-track-eval]\nfor more info about the dataset requirements to run the binary program `vors_track`.\n\nThe library is organized around four base namespaces:\n\n- `core::` Core modules for computing gradients, candidate points, camera tracking etc.\n- `dataset::` Helper modules for handling specific datasets.\n  Currently only provides a module for TUM RGB-D compatible datasets.\n- `math::` Basic math modules for functionalities not already provided by [nalgebra][nalgebra],\n  like Lie algebra for so3, se3, and an iterative optimizer trait.\n- `misc::` Helper modules for interoperability, visualization, and other things that did\n  not fit elsewhere yet.\n\n[tum-rgbd]: https://vision.in.tum.de/data/datasets/rgbd-dataset\n[rgbd-track-eval]: https://github.com/mpizenberg/rgbd-tracking-evaluation\n[nalgebra]: https://www.nalgebra.org/\n\n## Library Usage Examples\n\nSelf contained examples for usage of the API are available in the `examples/` directory.\nA readme is also present there for more detailed explanations on these examples.\n\n## Functionalities and Vision\n\nCurrently, vors provides a **visual odometry framework for working on direct RGB-D camera tracking**.\nSetting all this from the ground up took a lot of time and effort,\nbut I think it is mature enough to be shared as is now.\nBeware, however, that the API is evolving a lot.\nMy hope is that in the near future, we can improve the reach of this project\nby working both on research extensions, and platform availability.\n\nExample research extensions:\n\n- Using disparity search for depth initialization to be compatible with RGB (no depth) camera.\n- Adding a photometric term to the residual to account for automatic exposure variations.\n- Adding automatic photometric and/or geometric camera calibration.\n- Building a sliding window of keyframes optimization as in [DSO][dso] to reduce drift.\n- Intregrating loop closure and pose graph optimization for having a robust vSLAM system.\n- Fusion with IMU for improved tracking and reducing scale drift.\n- Modelization of rolling shutter (in most cameras) into the optimization problem.\n- Extension to stereo cameras.\n- Extension to omnidirectional cameras.\n\nExample platform extensions:\n\n- Making a C FFI to be able to run on systems with C drivers (kinect, realsense, ...).\n- Porting to the web with WebAssembly.\n- Porting to ARM for running in embedded systems and phones.\n\n## Background Story\n\nInitially, this repository served as a personal experimental sandbox for computer vision in Rust.\nSee for example my original questions on the rust [discourse][discourse] and [reddit channel][reddit].\nTurns out I struggled a bit at first but then really liked the Rust way, compared to C++.\n\nAs the name suggests, the focus is now on [visual odometry][vo],\nspecifically on the recent research field of direct visual odometry.\nA reasonable introduction is available in those [lecture slides][vo-slides]\nby Waterloo Autonomous Vehicles lab.\n\nIn particular, this project initially aimed at improving on the work of [DSO][dso]\nby J. Engel et. al. but with all the advantages of using the [Rust programming language][rust],\nincluding:\n\n- Performance without sacrificing code readability\n- No memory error, and much higher code safety and reliability\n- Friendly tooling ecosystem, no dependency issues, basically one-liner compilation and run\n- Best tooling for porting to the web with WebAssembly\n- Growing and mindful resources for porting to embedded systems\n- Wonderful community\n\n[discourse]: https://users.rust-lang.org/t/computer-vision-in-rust/16198\n[reddit]: https://www.reddit.com/r/rust/comments/84s5zo/computer_vision_in_rust/\n[vo]: https://en.wikipedia.org/wiki/Visual_odometry\n[vo-slides]: http://wavelab.uwaterloo.ca/slam/2017-SLAM/Lecture14-Direct_visual_inertial_odometry_and_SLAM/slides.pdf\n[dso]: https://github.com/JakobEngel/dso\n[rust]: https://www.rust-lang.org/\n\n## License (MPL-2.0)\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n## Contributions\n\nAll forms of contribution are welcomed, **preferably first as github issues**.\n\n- Questions\n- Documentation\n- Tests\n- Benchmarks\n- Features\n\nIn case of contribution to source code,\nit needs to use [rustfmt][rustfmt] and [clippy][clippy].\nTo run clippy:\n\n```\ntouch src/lib.rs; cargo clippy --release --all-targets --all-features\n```\n\n[rustfmt]: https://github.com/rust-lang/rustfmt\n[clippy]: https://github.com/rust-lang/rust-clippy\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpizenberg%2Fvisual-odometry-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmpizenberg%2Fvisual-odometry-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpizenberg%2Fvisual-odometry-rs/lists"}