Explicit 3D Change Detection using Ray-Tracing in Spherical Coordinates

Change Detection

Abstract:

Change detection is important for autonomous perception systems that operate in dynamic environments. Mapping and tracking components commonly handle two ends of the dynamic spectrum: stationarity and rapid motion. This paper presents a fast algorithm for 3D change detection from LIDAR or equivalent optical range sensors, that can operate from arbitrary viewpoints and can detect fast and slow dynamics.
Distinct from prior work, the method explicitly detects changes in the world, and suppresses apparent changes in the data due to exploration at frontiers or behind occlusions. Comprehensive experimentation is performed to assess the performance in several application domains. Sample data and source code are provided.

Full pdf: Underwood-ICRA13-ChangeDetection.pdf

Code and Data

The source code, application and manually labelled test data have been made available to the public.

The source code is implemented as part of the publicly available Australian Centre for Field Robotics (ACFR) libraries "comma" and "snark". The code runs on windows and linux. All of the functionality is packaged into command-line apps that are designed for piping / streaming data. This means you don't have to write an application to process your own data, you can just stream it through our apps. There is a ton of additional functionality in these libraries, but here, only change detection is discussed.

The sim, lab and carpark datasets that were analysed in the publication are also available to download here. This has been provided in a simple csv format (x,y,z,scan-number,label). The label was produced by hand (using the label-points app provided in snark). 0 means no change, 1 means the item that was intentionally moved and 2 were cases of unintented or uncontrollable change, which are mostly due to glass windows. These permit lidar penetration at some angles, yet reflect it at others (closer to 90 degrees). Items marked 2 are excluded from the study. This data may be useful in future change detection studies.

A script is included to run the comma/snark applications on this data. The core applications in comma and snark are actively maintained, but the script should be considered as working usage examples, so you can see how to run the apps on any data. They are bash scripts, which will run on linux or cygwin on windows. To run on windows you will need to install cygwin, as suggested in the installation instructions for comma and snark.

How to proceed

  1. Download "comma" and "snark", build them from source and install. Note that a pre-built install package is available for windows. Follow the instructions at
    https://github.com/acfr/comma/wiki#wiki-downloads
    https://github.com/acfr/snark/wiki#wiki-downloads
  2. Download the zip file containing manually labelled data and the scripts.
    http://perception.acfr.usyd.edu.au/demos/change_detection/change-detection-package.zip
  3. In a linux or cygwin shell, navigate to the unzipped file location.
    There are three scripts, detect-change.sh, detect-change-cluster.sh and detect-change-streaming.sh detect-change.sh will run the core change detection algorithm without clustering, and will display the 'additions' and 'subtractions' including connecting lines showing the ray-traced violations. detect-change-cluster.sh will run change detection with clustering for noise suppression. It will display the detected clusters of change, coloured by unique id. detect-change-streaming.sh shows an example of using this to process streaming real-time velodyne data, detecting change as it occurs, using some logged velodyne data.

DETECT CHANGE

Type:

./detect-change.sh

You will see usage instructions and examples. Copy / paste any of the examples to run the algorithm on the data. For example, type:

./detect-change.sh carpark/carpark1.pose1.object1.label.csv carpark/carpark1.pose1.object2.label.csv '0,0,0,0,0,0' '0,0,0,0,0,0' 2 0.9 0.2

Once the processing has completed, you will see a visualisation of background and changed points from the carpark dataset.

DETECT CHANGE CLUSTER

Type:

./detect-change-cluster.sh

to see usage examples, copy paste to execute, e.g.:

./detect-change-cluster.sh lab/lab1.pose1.object1.label.csv lab/lab1.pose2.object2.label.csv '0,0,0,0,0,0' '-2.41866932,0.00524406582,-0.00921243963,0.00158849440,0.00102784568,-0.00593259714' 2 0.8 0.1 40 0.1"

Feel free to experiment with different parameters, and have a go with your own data.
If you don't get it working on your own data first go, it's probably relating to differences between your choice of coordinate frame / transforms and mine. You can break the pipelines up and run one step at a time, using 'view-points' or 'head' to explore the results. Also feel free to explore the rest of comma and snark - the libraries include much more functionality than described here.

DETECT CHANGE STREAMING

An additional dynamic velodyne log has been provided (not used in the paper), including a script to run it, to show an example of the realtime capabilities of the algorithm. I left the velodyne logging from a stationary position while I walk over, push an office chair about, leaving it in various stationary positions (though static, the chair represents a change from the first reference frame). There are a couple of other people moving about the lab who are detected when not occluded. This type of pipeline was used, among others, for the demos seen in the videos here: The Centre for Inteligent Mobile Systems