This package provides a re-implementation (Version 2) of the robust incremental Smoothing and Mapping (riSAM) algorithm (see risam/) as presented in our ICRA 2023 paper [1]. If you use this package please cite our paper:
@inproceedings{mcgann_risam_2023,
title = {Robust Incremental Smoothing and Mapping ({riSAM})},
author = {D. McGann and J.G. Rogers III and M. Kaess},
fullauthor = {Daniel McGann and John G. Rogers III and Michael Kaess},
year = 2023,
booktitle = {Proc. IEEE Intl. Conf. on Robotics and Automation (ICRA)},
address = {London, {GB}}
pages = {4157-4163},
}
This paper can be accessed via arXiv or on IEEE Xplore.
Our original implementation of riSAM was left wanting from a software engineering perspective.
It implements riSAM by defining a class that inherits from iSAM2. To implement the algorithm in this way it required copying and modifying large chunks of the iSAM2 code from gtsam. This made the code complex and difficult to read, obfuscated the changes required to implement riSAM, and restricted the version of GTSAM that could be used with the original implementation. Additionally, it was released alongside the code and scripts that enable running the experiments from the ICRA 2023 paper. This made the original code difficult for developers to incorporate into their own project.
This reimplementation strives to solve the problems above. We transition from a inheritance structure to a encapsulation design to simplify the code, and make it much easier to see the behavior of riSAM. This also permitted us to clean up the code, add documentation, and generally improve it for developers. Additionally, it should not be compatible with a wider variety of gtsam versions. Finally, we migrated the implementation away from the utility code for experiments to make it easy for developers to incorporate into their own projects! (See usage below)
riSAM is able to handle large amounts of outlier measurements (tested up to 90% outliers)
More over riSAM is able to handle outlier measurements even with poor initialization. A situation in which prior works struggle.
risam: Contains the implementation of the riSAM algorithm.RISAM*- Contains the top level interface and implementation of riSAM.ExtendedISAM2*- A Lightweight class that provides some extended functionality for iSAM2.GraduatedKernel*- Provides an interface and implementation for a Graduated Robust Kernel like the Scale Invariant Graduated (SIG) Kernel presented in [1].GraduatedFactor*- Provides implementation for a generic wrapper for gtsam factors to make the "graduated". RISAM considers any graduated factor as a potential outlier.DoglegLineSearch*- Implements the Dogleg Line Search algorithm presented in [1].Utilities*- Provides implementation of helper functions.
The code itself is documented inline using doxygen style. See RISAM.h for primary information on the algorithms interface and usage.
This library is intended to be used as a library within your own Odometry or SLAM pipeline. We recommend incorporating riSAM into your project using FetchContent. This can be done by adding the following to your project's CMakeLists.txt:
include(FetchContent)
FetchContent_Declare(
risam
GIT_REPOSITORY git@github.com:rpl-cmu/risam-v2.git
GIT_TAG main
)
FetchContent_MakeAvailable(risam)
After which you can reference like any other library.


