ReconstructMe SDK  1.5.795-79862
Real-time 3D reconstruction engine
 All Classes Files Functions Typedefs Enumerations Enumerator Groups Pages
example_reconstructmesdk_sensor_multi_independent.cpp

Content

This example shows how to use multiple sensors on a single volume. Both sensors calibrate to each other via sensor data. This allows moving each sensor independently.

At the beginning the first sensor defines the world frame by adding data to the volume. This forces the second sensor to register with the content of the volume, before it can start to move. Once tracking is found, both sensors can be moved independently of each other.

Note, Boost is only used to generate examples and is not necessary for working with this SDK.

#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(example_reconstructmesdk)
BOOST_AUTO_TEST_CASE(sensor_multi_independent)
{
// Create a new context
// Create a license object
reme_error_t e = reme_license_authenticate(c, l, "license.txt.sgn");
// Create a new volume
// Create a two sensors, both pointing to different file streams
reme_sensor_t sensor[2];
reme_sensor_create(c, "file", false, &sensor[0]);
reme_sensor_create(c, "file", false, &sensor[1]);
reme_options_load_from_file(c, o, "one.txt");
reme_options_load_from_file(c, o, "two.txt");
reme_sensor_open(c, sensor[0]);
reme_sensor_open(c, sensor[1]);
// Prepare viewers
reme_viewer_t viewer;
reme_viewer_create_image(c, "This is ReconstructMeSDK", &viewer);
reme_image_t imgs[4];
reme_image_create(c, &imgs[0]);
reme_image_create(c, &imgs[1]);
reme_image_create(c, &imgs[2]);
reme_image_create(c, &imgs[3]);
reme_viewer_add_image(c, viewer, imgs[0]);
reme_viewer_add_image(c, viewer, imgs[1]);
reme_viewer_add_image(c, viewer, imgs[2]);
reme_viewer_add_image(c, viewer, imgs[3]);
// Set the global hint, which will force the sensors to use global tracking until
// they tracking succeeds.
while (REME_SUCCESS(grab[0]) || REME_SUCCESS(grab[1]))
{
// Grab from both sensors.
grab[0] = reme_sensor_grab(c, sensor[0]);
grab[1] = reme_sensor_grab(c, sensor[1]);
// Update the volume from both sensors when we sensor tracking succeeded.
for (int i = 0; i < 2; ++i) {
if (REME_SUCCESS(grab[i])) {
if (REME_SUCCESS(reme_sensor_track_position(c, sensor[i]))) {
}
}
}
reme_sensor_get_image(c, sensor[0], REME_IMAGE_DEPTH, imgs[0]);
reme_sensor_get_image(c, sensor[0], REME_IMAGE_VOLUME, imgs[1]);
reme_sensor_get_image(c, sensor[1], REME_IMAGE_AUX, imgs[2]);
reme_sensor_get_image(c, sensor[1], REME_IMAGE_VOLUME, imgs[3]);
reme_viewer_update(c, viewer);
}
// Print pending errors
// Make sure to release all memory acquired
}
BOOST_AUTO_TEST_SUITE_END()