Graph SLAM from a programmer’s perspective

c9e4023c cosmetics · by Dominik Schlegel
Name Last Update
configurations Loading commit data...
src Loading commit data...
.gitignore Loading commit data...
CMakeLists.txt Loading commit data...
LICENSE Loading commit data... Loading commit data...
contributors.txt Loading commit data...
package.xml Loading commit data...
pull_srrg_packages.bash Loading commit data...
Dominik Schlegel, Mirco Colosi, Giorgio Grisetti

As this is a working repository, none of the code is assumed to be static. For related publications please refer to revision 69671dfe

Demo videos

ProSLAM: Full run KITTI Sequence 00 updated (real-time, 1 thread@2.40GHz/i7-4700MQ)

ProSLAM: Full run KITTI Sequence 00 (real-time, 1 thread@2.40GHz/i7-4700MQ)

ProSLAM: Full run KITTI Sequence 01 (real-time, 1 thread@2.40GHz/i7-4700MQ)

ProSLAM: Full run KITTI Sequence 06 (real-time, 1 thread@3.50GHz/i7-4770K)

ProSLAM: Full run KITTI Sequence 10 (real-time, 1 thread@2.40GHz/i7-4700MQ)

ProSLAM: Full run EuRoC MH_01_easy (real-time, 1 thread@3.50GHz/i7-4770K)

(All of the above are clickable YouTube links)

Supported environments

Currently Linux only:

  • Ubuntu 14.04 LTS + ROS Indigo /(OpenCV2 + Qt4)
  • Ubuntu 16.04 LTS + ROS Kinetic/(OpenCV3 + Qt5)

The complete system runs on a single thread (visualization components are synchronous)

Code statistics | Revision 69671dfe

cloc srrg_proslam/src/ v 1.60
Language files blank lines comment lines code lines
C++ 18 737 646 2874
C/C++ Header 18 414 303 1086
CMake 8 8 1 75
SUM: 44 1159 950 4035

How do I get set up?

1) install the Ubuntu packages

sudo apt-get install build-essential libeigen3-dev libsuitesparse-dev freeglut3-dev libqglviewer-dev

2) download and install

or (OpenCV + Qt)

3) download and install the colorful Catkin Command Line Tools: (alternatively one can also use ROS catkin):

sudo apt-get install python-catkin-tools

4) set the environment variable $G2O_ROOT to use your own g2o installation - or clone g2o for catkin ( to your catkin workspace:

sudo apt-get install ninja-build
git clone

and build it (slow as it will perform a download using unladen swallows):

catkin build g2o_catkin

5) download this repository to your catkin workspace:

git clone

enter the project directory in your catkin workspace (e.g. ../src/srrg_proslam) and fetch the modular SRRG libraries by executing the script:


then build the project using:

catkin build srrg_proslam

CMake variables that must be set when building without ROS or to select specific libraries:

-D OpenCV_DIR=/your/path/to/the/opencv/build/folder
-D G2O_ROOT=/your/path/to/the/g2o/root/folder

How do I check if it works?

1) download the KITTI Sequence 00 into a folder on your computer: (2.8GB)

2) launch a terminal in that folder and uncompress the tarball:

tar -xzvf 00.tar.gz

The folder should now contain 4 files (.txt) and 1 folder (.txt.d) plus the tarball 00.tar.gz

3) run the system directly in the folder (rosrun is used for convenience only, the binary can also be launched normally with ./srrg_proslam_app):

rosrun srrg_proslam srrg_proslam_app 00.txt -use-gui -show-top

Three windows will pop up - "input: images", "output: map (bird view)" and "output: map (top view)"

4) press [Backspace] on the input window to toggle between automatic processing and stepwise (press [Space] for stepping) mode

5) press [H] to view the available commands for the output windows (Number keys 1-8)

6) press [Esc] to terminate the system prematurely` (in an input or output window)

7) to see the raw system performance simply launch srrg_proslam without any parameters other than the input dataset:

rosrun srrg_proslam srrg_proslam_app 00.txt

After a complete run we can evaluate the KITTI error statistics by calling:

rosrun srrg_proslam kitti_evaluate_odometry trajectory.txt 00_gt.txt 00.txt

Pre-formatted datasets

Run procedure remains identical to the one above (only the dataset name has to be adjusted, e.g. 00.txt becomes MH_01_easy.txt)
The EuRoC datasets generally require image histogram equalization for best performance (option -equalize-histogram/-eh)

Custom stereo camera sensor input / ROS node

On-the-fly raw stereo image processing with custom stereo camera parameters will be supported shortly.
Please use the provided datasets in SRRG format.

The ROS node (srrg_proslam_node) is currently under development.

Configuration file (YAML)

ProSLAM supports classic YAML configuration files, enabling fine-grained adjustment of deep system parameters.
Example configuration files can be found in the configurations folder.
Upon launch the system scans the working directory for a default configuration file (configuration.yaml) and loads it (if none is present, internal default values apply).
A custom configuration file can be specified as follows:

rosrun srrg_proslam srrg_proslam_app 00.txt -c my_configuration.yaml

It doesn't work?

Feel free to contact the maintainer at any time (see package.xml)