37 #include <gtest/gtest.h>
39 #include <details/legacy/calibration.hh>
41 using namespace multisense::legacy;
48 memset(&cal.
M[0][0], 0,
sizeof(
float) * 9);
49 memset(&cal.
R[0][0], 0,
sizeof(
float) * 9);
50 memset(&cal.
P[0][0], 0,
sizeof(
float) * 12);
51 memset(&cal.
D[0], 0,
sizeof(
float) * 8);
73 cal.
P[0][2] = fx * tx;
86 memset(&cal.
M[0][0], 0,
sizeof(
float) * 9);
87 memset(&cal.
R[0][0], 0,
sizeof(
float) * 9);
88 memset(&cal.
P[0][0], 0,
sizeof(
float) * 12);
89 memset(&cal.
D[0], 0,
sizeof(
float) * 8);
98 cal.
K = {{{fx, 0.0, cx}, {0.0, fy, cy}, {0.0, 0.0, 1.0}}};
99 cal.
R = {{{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}};
100 cal.
P = {{{fx, 0.0, cx, fx * tx}, {0.0, fy, cy, 0.0}, {0.0, 0.0, 1.0, 0.0}}};
103 cal.
D = {1.0, 0.1, 0.2, 0.3, 0.4, 5.1, 6.2, 7.3};
110 for (
size_t h = 0 ; h < 3 ; ++h)
112 for (
size_t w = 0 ; w < 3 ; ++w)
114 ASSERT_FLOAT_EQ(wire.
M[h][w], cal.
K[h][w]);
115 ASSERT_FLOAT_EQ(wire.
R[h][w], cal.
R[h][w]);
119 for (
size_t h = 0 ; h < 3 ; ++h)
121 for (
size_t w = 0 ; w < 4 ; ++w)
123 ASSERT_FLOAT_EQ(wire.
P[h][w], cal.
P[h][w]);
127 for (
size_t i = 0 ; i < cal.
D.size() ; ++i)
129 ASSERT_FLOAT_EQ(wire.
D[i], cal.
D[i]);
135 for (
size_t h = 0 ; h < 3 ; ++h)
137 for (
size_t w = 0 ; w < 3 ; ++w)
139 ASSERT_FLOAT_EQ(lhs.
K[h][w], rhs.
K[h][w]);
140 ASSERT_FLOAT_EQ(lhs.
R[h][w], rhs.
R[h][w]);
144 for (
size_t h = 0 ; h < 3 ; ++h)
146 for (
size_t w = 0 ; w < 4 ; ++w)
148 ASSERT_FLOAT_EQ(lhs.
P[h][w], rhs.
P[h][w]);
152 for (
size_t i = 0 ; i < rhs.
D.size() ; ++i)
154 ASSERT_FLOAT_EQ(lhs.
D[i], rhs.
D[i]);
164 memset(cal.
M, 0,
sizeof(
float) * 9);
165 memset(cal.
D, 0,
sizeof(
float) * 8);
166 memset(cal.
R, 0,
sizeof(
float) * 9);
167 memset(cal.
P, 0,
sizeof(
float) * 12);
169 ASSERT_FALSE(is_valid(cal));
193 TEST(convert, wire_to_stereo_valid_axu)
202 auto stereo = convert(wire);
207 ASSERT_TRUE(
static_cast<bool>(stereo.aux));
211 TEST(convert, wire_to_stereo_invalid_axu)
220 auto stereo = convert(wire);
225 ASSERT_FALSE(
static_cast<bool>(stereo.aux));
228 TEST(convert, stereo_to_wire_valid_axu)
236 auto wire = convert(cal);
243 TEST(convert, stereo_to_wire_invalid_aux)
251 auto wire = convert(cal);
257 TEST(convert, select_calibration_valid_aux)
285 for (
const auto &left: left_sources)
287 const auto cam_cal = select_calibration(cal, left);
291 for (
const auto &right: right_sources)
293 const auto cam_cal = select_calibration(cal, right);
297 for (
const auto &aux: aux_sources)
299 const auto cam_cal = select_calibration(cal, aux);
304 TEST(convert, select_calibration_invalid_aux)
332 for (
const auto &left: left_sources)
334 const auto cam_cal = select_calibration(cal, left);
338 for (
const auto &right: right_sources)
340 const auto cam_cal = select_calibration(cal, right);
344 for (
const auto &aux: aux_sources)
346 ASSERT_THROW(select_calibration(cal, aux), std::exception);
353 const auto scaled = scale_calibration(cal, 0.1, 0.2);
358 TEST(scale_calibration, round_trip)
362 check_equal(cal, scale_calibration(scale_calibration(cal, 0.25, 0.1), 4.0, 10.0));
365 TEST(scale_calibration, scale_valid_aux)
371 const auto scaled = scale_calibration(cal, 0.1, 0.2);
375 ASSERT_TRUE(
static_cast<bool>(scaled.aux));
379 TEST(scale_calibration, round_trip_valid_aux)
385 const auto scaled = scale_calibration(cal, 0.1, 0.2);
389 ASSERT_FALSE(
static_cast<bool>(scaled.aux));
392 TEST(scale_calibration, scale_invalid_aux)
398 const auto round_trip = scale_calibration(scale_calibration(cal, 0.1, 0.2), 10.0, 5.0);
402 ASSERT_TRUE(
static_cast<bool>(round_trip.aux));
403 check_equal(round_trip.aux.value(), cal.aux.value());
406 TEST(scale_calibration, round_trip_invalid_aux)
412 const auto round_trip = scale_calibration(scale_calibration(cal, 0.1, 0.2), 10.0, 5.0);
416 ASSERT_FALSE(
static_cast<bool>(round_trip.aux));