A SLAM system that only uses the ground beneath the robot. For more details about how it works, see the paper "Monocular Simultaneous Localization and Mapping using Ground Textures"
Distribution Statement A - Approved for public release; distribution is unlimited, as submitted under NAVAIR Public Release Authorization 2022-0586.
The preprint of this paper can be found at: https://arxiv.org/abs/2303.05946
The published version is at: TBD
This code is part of a paper to appear in IEEE's International Conference on Robotics and Automation (ICRA) in London, UK in May 2023. Please use the following citation information if you use this work:
@inproceedings{Monocular_SLAM_Hart,
address = {London, UK},
author={Kyle M. Hart and Brendan Englot and Ryan P. O'Shea and John D. Kelly and David Martinez},
title = {Monocular Simultaneous Localization and Mapping using Ground Textures},
booktitle = {Proceedings of the IEEE International Conference on Robotics and Automation},
month = {May},
year = {2023}
}
This system is targeted towards the following OS distributions and dependency versions. Others are likely possible as well, but these are the ones that have automated unit tests.
Ubuntu
- 20.04
- 22.04
GTSAM
- 4.0.3
- 4.1.0
- 4.1.1
OpenCV
- 4.X where X is not 4 (4.4.X is likely to work, but because of an issue with Eigen and some Tensor library, my automated tests can't test it)
There are two ways to use this library: from a Docker image or build from source manually.
There is a Docker file that you can build that will provide everything. From the project workspace, just run:
docker build --build-arg GTSAM_VERSION=4.1.1 --build-arg OPENCV_VERSION=4.2.0 --build-arg OS=ubuntu:20.04 --target deploy --tag ground_texture_slam:deploy -f .\.devcontainer\Dockerfile .
Again, you can customize the arguments if you wish, but this is untested. This library installs the C++ and Python libraries in the relevant directories so they are available system wide.
If you want to build this library manually, make sure GTSAM and OpenCV are both installed. They can
be installed from source or via apt-get
. Then, from the root of this project, run:
cmake -S . -B build
cmake --build build
cmake --build build --target install
The last command installs both libraries so they are available system wide. You will need sudo rights for this last command.
For an example use, see the files src/simple_example.cpp
and src/simple_example.py
. These
illustrate basic usage. Note that the estimated poses will not necessarily be correct, as there are
a lot of random values generated. They are only to illustrate the API.
Real data can be obtained from https://github.com/JanFabianSchmid/HD_Ground. This is the same data used in the paper. Once loaded from file, it can be passed in to the SLAM system and results compared to ground truth. Note that the poses in the original data source are in image coordinates and must be converted to real world coordinates.
Full documentation can be generated by running this command from the project root:
doxygen Doxyfile
Then, open docs/html/index.html
in the browser to view the documentation.