This is a repository for generating random single- and multi-robot graph SLAM experiments. The simulator makes the distinction between robot states and map features to enable separability in multi-robot SLAM system global cost functions, and logs the resulting graph to PyFactorGraph format. The simulator focuses on the underlying graphical structure of the RA-SLAM problem, and assumes measurement models are consistent with those presented in the paper:
@article{papalia2023certifiably,
title={Certifiably Correct Range-Aided SLAM},
author={Papalia, Alan and Fishberg, Andrew and O'Neill, Brendan W. and How, Jonathan P. and Rosen, David M. and Leonard, John J.},
journal={arXiv preprint arXiv:2302.11614},
year={2023}
}
The simulator supports the generation of i) random Manhattan worlds and ii) controlled experiments with parameterized robot navigation and map feature placement. Supported measurement types include:
- Pose priors in SE(2) and SE(3)
- Relative SE(2) and SE(3) measurements (pose-pose and pose-point) for robot odometry and loop closures
- Range measurements in 2D and 3D for pose-pose, pose-point, and point-point pairs
Run the example:
cd ~/manhattan-world-sim/examples
python3 example.py
PyFactorGraph:
git clone [email protected]:MarineRoboticsGroup/PyFactorGraph.git
cd PyFactorGraph
pip install .
liegroups:
git clone [email protected]:utiasSTARS/liegroups.git
cd liegroups
pip install .
If you want to contribute a new feature to this package please read this brief section.
Any necessary coding standards are enforced through pre-commit
. This will run a series of hooks
when attempting to commit code to this repo. Additionally, we run a pre-commit
hook to auto-generate the documentation of this library to make sure it is always up to date.
To set up pre-commit
cd ~/manhattan-world-sim
pip3 install pre-commit
pre-commit install
If you want to develop this package and test it from an external package you can also install via
cd ~/manhattan-world-sim
pip3 install -e .
The -e
flag will make sure that any changes you make here are automatically translated to the external library you are working in.