Main Menu

All times are in GMT -8 (DST) :: The time is now 3:12 am.

Login or Register
Create an account and register your LMI products to gain access to useful resources.

Register Account

Login

Sub Menu

Knowledge Base
Article Data
Article Ref
7873-WYHN-9197
Date Created
Tue, 31st May 2011
Date Modified
Wed, 16th Jul 2014

   Multiple sensors (Gocator firmware 3.x)

Question 

How do I work with 3 or more Gocators in a system of sensors?

Answer 

Sensor Model G1xxx, G2xxx
Firmware Version 3.x
SDK Version 3.x

Gocator has built-in support for extending a scanning system with one additional sensor. Extending a system is done by assigning a Buddy (second) sensor to a Main sensor. Several configurations are supported in these dual-sensor systems. However, in order to work with a larger system, with 3 or more sensors, you must instead create custom code with the help of the Gocator SDK.

The Go2 API offers programmatic access to all functions exposed in the GUI (except recording). This allows programmers to design software for any system configuration and to process the data with proprietary or third-party algorithms. 

A requirement for working with synchronized multiple sensors is to connect them all through a Master 400 (or higher). These masters distribute synchronization, encoder, and I/O to all sensors on the network. In terms of the software, there are some peculiarities when working with multiple sensors that are highlighted below.

First of all, a System object has to be created for each sensor in the system, and connections have to be established individually. The code should look something like this:

// When working with multiple sensors, a Go2System has to be created for each individual sensor.
for (i = 0; i < APP_SENSOR_COUNT; i++)
{
    GO2_CHECK(Go2System_Construct(&obj->systemSensor[i]));
    GO2_CHECK(Go2System_Connect(obj->systemSensor[i], addresses[i].address, GO2_USER_ADMIN, ""));
}

In order to ensure that all sensors start at the exact same time, use the Go2System_ScheduledStart() call. This function takes an argument that is a future time at which to start all sensors. One way to determine this future time is to first get the current time from one of the sensors and then add a delay. This delay is there to deal with the overhead for internal sensor initialization. The code should look something like this:  

// When starting a multi-sensor system, it's a required step to get the current system time from one sensor and then
// schedule a synchronized future start for all sensors
GO2_CHECK(Go2System_GetTime(obj->systemSensor[0], &currentTime));
startTime = currentTime + APP_START_DELAY;
for (i = 0; i < APP_SENSOR_COUNT; i++)
{
    GO2_CHECK(Go2System_ScheduledStart(obj->systemSensor[i], startTime, GO2_NULL));
}

Finally, to configure the exact timing and multiplexing between all sensors, use Go2System_SetFrameRate(), Go2Sensor_SetExposure(), and Go2Sensor_SetExposureDelay(). Typically, the frame rate is set to the same value across all sensors in the system. If the exposure time is shorter than the frame period, it is then possible to split the frame period up in several time slots and expose the different sensors at a different time. For example, if the frame rate is set to be 2 ms for all sensors, but the exposure is set to 1 ms for all sensor, then the exposure delay can be set to 1 ms for only some of the sensors. This is how to avoid cross-talk between sensors which physically overlap their respective field of view.  

In terms of system calibration, i.e., bringing all sensors' data into a common coordinate system, the Go2 API does not provide this type of support (beyond the Buddy concept). System calibration typically involves placing a calibration target with predefined dimensions in front of the sensors. The sensors then locate specific features on the target, making it possible to calculate the values of transformation parameters (often involving a rotation angle and a 2D translation). These parameters are then applied to every data point in real time to create a scan of a complete 3D object in "world coordinates." Although this type of software is not included in the Go2 API, LMI has extensive experience in this area and can provide support for Gocator users who need to implement this.

Refer to the application guides How To Use The Open Source SDK To Fully Control A Gocator Multi-sensor System and How To Perform Alignment Calibration On A Synchronized Network Of Three Or More Gocator Sensors Mounted Side By Side at http://lmi3d.com/resources/gocator/ for more details.