ReconstructMe SDK  1.1.739-75658
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 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]);
// Perform reconstruction while at least one sensor has data.
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.
// Note that reme_sensor_track_position returns true when the volume is
// empty too.
for (int i = 0; i < 2; ++i) {
if (REME_SUCCESS(grab[i])) {
if (REME_SUCCESS(reme_sensor_track_position(c, sensor[i]))) {
}
}
}
reme_sensor_update_image(c, sensor[0], REME_IMAGE_DEPTH, imgs[0]);
reme_sensor_update_image(c, sensor[1], REME_IMAGE_DEPTH, imgs[2]);
reme_viewer_update(c, viewer);
}
// Make sure to release all memory acquired
}
BOOST_AUTO_TEST_SUITE_END()