- [2026-04-03]: Our paper has been submitted to arXiv.
- [2026-08-05]: The initial draft code of this project has been released. Further code refactoring and cleanup will follow. If you are interested, please star ⭐ this repo to stay tuned!
This project was developed and tested in the following environment:
- CPU: AMD Ryzen 7940HX
- GPU: NVIDIA RTX 4060 Laptop (8GB VRAM)
- OS: Ubuntu 20.04
⚠️ Note: To ensure the proper execution of the feed-forward networks and dense mapping, we highly recommend a device with at least 8GB of VRAM.
We recommend using Anaconda for environment management.
-
Create Base Environment:
conda create -n hyvggt python=3.10.12 conda activate hyvggt
-
Install PyTorch: We recommend
PyTorch 2.3.1+cu121as the base environment (please adjust according to your specific environment). -
Clone the Repository: Since our project includes a custom VGGT submodule (which is not compatible with the official repository), please make sure to clone recursively:
git clone --recursive https://github.com/Geneta2580/HyVGGT-VO.git cd HyVGGT-VO -
Install Dependencies & Custom VGGT:
pip install -r requirements.txt # Install the custom VGGT library pip install -e .
-
Download Weights: You need to download the VGGT weight files manually [VGGT model] and place them in the
submodules/vggt/directory. -
GTSAM Configuration: We use a customized version of the GTSAM library, which includes specific features for our framework and is not interchangeable with the official GTSAM repository.
- Clone our custom GTSAM vio_inv_depth branch from: [Custom Branch]
- The compilation process is identical to the official GTSAM guidelines. Please refer to: [GTSAM Guidelines]
You can download the public datasets used for our evaluation from their official websites:
- EuRoC MAV Dataset: Can be obtained from the ASL Datasets webpage.
- KITTI Odometry Dataset: Can be obtained from the CVLIBS webpage.
Dataset Evaluation Command:
python3 main.py --config config/euroc/config_dataset_xxx.yaml > TEST.txt- The execution logs will be redirected and saved to
TEST.txt. - Parameters & Visualization: You can toggle the visualization features and configure system parameters by modifying the corresponding
.yamlfile. - Data Loading: Dataset reading is implemented via
dataloader.py. Simply configure your dataset file path within theyamlfile.
- Trajectory Evaluation: The system outputs trajectory files in
TUMformat (.txt), which can be directly evaluated against the ground truth usingevo. The main trajectory outputs include:trajectory_odometry.txt: The pose of every image frame output by the front-end.trajectory_optimized.txt: The optimized poses of the keyframes.trajectory_vggt_optimized.txt: The poses after incorporating local PGO (Pose Graph Optimization).
Note: When evaluating on the KITTI dataset, the ground truth trajectory requires a UTC timestamp conversion before evaluation.
- Logs & Time Cost: Essential running logs, including the computational time consumption (
time_cost) and the trajectory of the VGGT inference subgraph, are automatically saved in the project's/output/log/directory. - Point Cloud: Point cloud saving outputs can be configured in the
yamlfile, including the filtering conditions for output and downsampling parameters for visualization.
- Our current visualization interface primarily supports Open3D / OpenCV.
⚠️ Performance Warning: Enabling visualization will decrease the overall running speed of the system.- ROS 1 Support: The ROS 1 version runs more efficiently and supports visualization via RViz. Please note that this version is currently under testing (beta). A stable release will be published in the future.
Our framework supports custom datasets. To run your own data, please follow these guidelines:
- Required Information: You must provide the camera calibration parameters (intrinsics and distortion coefficients) and accurate timestamps for the camera images.
- Code Modification: Modify
dataloader.pyto ensure compatibility with your custom data format. - ROS 1 Beta: You can try our ROS 1 test version, which already supports custom camera dataset reading and receiving image data directly from camera ROS nodes.
- Best Practices: For optimal computational efficiency, we recommend keeping the camera resolution under 640x480 and the framerate above 20 FPS.
During the development of this code, we heavily referenced the outstanding implementations of the following open-source projects:
We sincerely thank the authors for their great work!
If you find our work helpful for your research, please consider citing our paper:
@article{hyvggt_vo_2026,
title={HyVGGT-VO: Tightly Coupled Hybrid Dense Visual Odometry with Feed-Forward Models},
author={Junxiang Pang and Lipu Zhou and Baojie Chen},
journal={arXiv}
year={2026},
}
