3D Sensor Fusion (EPointCloudMerger)

NOTE: You need a license for Easy3DMatch to use the sensor merging tools.

3D sensor fusion

The 3D sensor fusion is a technique to merge the output of different 3D sensors together. In this case, these are different views of the same object.

Use the class EPointCloudMerger:

1. Choose how many sensors to use and position them.
2. Acquire scans of the calibration cube (that must be 3D printed).
3. Use the method Calibrate to perform the calibration.
4. For each new object:
a. Acquire the scans of the object.
b. Use the method Merge to merge the scans together.

You can perform all these steps interactively in the C++ and C# Easy3DMatchPointCloudMerger samples.

Several sensors acquiring different views of the calibration object

    

Scans of the calibration cube (displayed as ZMaps)

    

Scans of the object (displayed as ZMaps)

    

Merged calibration scans

    

Merged cloud scans

3D CAD model

The calibration cube model is available in the STL file format.
Download this file from the Open eVision download area in the Additional Resources section (www.euresys.com/Support).

Download the calibration object model

Once downloaded, we recommend using a specialized subcontractor to print the 3D calibration cube as 3D filament printing is not really suitable to produce the cube.

For reference, we worked with a company using Selective Laser Sintering and printing a 10×10×10 cm cube using PA12 material costed 220 €.

The calibration cube

Removing duplicate points

A physical point seen by two sensors should not be present two times in the output cloud.

By default, these points are removed. As this takes most of the processing time, you can disable the process if speed is an issue.
Set the cloud resolution with the parameter SetMergedCloudResolution to control this process. The parameter value is computed automatically but you can increase it to reduce the size of the output cloud and speed-up the processing.

Code samples

/////////////////////////////////////////////////////////// 
// This code snippet shows how to perform sensor fusion. // 
/////////////////////////////////////////////////////////// 

// Calibration
Easy3D::EPointCloudMerger merger;
std::vector<EPointCloud> calibrationClouds;  // TODO: load or grab
float calibrationObjectSize = 100.f;  // size of an edge of the cube in the calibrationClouds
float calibrationScore = merger.Calibrate(calibrationClouds, calibrationObjectSize, true);

// Merging
std::vector<EPointCloud> clouds;  // TODO: load or grab, must be in same order as CalibrationClouds
EPointCloud mergedCloud;

merger.Merge(clouds, mergedCloud);
///////////////////////////////////////////////////////////
// This code snippet shows how to perform sensor fusion. //
///////////////////////////////////////////////////////////


// Calibration
EPointCloudMerger merger = new EPointCloudMerger();
EPointCloud[] calibrationClouds = new EPointCloud[4];  // TODO: load or grab
float calibrationObjectSize = 100.0f;  // size of an edge of the cube in the calibrationClouds
float calibrationScore = merger.Calibrate(calibrationClouds, calibrationObjectSize, true);

// Merging
EPointCloud[] clouds = new EPointCloud[4];  // TODO: load or grab, must be in same order as calibrationClouds
EPointCloud mergedCloud = new EPointCloud();

merger.Merge(clouds, mergedCloud);

Computation Time

The following table shows the computation time on 4 clouds of around 200,000 points each.

Nb of threads

Calibration (ms)

Merging @ res (ms)

Merging @ 4 x res (ms)

Merging
w/o decimation

1

3386

73

44

15

2

2298

64

46

9

4

1752

52

47

9

Where Res is the resolution computed by the Calibrate method when its argument computeMergedCloudResolution is set to true.