Index of /~andrea/pub/research/2008-icra-calibration

Icon  Name                    Last modified      Size  Description
[DIR] Parent Directory - [   ] logs.zip 09-Sep-2007 12:18 75M [DIR] logs/ 15-Sep-2007 19:24 - [   ] matlab.zip 09-Sep-2007 12:19 11K [DIR] matlab/ 15-Sep-2007 19:24 -
Calibration logs and source code

Calibration logs and source code

These are the log files and the code used for the paper:

A. Censi, L. Marchionni, G. Oriolo “Simultaneous maximum-likelihood calibration of robot and sensor parameters”

The paper is available at http://purl.org/censi/2007/calib

Table of contents:

Log description

We kept all logs we generated; however, some of them are unusable because of bugs or other accidents (dieing batteries, etc.).

In general:

Configuration 1 Configuration 2

Please note that:

For each experiment, there are two logs produced: one for the laser data, and one for the odometry data.

For example, for the experiment “k42”, there are the two files:

k42l.log.bz2
k42r.data.bz2

They are both compressed with bzip2. In the scripts, a string like “k42” is called the prefix.

Running the experiments (the easy way)

We have saved all the processed logs in Matlab format, so you do not have to install any other software.

By loading the file icra08_final.mat:

>>  load icra08_final.mat

you can see the logs and the results after preprocessing and do not need to install any other software.

In icra08_final.mat, there is a variable cal holding all the logs. This does the calibration using log k45:

>> res = full_calibration(cal.logs{45})

To merge two logs together:

>> big_one = merge_experiments({cal.logs{44}, cal.logs{45}});
>> res = full_calibration(big_one)

For the iterative trimming, use:

>> calib_iterative(cal.logs{44})

Running the experiments (for though guys)

Installing the software

Prerequisites:

Quick way to process a log

To process a log, use these commands:

$  cd logs
$  ./prepare_one_log_compact.sh k42

this runs scan matching, and creates two files:

k22r.m           # odometry log in Matlab format
k22l_sm_stats.m  # scan-matching results in Matlab format

Load these files in Matlab using the command:

>>  log22 = calib_load_log('k22')

Run the calibration algorithm using:

>>  full_calibration(log22) 

The following does the iterative trimming:

>>  calib_iterative(log22) 

and shows the outliers.

Running the experiments (details)

This is a complete description of what goes one when running the prepare_one_log_compact.sh log.

Odometry

  1. Decompression of the logs

    $ bunzip2 k22r.bz2
  2. The script prepare_robot_log.rb translates the .dat to the JSON format.

    $ ./prepare_robot_log.rb < k03r.dat > k03r.json 
  3. Translate the JSON in Matlab, using the json2matlab.rb Ruby script contained in CSM.

    $ ../../csm/scripts/json2matlab.rb k03r.json

    This creates the file k03r.m.

  4. Load k03r.m into Matlab.

    odo03 = k03r;

    This is a cell array (one cell per interval).

Laser

We use the sm2 program in CSM. The program has two outputs: the scan-matched log (-out) and the statistics about the matching (-out_stats).

$ sm2 -in k03l.log -out k03l_sm.log -out_stats k03l_sm_stats.json 

Convert the JSON in Matlab:

$ ~/csm/csm/scripts/json2matlab.rb k03l_sm_stats.json

Read all of this in Matlab:

$ laser03 = k03l_sm_stats;

Merging odometry and laser

Use the function

log03 = merge_logs(laser03, odo03);

Run the method using:

res = full_calibration(log03);

or, for the iterative version, use:

res = calib_iterative(log03)

Format for the laser log (.log)

The laser scans are in Carmen format.

FLASER n_rays readings ... 0 0 0  0 0 0  timestamp_sec "hokuyo" timestamp_usec 

Format for the odometry log (.dat)

Each row is in this format:

x y theta   left_ticks  left_sec left_usec right_ticks  right_sec right_usec