The Frozen Time Smoother source code

Version history:

Table of contents:


This is the source code that accompanies the paper

Andrea Censi, Gian Diego TipaldiLazy localization using the Frozen-Time Smoother”, in ICRA’08.

The source code is distributed under the Creative Commons License (Attribution-NonCommercial-ShareAlike). In addition to the code by Andrea Censi and Gian Diego Tipaldi, the MCL localizer is based on code from GMapping copyrighted by Giorgio Grisetti, Cyrill Stachniss, and Wolfram Burgard (under the same license).


Compiling FTS


Optional pre-requisites:

Note that all of these can be easily installed using your Linux distribution package manager.

For Mac, you can use fink.

CSM and pkg-config

This software links to CSM using the pkg-config system. If you installed it correctly, you should be able to write:

$ pkg-config --libs csm

and obtain a list of CSM’s libraries.

If you installed CSM in a place different than /usr/local, then you will see a message like:

Package csm was not found in the pkg-config search path.
Perhaps you should add the directory containing `csm.pc'
to the PKG_CONFIG_PATH environment variable

Do what the message says. For example, I gave /Users/andrea/svn/cds/csm/deploy/ as the installation directory for CSM, so I add to set PKG_CONFIG_PATH as follows:

export PKG_CONFIG_PATH=/Users/andrea/svn/cds/csm/deploy/lib/pkgconfig/

FTS compilation

Then, issue the commands:

$ cd src/fts
$ cmake .
$ make

Compiling MCL


Installation: just run the configure script.

$ cd src/mcl
$ ./configure
$ touch # add your switches here
$ make

If some library is not found, you might have to edit the file

Overview of the source code

For the FTS, the source code is contained in the fts/ directory. Note, however, that it uses the CSM library for the basic stuff (laser_data structure definition, JSON input/output, etc.).

For the fts_loc application, the relevant files are:

Note that in these files there are a lot of optimization methods we used to improve efficiency; they can be activated by command line options. We did NOT use these in the paper’s experiments, as FTS was fast enough as a naive implementation.

Other files:

Other applications:

How to run the experiments

In the following, dataset is one of aces, intel. You can use other logs, of course. You got to have the files:

${dataset}.log.bz2        (original log)
${dataset}.gfs.log.bz2    (used as a map)
${dataset}.sm.log.bz2     (used as incremental guess)

These are bz2-compressed files in either Carmen or JSON format. First off, prepare the logs, dividing them into chunks, using:

./ ${dataset}

These will run the FTS and MCL experiments:

$ nice -n 10 ./ ${dataset}
$ nice -n 10 ./ ${dataset}

Creating experiment statistics

To create the statistics in Matlab/Octave-readable format:

$ ./ ${dataset} ${algo}

this will create .m files.

From Matlab, load these files using:

exp = stats_read(dataset, algorithm);

for example:

exp = stats_read('aces', 'fts1');

Creating pictures and animations

To create figures, try:

$ nice -n 10 ./ ${dataset} ${algo}

To create the HTML pages, use:

$ ./create_slideshow.rb ${dataset} ${algo}

Details for the experiments

In the following, dataset = {aces, intel}, method = {fts1, mcl1, mcl2}, XXX = three-digit number.

Input files:

Intermediate files:

Output files:

Other files: