ARM-VO is an efficient monocular visual odometry library for on-road vehicles. It recovers scale using a known, fixed camera height and visible road. NEON intrinsics and multithreading accelerate keypoint detection and tracking.
| Sequence 05 | Sequence 07 | Sequence 10 |
|---|---|---|
![]() |
![]() |
![]() |
- Results are deterministic
- Scale estimation is more accurate
- Camera pitch angle is no longer required (providing camera height is enough)
- RGB and BGR inputs are supported
- Distorted images are supported
- Keypoint tracking is faster by re-using KLT pyramids
- Motion estimation is more robust in dynamic environments
- The API and the implementation are much cleaner
- Added Python bindings
- Enabled x86 to simplify development
- Added CI
- Removed ROS node examples (will be added in a near future)
ARM-VO requires C++17, CMake 3.20+, OpenCV 4.5.0+, and either ncnn or TensorRT 8.6.x (TensorRT is preferred if available). Note that you don't need to install all of the mentioned dependencies. ARM-VO will first check your system to find most of them. If not found, it'll start to fetch and build them (needs network obviously).So, all you need to do is to install build dependencies:
sudo apt install build-essential git cmake pkg-config libprotobuf-dev protobuf-compilerThen build and install ARM-VO:
git clone https://github.com/zanazakaryaie/ARM-VO.git
cd ARM-VO
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
sudo make install
sudo ldconfig
cd ..| Option | Default | Purpose | Extra dependencies |
|---|---|---|---|
INFERENCE_BACKEND |
AUTO |
Explicit selection for inference backend; You can set it to NCNN or TENSORRT or AUTO (prefers TensorRT over Ncnn when available) |
TENSORRT requires an installed TensorRT 8.6.x with trtexec and the CUDA toolkit |
BUILD_TOOLS |
ON |
Visualization, evaluation, and model conversion utilities | None |
BUILD_CLI |
ON |
Command-line tools; requires BUILD_TOOLS=ON |
None |
BUILD_PYTHON_BINDINGS |
OFF |
Python API | python3 -m pip install pybind11 numpy |
BUILD_TESTS |
OFF |
Unit tests | Catch2 v2.13.10: automatically detected if available, otherwise fetched and built by CMake. |
Keep the build directory after installation: it contains the uninstall script and separate manifests for ARM-VO and dependencies installed by this build. From the build directory, uninstall ARM-VO:
sudo make uninstall
sudo ldconfigTo also remove dependencies that ARM-VO built and installed:
sudo make uninstall-with-dependencies
sudo ldconfigDownload the color odometry images. From the ARM-VO repository root, run with the matching configuration:
./build/cli/run_armvo --image_folder=/path/to/sequences/00/image_2 --config=cli/KITTI_configs/rectified/Seq00-02.yamlTo evaluate accuracy, download the ground-truth poses and add --gt_poses=path/to/poses/00.txt to the above command.
Check the C++ example or Python example to see how to use ARM-VO in your project.
- The camera height and road requirements make ARM-VO unsuitable for drones, handheld cameras, or off-road vehicles.
- Large rotations without translation can lose tracking.
- ARM-VO leverages a low-resolution (320x640) BisenetV2 segmentation model to 1) estimate scale, and 2) perform better in dynamic scenes. You can increase or decrease the resolution to trade-off between accuracy and FPS. Check here to read more and go through the required steps.
- If you get low FPS on single-board computers (e.g. Raspberry Pi), check your power adapter.
.
├── 3rd-party/ Dependency setup for OpenCV, ncnn, and Catch2
├── cli/ Command-line tools for running ARM-VO
├── cmake/ CMake scripts
├── docs/ Documentation and README assets
├── examples/ C++ and Python usage examples
├── lib/ Core ARM-VO implementation and Python bindings
├── model/ BiseNetv2 model
├── tools/ Utilities for visualization, evaluation, etc.
└── CMakeLists.txt Main CMake build file
If you build ARM-VO with -DBUILD_TESTS=ON, you can run tests from the repo root by:
ctest --test-dir build --output-on-failureARM-VO is MIT licensed. For academic use, please cite:
@article{nejad2019arm,
title={ARM-VO: an efficient monocular visual odometry for ground vehicles on ARM CPUs},
author={Nejad, Zana Zakaryaie and Ahmadabadian, Ali Hosseininaveh},
journal={Machine Vision and Applications},
volume={30},
number={6},
pages={1061--1070},
year={2019},
publisher={Springer}
}- Increase test coverage
- Add ROS examples
- Add redundancy for scale estimation (e.g. object priors)
- Support Bazel


