LibMultiSense
LibMultiSense Documentation
configuration_test.cc
Go to the documentation of this file.
1 
37 #include <gtest/gtest.h>
38 
39 #include <details/legacy/configuration.hh>
40 
41 using namespace multisense::legacy;
42 
43 multisense::MultiSenseConfig create_valid_config(uint32_t width, uint32_t height)
44 {
45  using namespace multisense;
46  using namespace std::chrono_literals;
47 
48  MultiSenseConfig::StereoConfig stereo_config{0.8};
49 
50  MultiSenseConfig::ManualExposureConfig manual_exposure{2.0, 500us};
51 
52  MultiSenseConfig::AutoExposureConfig auto_exposure{600us,
53  6,
54  0.6,
55  0.95,
56  3.0,
57  {10, 20, 400, 300}};
58 
59  MultiSenseConfig::ManualWhiteBalanceConfig manual_white_balance{2.2, 3.3};
60 
61  MultiSenseConfig::AutoWhiteBalanceConfig auto_white_balance{4, 0.7};
62 
63  MultiSenseConfig::ImageConfig image_config{1.2,
64  false,
65  manual_exposure,
66  auto_exposure,
67  true,
68  manual_white_balance,
69  auto_white_balance};
70 
71  MultiSenseConfig::AuxConfig aux_config{image_config, true, 10.0, 80};
72 
74 
76 
77  return MultiSenseConfig{width,
78  height,
80  11.0,
81  stereo_config,
82  image_config,
83  aux_config,
84  std::make_optional(time),
85  std::make_optional(network),
86  std::nullopt,
87  std::nullopt};
88 }
89 
90 multisense::MultiSenseInfo::DeviceInfo create_device_info(uint32_t imager_width, uint32_t imager_height)
91 {
93  info.imager_width = imager_width;
94  info.imager_height = imager_height;
95 
97 
98  return info;
99 }
100 
102 {
103  using namespace multisense;
104 
105  std::vector<ImuRate> accel_rates{{1.0f, 2.0f}, {3.0f, 4.4f}, {5.5f, 6.7f}};
106  std::vector<ImuRange> accel_ranges{{1.1f, 3.0f}, {3.1f, 4.5f}, {5.6f, 6.8f}};
107 
108  std::vector<ImuRate> gyro_rates{{1.1f, 2.1f}, {3.1f, 5.4f}, {5.6f, 7.7f}};
109  std::vector<ImuRange> gyro_ranges{{2.1f, 3.1f}, {4.1f, 5.5f}, {6.6f, 7.8f}};
110 
111  std::vector<ImuRate> mag_rates{{2.1f, 3.1f}, {4.1f, 6.4f}, {6.6f, 8.7f}};
112  std::vector<ImuRange> mag_ranges{{3.1f, 4.1f}, {5.1f, 5.6f}, {6.7f, 8.8f}};
113 
114  return MultiSenseInfo::ImuInfo{MultiSenseInfo::ImuInfo::Source{"accelerometer", "bmi160", accel_rates, accel_ranges},
115  MultiSenseInfo::ImuInfo::Source{"gyroscope", "bmi160", gyro_rates, gyro_ranges},
116  MultiSenseInfo::ImuInfo::Source{"magnetometer", "bmi160", mag_rates, mag_ranges}};
117 }
118 
119 
121 {
122  using namespace crl::multisense::details;
123 
124  wire::CamConfig config;
125  config.width = 1920;
126  config.height = 1200;
127  config.disparities = 256;
128  config.stereoPostFilterStrength = 0.8;
129  config.gain = 2.0;
130  config.exposure = 500;
131 
132  config.autoExposure = 0;
133  config.autoExposureMax = 600;
134  config.autoExposureDecay = 6;
135  config.autoExposureTargetIntensity = 0.6;
136  config.autoExposureThresh = 0.95;
137  config.gainMax = 3.0;
138  config.autoExposureRoiX = 10;
139  config.autoExposureRoiY = 20;
140  config.autoExposureRoiWidth = 400;
141  config.autoExposureRoiHeight = 300;
142 
143  config.autoWhiteBalance = 1;
144  config.whiteBalanceRed = 2.2;
145  config.whiteBalanceBlue = 3.3;
146  config.autoWhiteBalanceDecay = 4;
147  config.autoWhiteBalanceThresh = 0.7;
148 
149  config.gamma = 1.2;
150 
151  return config;
152 }
153 
155 {
156  using namespace crl::multisense::details;
157 
158  wire::AuxCamConfig config;
159  config.gain = 2.0;
160  config.exposure = 500;
161 
162  config.autoExposure = 0;
163  config.autoExposureMax = 600;
164  config.autoExposureDecay = 6;
165  config.autoExposureTargetIntensity = 0.6;
166  config.autoExposureThresh = 0.95;
167  config.gainMax = 3.0;
168  config.autoExposureRoiX = 10;
169  config.autoExposureRoiY = 20;
170  config.autoExposureRoiWidth = 400;
171  config.autoExposureRoiHeight = 300;
172 
173  config.autoWhiteBalance = 1;
174  config.whiteBalanceRed = 2.2;
175  config.whiteBalanceBlue = 3.3;
176  config.autoWhiteBalanceDecay = 4;
177  config.autoWhiteBalanceThresh = 0.7;
178 
179  config.sharpeningEnable = true;
180  config.sharpeningPercentage = 10.0;
181  config.sharpeningLimit = 80;
182 
183  return config;
184 }
185 
187 {
188  using namespace crl::multisense::details;
189 
190  wire::SysPacketDelay delay;
191  delay.enable = true;
192 
193  return delay;
194 }
195 
197 {
198  using namespace crl::multisense::details;
199 
200  wire::ImuConfig config;
201 
202  config.storeSettingsInFlash = false;
203  config.samplesPerMessage = 300;
204 
205  config.configs.resize(3);
206 
207  config.configs[0].name = "accelerometer";
208  config.configs[0].flags = 0;
209  config.configs[0].rateTableIndex = 1;
210  config.configs[0].rangeTableIndex = 0;
211 
212  config.configs[1].name = "gyroscope";
213  config.configs[1].flags = 1;
214  config.configs[1].rateTableIndex = 0;
215  config.configs[1].rangeTableIndex = 1;
216 
217  config.configs[2].name = "magnetometer";
218  config.configs[2].flags = 1;
219  config.configs[2].rateTableIndex = 1;
220  config.configs[2].rangeTableIndex = 1;
221 
222  return config;
223 }
224 
226 {
227  using namespace crl::multisense::details;
228 
229  wire::LedStatus config;
230 
231  config.available = 1 | 1<<1 | 1<<2;
232 
233  config.intensity[0] = 255;
234  config.intensity[1] = 128;
235  config.intensity[2] = 1;
236 
237  config.flash = 1;
238  config.led_delay_us = 0;
239  config.number_of_pulses = 1;
240  config.invert_pulse = 0;
241  config.rolling_shutter_led = 1;
242 
243  return config;
244 }
245 
248 {
249  using namespace multisense;
250 
251  ASSERT_EQ(config.width, res.width);
252  ASSERT_EQ(config.height, res.height);
253 
254  switch(config.disparities)
255  {
256  case MultiSenseConfig::MaxDisparities::D64: {ASSERT_EQ(64, res.disparities); break;}
257  case MultiSenseConfig::MaxDisparities::D128: {ASSERT_EQ(128, res.disparities); break;}
258  case MultiSenseConfig::MaxDisparities::D256: {ASSERT_EQ(256, res.disparities); break;}
259  }
260 }
261 
262 template <typename ConfigT, typename ControlT>
263 void check_equal(const ConfigT &config,
264  const ControlT &control)
265 {
266  ASSERT_TRUE(static_cast<bool>(config.manual_exposure));
267  ASSERT_FLOAT_EQ(config.manual_exposure->gain, control.gain);
268  ASSERT_EQ(config.manual_exposure->exposure_time.count(), control.exposure);
269 
270  ASSERT_TRUE(static_cast<bool>(config.auto_exposure));
271  ASSERT_EQ(config.auto_exposure_enabled, control.autoExposure);
272  ASSERT_EQ(config.auto_exposure->max_exposure_time.count(), control.autoExposureMax);
273  ASSERT_EQ(config.auto_exposure->decay, control.autoExposureDecay);
274  ASSERT_FLOAT_EQ(config.auto_exposure->target_threshold, control.autoExposureThresh);
275  ASSERT_FLOAT_EQ(config.auto_exposure->target_intensity, control.autoExposureTargetIntensity);
276  ASSERT_FLOAT_EQ(config.auto_exposure->max_gain, control.gainMax);
277 
278  ASSERT_EQ(config.auto_exposure->roi.top_left_x_position, control.autoExposureRoiX);
279  ASSERT_EQ(config.auto_exposure->roi.top_left_y_position, control.autoExposureRoiY);
280  ASSERT_EQ(config.auto_exposure->roi.width, control.autoExposureRoiWidth);
281  ASSERT_EQ(config.auto_exposure->roi.height, control.autoExposureRoiHeight);
282 
283  ASSERT_TRUE(static_cast<bool>(config.manual_white_balance));
284  ASSERT_FLOAT_EQ(config.manual_white_balance->red, control.whiteBalanceRed);
285  ASSERT_FLOAT_EQ(config.manual_white_balance->blue, control.whiteBalanceBlue);
286 
287  ASSERT_TRUE(static_cast<bool>(config.auto_white_balance));
288  ASSERT_EQ(config.auto_white_balance_enabled, control.autoWhiteBalance);
289  ASSERT_EQ(config.auto_white_balance->decay, control.autoWhiteBalanceDecay);
290  ASSERT_EQ(config.auto_white_balance->threshold, control.autoWhiteBalanceThresh);
291 
292  ASSERT_EQ(config.gamma, control.gamma);
293 }
294 
297 {
298  using namespace multisense;
299 
300  ASSERT_FLOAT_EQ(config.frames_per_second, control.framesPerSecond);
301 
302  check_equal(config.image_config, control);
303 
304  ASSERT_FLOAT_EQ(config.stereo_config.postfilter_strength, control.stereoPostFilterStrength);
305 }
306 
309 {
310  using namespace multisense;
311 
312  ASSERT_TRUE(static_cast<bool>(config.aux_config));
313 
314  check_equal(config.aux_config->image_config, control);
315 
316  ASSERT_EQ(config.aux_config->sharpening_enabled, control.sharpeningEnable);
317  ASSERT_FLOAT_EQ(config.aux_config->sharpening_percentage, control.sharpeningPercentage);
318  ASSERT_FLOAT_EQ(config.aux_config->sharpening_limit, control.sharpeningLimit);
319 }
320 
323 {
324  using namespace multisense;
325 
326  ASSERT_FLOAT_EQ(config.stereo_config.postfilter_strength, wire_config.stereoPostFilterStrength);
327 
328  ASSERT_EQ(config.width, wire_config.width);
329  ASSERT_EQ(config.height, wire_config.height);
330 
331  switch(config.disparities)
332  {
333  case MultiSenseConfig::MaxDisparities::D64: {ASSERT_EQ(64, wire_config.disparities); break;}
334  case MultiSenseConfig::MaxDisparities::D128: {ASSERT_EQ(128, wire_config.disparities); break;}
335  case MultiSenseConfig::MaxDisparities::D256: {ASSERT_EQ(256, wire_config.disparities); break;}
336  }
337 
338  ASSERT_EQ(config.frames_per_second, wire_config.framesPerSecond);
339 
340  check_equal(config.image_config, wire_config);
341 }
342 
345 {
346  check_equal(config.image_config, wire_config);
347 
348  ASSERT_EQ(config.sharpening_enabled, wire_config.sharpeningEnable);
349  ASSERT_FLOAT_EQ(config.sharpening_percentage, wire_config.sharpeningPercentage);
350  ASSERT_FLOAT_EQ(config.sharpening_limit, wire_config.sharpeningLimit);
351 }
352 
354  const multisense::ImuRate &rate1)
355 {
356  ASSERT_FLOAT_EQ(rate0.sample_rate, rate1.sample_rate);
357  ASSERT_FLOAT_EQ(rate0.bandwith_cutoff, rate1.bandwith_cutoff);
358 }
359 
361  const multisense::ImuRange &range1)
362 {
363  ASSERT_FLOAT_EQ(range0.range, range1.range);
364  ASSERT_FLOAT_EQ(range0.resolution, range1.resolution);
365 }
366 
369  const multisense::MultiSenseInfo::ImuInfo &imu_info)
370 {
371  using namespace crl::multisense::details;
372 
373  ASSERT_EQ(config.samples_per_frame, wire_config.samplesPerMessage);
374 
375  ASSERT_EQ(static_cast<bool>(imu_info.accelerometer), static_cast<bool>(config.accelerometer));
376  ASSERT_EQ(static_cast<bool>(imu_info.gyroscope), static_cast<bool>(config.gyroscope));
377  ASSERT_EQ(static_cast<bool>(imu_info.magnetometer), static_cast<bool>(config.magnetometer));
378 
379  ASSERT_GT(wire_config.configs.size(), 2);
380 
381  for (size_t i = 0 ; i < wire_config.configs.size() ; ++i)
382  {
383  const auto &wire = wire_config.configs[i];
384 
385  if (imu_info.accelerometer && wire.name == imu_info.accelerometer->name)
386  {
387  const auto rate = imu_info.accelerometer->rates[wire.rateTableIndex];
388  const auto range = imu_info.accelerometer->ranges[wire.rangeTableIndex];
389 
390  ASSERT_EQ(config.accelerometer->enabled, static_cast<bool>(wire.flags & wire::imu::Config::FLAGS_ENABLED));
391 
392  check_equal(config.accelerometer->rate, rate);
393  check_equal(config.accelerometer->range, range);
394  }
395  else if (imu_info.gyroscope && wire.name == imu_info.gyroscope->name)
396  {
397  const auto rate = imu_info.gyroscope->rates[wire.rateTableIndex];
398  const auto range = imu_info.gyroscope->ranges[wire.rangeTableIndex];
399 
400  ASSERT_EQ(config.gyroscope->enabled, static_cast<bool>(wire.flags & wire::imu::Config::FLAGS_ENABLED));
401 
402  check_equal(config.gyroscope->rate, rate);
403  check_equal(config.gyroscope->range, range);
404  }
405  else if (imu_info.magnetometer && wire.name == imu_info.magnetometer->name)
406  {
407  const auto rate = imu_info.magnetometer->rates[wire.rateTableIndex];
408  const auto range = imu_info.magnetometer->ranges[wire.rangeTableIndex];
409 
410  ASSERT_EQ(config.magnetometer->enabled, static_cast<bool>(wire.flags & wire::imu::Config::FLAGS_ENABLED));
411 
412  check_equal(config.magnetometer->rate, rate);
413  check_equal(config.magnetometer->range, range);
414  }
415  else
416  {
417  ASSERT_TRUE(false);
418  }
419  }
420 }
421 
424 {
425  using namespace multisense;
426 
427  if (config.internal)
428  {
429  ASSERT_FLOAT_EQ(config.internal->intensity, wire.intensity[0] / 255.0f * 100.0f);
430  ASSERT_EQ(wire.led_delay_us, 0);
431  ASSERT_EQ(wire.number_of_pulses, 1);
432  ASSERT_EQ(wire.invert_pulse, 0);
433  ASSERT_EQ(config.internal->flash, wire.flash != 0);
434  }
435 
436  if (config.external)
437  {
438  ASSERT_FLOAT_EQ(config.external->intensity, wire.intensity[0] / 255.0f * 100.0f);
439  ASSERT_EQ(wire.led_delay_us, config.external->startup_time.count());
440  ASSERT_EQ(wire.number_of_pulses, config.external->pulses_per_exposure);
441  ASSERT_EQ(wire.invert_pulse, 0);
442 
443  switch (config.external->flash)
444  {
446  {
447  ASSERT_EQ(wire.flash, 0);
448  ASSERT_EQ(wire.rolling_shutter_led, 0);
449  break;
450  }
452  {
453  ASSERT_EQ(wire.flash, 1);
454  ASSERT_EQ(wire.rolling_shutter_led, 0);
455  break;
456  }
458  {
459  ASSERT_EQ(wire.flash, 1);
460  ASSERT_EQ(wire.rolling_shutter_led, 1);
461  break;
462  }
463  }
464  }
465 }
466 
469 {
470  using namespace crl::multisense::details;
471  using namespace multisense;
472 
473  if (config.internal)
474  {
475  for (size_t i = 0 ; i < wire::MAX_LIGHTS ; ++i)
476  {
477  ASSERT_FLOAT_EQ(config.internal->intensity, wire.intensity[i] / 255.0f * 100.0f);
478  ASSERT_EQ(wire.mask & 1<<i, 1<<i);
479  }
480 
481  ASSERT_EQ(wire.led_delay_us, 0);
482  ASSERT_EQ(wire.number_of_pulses, 1);
483  ASSERT_EQ(wire.invert_pulse, 0);
484  ASSERT_EQ(config.internal->flash, wire.flash != 0);
485  }
486 
487  if (config.external)
488  {
489  for (size_t i = 0 ; i < wire::MAX_LIGHTS ; ++i)
490  {
491  ASSERT_FLOAT_EQ(config.external->intensity, wire.intensity[i] / 255.0f * 100.0f);
492  ASSERT_EQ(wire.mask & 1<<i, 1<<i);
493  }
494 
495  ASSERT_EQ(wire.led_delay_us, config.external->startup_time.count());
496  ASSERT_EQ(wire.number_of_pulses, config.external->pulses_per_exposure);
497  ASSERT_EQ(wire.invert_pulse, 0);
498 
499  switch (config.external->flash)
500  {
502  {
503  ASSERT_EQ(wire.flash, 0);
504  ASSERT_EQ(wire.rolling_shutter_led, 0);
505  break;
506  }
508  {
509  ASSERT_EQ(wire.flash, 1);
510  ASSERT_EQ(wire.rolling_shutter_led, 0);
511  break;
512  }
514  {
515  ASSERT_EQ(wire.flash, 1);
516  ASSERT_EQ(wire.rolling_shutter_led, 1);
517  break;
518  }
519  }
520  }
521 }
522 
525 {
526  ASSERT_EQ(config.packet_delay_enabled, packet_delay.enable);
527 }
528 
529 TEST(equality, equal)
530 {
531  using namespace multisense;
532 
533  const auto config = create_valid_config(1920, 1200);
534 
535  ASSERT_TRUE(config == config);
536 }
537 
538 TEST(equality, not_equal)
539 {
540  using namespace multisense;
541 
542  const auto config0 = create_valid_config(1920, 1200);
543  const auto config1 = create_valid_config(1920, 1201);
544 
545  ASSERT_FALSE(config0 == config1);
546 }
547 
548 TEST(convert, cam_resolution_full_res)
549 {
550  using namespace crl::multisense::details;
551  using namespace multisense;
552 
553  const auto config = create_valid_config(1920, 1200);
554 
555  const auto wire_resolution = convert<wire::CamSetResolution>(config);
556 
557  check_equal(config, wire_resolution);
558 }
559 
560 TEST(convert, cam_control)
561 {
562  using namespace crl::multisense::details;
563  using namespace multisense;
564 
565  const auto config = create_valid_config(1920, 1200);
566 
567  const auto cam_control = convert<wire::CamControl>(config);
568 
569  check_equal(config, cam_control);
570 }
571 
572 TEST(convert, aux_cam_control)
573 {
574  using namespace crl::multisense::details;
575  using namespace multisense;
576 
577  const auto config = create_valid_config(1920, 1200);
578 
579  ASSERT_TRUE(static_cast<bool>(config.aux_config));
580 
581  const auto cam_control = convert(config.aux_config.value());
582 
583  check_equal(config, cam_control);
584 }
585 
586 
587 TEST(convert, cam_config)
588 {
589  const auto wire_config = create_valid_wire_config();
590  const auto wire_aux_config = create_valid_wire_aux_config();
591  const auto packet_config = create_wire_packet_delay();
592 
593  const auto config = convert(wire_config,
594  wire_aux_config,
595  std::nullopt,
596  std::nullopt,
597  packet_config,
598  false,
599  create_device_info(1920, 1200),
600  create_imu_info());
601 
602  ASSERT_TRUE(static_cast<bool>(config.aux_config));
603 
604  check_equal(config, wire_config);
605  check_equal(config.aux_config.value(), wire_aux_config);
606 }
607 
608 TEST(convert, cam_config_invalid_aux)
609 {
610  const auto wire_config = create_valid_wire_config();
611  const auto packet_config = create_wire_packet_delay();
612 
613  const auto config = convert(wire_config,
614  std::nullopt,
615  std::nullopt,
616  std::nullopt,
617  packet_config,
618  false,
619  create_device_info(1920, 1200),
620  create_imu_info());
621 
622  ASSERT_FALSE(static_cast<bool>(config.aux_config));
623 
624  check_equal(config, wire_config);
625 }
626 
627 TEST(convert, cam_config_invalid_imu)
628 {
629  const auto wire_config = create_valid_wire_config();
630  const auto packet_config = create_wire_packet_delay();
631 
632  const auto config = convert(wire_config,
633  std::nullopt,
634  std::nullopt,
635  std::nullopt,
636  packet_config,
637  false,
638  create_device_info(1920, 1200),
639  create_imu_info());
640 
641  ASSERT_FALSE(static_cast<bool>(config.imu_config));
642 
643  check_equal(config, wire_config);
644 
645  ASSERT_TRUE(static_cast<bool>(config.network_config));
646  check_equal(config.network_config.value(), packet_config);
647 }
648 
649 TEST(convert, cam_config_invalid_led)
650 {
651  const auto wire_config = create_valid_wire_config();
652  const auto packet_config = create_wire_packet_delay();
653 
654  const auto config = convert(wire_config,
655  std::nullopt,
656  std::nullopt,
657  std::nullopt,
658  packet_config,
659  false,
660  create_device_info(1920, 1200),
661  create_imu_info());
662 
663  ASSERT_FALSE(static_cast<bool>(config.lighting_config));
664 
665  check_equal(config, wire_config);
666 
667  ASSERT_TRUE(static_cast<bool>(config.network_config));
668  check_equal(config.network_config.value(), packet_config);
669 }
670 
671 TEST(convert, cam_config_valid_led_but_no_ligths)
672 {
673  const auto wire_config = create_valid_wire_config();
674 
675  auto lighting_config = create_valid_lighting_wire_config();
676  lighting_config.available = 0;
677 
678  const auto packet_config = create_wire_packet_delay();
679 
680  const auto config = convert(wire_config,
681  std::nullopt,
682  std::nullopt,
683  std::make_optional(lighting_config),
684  packet_config,
685  false,
686  create_device_info(1920, 1200),
687  create_imu_info());
688 
689  ASSERT_FALSE(static_cast<bool>(config.lighting_config));
690 
691  check_equal(config, wire_config);
692 
693  ASSERT_TRUE(static_cast<bool>(config.network_config));
694  check_equal(config.network_config.value(), packet_config);
695 }
696 
697 TEST(convert, imu_config_round_trip)
698 {
699  const auto wire_config = create_valid_imu_wire_config();
700  const auto info = create_imu_info();
701 
702  const auto round_trip = convert(convert(convert(wire_config, info), info, 10000), info);
703 
704  check_equal(round_trip, wire_config, info);
705 }
706 
707 TEST(convert, imu_config_limit_messages)
708 {
709  const auto wire_config = create_valid_imu_wire_config();
710  const auto info = create_imu_info();
711 
712  //
713  // Limit the number of samples to one less than our initialized value
714  //
715  const auto round_trip = convert(convert(wire_config, info), info, wire_config.samplesPerMessage - 1);
716 
717  ASSERT_EQ(round_trip.samplesPerMessage, wire_config.samplesPerMessage - 1);
718 }
719 
720 TEST(convert, lighting_config_round_trip)
721 {
722  const auto wire_config = create_valid_lighting_wire_config();
723 
724  const auto config = convert(wire_config, multisense::MultiSenseInfo::DeviceInfo::LightingType::EXTERNAL);
725 
726  check_equal(config, wire_config);
727  check_equal(config, convert(config));
728 }
729 
730 TEST(convert, network_config)
731 {
732  using namespace crl::multisense::details;
733 
734  const auto wire_config = create_valid_wire_config();
735  const auto packet_config = create_wire_packet_delay();
736 
737  const auto config = convert(wire_config,
738  std::nullopt,
739  std::nullopt,
740  std::nullopt,
741  packet_config,
742  false,
743  create_device_info(1920, 1200),
744  create_imu_info());
745 
746  ASSERT_TRUE(static_cast<bool>(config.network_config));
747  check_equal(config.network_config.value(),
748  convert<wire::SysPacketDelay>(config.network_config.value()));
749 
750 }
multisense::MultiSenseConfig::AuxConfig::sharpening_percentage
float sharpening_percentage
The percentage strength of the sharpening gain to apply to the aux image Valid range is [0,...
Definition: MultiSenseTypes.hh:750
crl::multisense::details::wire::CamConfig::height
uint16_t height
Definition: CamConfigMessage.hh:63
multisense::MultiSenseConfig::NetworkTransmissionConfig::packet_delay_enabled
bool packet_delay_enabled
Add a small delay between the transmission of each packet to hopefully interact better with slower cl...
Definition: MultiSenseTypes.hh:820
multisense::MultiSenseConfig::ImuConfig::accelerometer
std::optional< OperatingMode > accelerometer
Configuration for the onboard accelerometer.
Definition: MultiSenseTypes.hh:875
crl::multisense::details::wire::AuxCamConfig::autoExposure
uint8_t autoExposure
Definition: AuxCamConfigMessage.hh:65
crl::multisense::details::wire::CamConfig::whiteBalanceBlue
float whiteBalanceBlue
Definition: CamConfigMessage.hh:74
multisense::MultiSenseConfig::stereo_config
StereoConfig stereo_config
The stereo configuration to use.
Definition: MultiSenseTypes.hh:1026
multisense::MultiSenseInfo::DeviceInfo::LightingType::EXTERNAL
@ EXTERNAL
Drive lights via an external output.
crl::multisense::details
Definition: BufferStream.hh:53
crl::multisense::details::wire::LedSet::flash
uint8_t flash
Definition: LedSetMessage.hh:68
crl::multisense::details::wire::CamConfig::exposure
uint32_t exposure
Definition: CamConfigMessage.hh:67
crl::multisense::details::wire::AuxCamConfig::sharpeningPercentage
float sharpeningPercentage
Definition: AuxCamConfigMessage.hh:92
crl::multisense::details::wire::CamConfig::autoExposureThresh
float autoExposureThresh
Definition: CamConfigMessage.hh:71
crl::multisense::details::wire::AuxCamConfig::whiteBalanceBlue
float whiteBalanceBlue
Definition: AuxCamConfigMessage.hh:71
multisense::MultiSenseConfig::ImuConfig
Config for the IMU sensor.
Definition: MultiSenseTypes.hh:834
crl::multisense::details::wire::CamConfig::whiteBalanceRed
float whiteBalanceRed
Definition: CamConfigMessage.hh:73
crl::multisense::details::wire::CamConfig::width
uint16_t width
Definition: CamConfigMessage.hh:62
crl::multisense::details::wire::LedStatus
Definition: LedStatusMessage.hh:50
crl::multisense::details::wire::CamConfig::gainMax
float gainMax
Definition: CamConfigMessage.hh:133
crl::multisense::details::wire::AuxCamConfig::autoExposureRoiY
uint16_t autoExposureRoiY
Definition: AuxCamConfigMessage.hh:82
multisense::MultiSenseConfig::frames_per_second
float frames_per_second
The target framerate the MultiSense should operate at.
Definition: MultiSenseTypes.hh:1021
crl::multisense::details::wire::MAX_LIGHTS
static CRL_CONSTEXPR uint32_t MAX_LIGHTS
Definition: Protocol.hh:337
crl::multisense::details::wire::AuxCamConfig::sharpeningEnable
bool sharpeningEnable
Definition: AuxCamConfigMessage.hh:91
crl::multisense::details::wire::AuxCamConfig::autoWhiteBalanceThresh
float autoWhiteBalanceThresh
Definition: AuxCamConfigMessage.hh:74
crl::multisense::details::wire::AuxCamControl::sharpeningPercentage
float sharpeningPercentage
Definition: AuxCamControlMessage.hh:86
check_equal
void check_equal(const multisense::MultiSenseConfig &config, const crl::multisense::details::wire::CamSetResolution &res)
Definition: configuration_test.cc:246
multisense::MultiSenseConfig::ImageConfig
Image specific configuration.
Definition: MultiSenseTypes.hh:678
crl::multisense::details::wire::SysPacketDelay
Definition: SysPacketDelayMessage.hh:49
crl::multisense::details::wire::AuxCamConfig::autoExposureRoiWidth
uint16_t autoExposureRoiWidth
Definition: AuxCamConfigMessage.hh:83
multisense::MultiSenseConfig::AutoExposureConfig
Auto-exposure specific configuration.
Definition: MultiSenseTypes.hh:566
multisense::MultiSenseConfig::AuxConfig::sharpening_limit
uint8_t sharpening_limit
The maximum difference in pixels that sharpening is is allowed to change between neighboring pixels.
Definition: MultiSenseTypes.hh:758
crl::multisense::details::wire::CamConfig::autoExposureMax
uint32_t autoExposureMax
Definition: CamConfigMessage.hh:69
crl::multisense::details::wire::AuxCamConfig
Definition: AuxCamConfigMessage.hh:51
multisense::MultiSenseConfig::MaxDisparities::D128
@ D128
128 pixels
multisense::ImuRate::sample_rate
float sample_rate
The sample rate for the sensor in Hz.
Definition: MultiSenseTypes.hh:434
crl::multisense::details::wire::CamConfig::autoWhiteBalanceDecay
uint32_t autoWhiteBalanceDecay
Definition: CamConfigMessage.hh:76
crl::multisense::details::wire::AuxCamConfig::gain
float gain
Definition: AuxCamConfigMessage.hh:62
multisense::MultiSenseConfig::aux_config
std::optional< AuxConfig > aux_config
The image configuration to use for the aux camera if present.
Definition: MultiSenseTypes.hh:1036
crl::multisense::details::wire::CamConfig::autoExposureRoiY
uint16_t autoExposureRoiY
Definition: CamConfigMessage.hh:103
crl::multisense::details::wire::CamConfig::autoExposureTargetIntensity
float autoExposureTargetIntensity
Definition: CamConfigMessage.hh:121
multisense::MultiSenseConfig::TimeConfig
Config for time-based controls.
Definition: MultiSenseTypes.hh:795
crl::multisense::details::wire::CamControl::framesPerSecond
float framesPerSecond
Definition: CamControlMessage.hh:62
multisense::MultiSenseInfo::ImuInfo::gyroscope
std::optional< Source > gyroscope
Configuration specific to the gyroscope.
Definition: MultiSenseTypes.hh:1614
crl::multisense::details::wire::AuxCamConfig::autoWhiteBalance
uint8_t autoWhiteBalance
Definition: AuxCamConfigMessage.hh:72
crl::multisense::details::wire::CamConfig::autoWhiteBalance
uint8_t autoWhiteBalance
Definition: CamConfigMessage.hh:75
crl::multisense::details::wire::CamSetResolution::width
uint32_t width
Definition: CamSetResolutionMessage.hh:58
crl::multisense::details::wire::ImuConfig
Definition: ImuConfigMessage.hh:76
multisense::ImuRange::resolution
float resolution
The min resolution the sensor can return.
Definition: MultiSenseTypes.hh:463
crl::multisense::details::wire::CamConfig::autoExposure
uint8_t autoExposure
Definition: CamConfigMessage.hh:68
create_imu_info
multisense::MultiSenseInfo::ImuInfo create_imu_info()
Definition: configuration_test.cc:101
multisense::MultiSenseInfo::ImuInfo::magnetometer
std::optional< Source > magnetometer
Configuration specific to the magnetometer.
Definition: MultiSenseTypes.hh:1619
crl::multisense::details::wire::AuxCamConfig::sharpeningLimit
uint8_t sharpeningLimit
Definition: AuxCamConfigMessage.hh:93
crl::multisense::details::wire::LedStatus::number_of_pulses
uint32_t number_of_pulses
Definition: LedStatusMessage.hh:80
crl::multisense::details::wire::AuxCamConfig::autoExposureThresh
float autoExposureThresh
Definition: AuxCamConfigMessage.hh:68
crl::multisense::details::wire::LedStatus::available
uint8_t available
Definition: LedStatusMessage.hh:58
multisense::MultiSenseConfig::AutoWhiteBalanceConfig
Auto white balance specific configuration.
Definition: MultiSenseTypes.hh:652
multisense::MultiSenseConfig::image_config
ImageConfig image_config
The image configuration to use for the main stereo pair.
Definition: MultiSenseTypes.hh:1031
create_device_info
multisense::MultiSenseInfo::DeviceInfo create_device_info(uint32_t imager_width, uint32_t imager_height)
Definition: configuration_test.cc:90
multisense::MultiSenseConfig::LightingConfig::ExternalConfig::FlashMode::SYNC_WITH_AUX
@ SYNC_WITH_AUX
crl::multisense::details::wire::LedStatus::intensity
uint8_t intensity[MAX_LIGHTS]
Definition: LedStatusMessage.hh:63
multisense::MultiSenseInfo::ImuInfo::Source
Info about the available IMU configurations.
Definition: MultiSenseTypes.hh:1583
crl::multisense::details::wire::AuxCamControl
Definition: AuxCamControlMessage.hh:51
crl::multisense::details::wire::AuxCamConfig::autoExposureRoiHeight
uint16_t autoExposureRoiHeight
Definition: AuxCamConfigMessage.hh:84
crl::multisense::details::wire::LedSet::led_delay_us
uint32_t led_delay_us
Definition: LedSetMessage.hh:74
crl::multisense::details::wire::LedStatus::flash
uint8_t flash
Definition: LedStatusMessage.hh:68
crl::multisense::details::wire::ImuConfig::storeSettingsInFlash
uint8_t storeSettingsInFlash
Definition: ImuConfigMessage.hh:81
multisense::ImuRate
A sample rate, and what impact it has on bandwidth.
Definition: MultiSenseTypes.hh:429
create_valid_wire_config
crl::multisense::details::wire::CamConfig create_valid_wire_config()
Definition: configuration_test.cc:120
crl::multisense::details::wire::LedStatus::invert_pulse
uint8_t invert_pulse
Definition: LedStatusMessage.hh:87
TEST
TEST(equality, equal)
Definition: configuration_test.cc:529
multisense::MultiSenseConfig::disparities
MaxDisparities disparities
The max number of pixels the MultiSense searches when computing the disparity output.
Definition: MultiSenseTypes.hh:1016
crl::multisense::details::wire::AuxCamConfig::autoExposureDecay
uint32_t autoExposureDecay
Definition: AuxCamConfigMessage.hh:67
multisense::MultiSenseInfo::DeviceInfo::imager_width
uint32_t imager_width
The native width of the primary imager.
Definition: MultiSenseTypes.hh:1426
crl::multisense::details::wire::LedSet::intensity
uint8_t intensity[MAX_LIGHTS]
Definition: LedSetMessage.hh:63
multisense::MultiSenseConfig::AuxConfig
Image specific configuration for the Aux imager.
Definition: MultiSenseTypes.hh:734
multisense::ImuRate::bandwith_cutoff
float bandwith_cutoff
The bandwith cutoff for a given IMU mode in Hz.
Definition: MultiSenseTypes.hh:439
crl::multisense::details::wire::CamControl
Definition: CamControlMessage.hh:54
create_valid_imu_wire_config
crl::multisense::details::wire::ImuConfig create_valid_imu_wire_config()
Definition: configuration_test.cc:196
crl::multisense::details::wire::LedSet
Definition: LedSetMessage.hh:50
multisense::MultiSenseConfig::ManualExposureConfig
Manual exposure specific configuration.
Definition: MultiSenseTypes.hh:504
multisense::MultiSenseConfig::ImuConfig::magnetometer
std::optional< OperatingMode > magnetometer
Configuration for the onboard magnetometer.
Definition: MultiSenseTypes.hh:885
multisense::MultiSenseInfo::DeviceInfo::imager_height
uint32_t imager_height
The native height of the primary imager.
Definition: MultiSenseTypes.hh:1431
crl::multisense::details::wire::CamConfig::autoExposureRoiWidth
uint16_t autoExposureRoiWidth
Definition: CamConfigMessage.hh:104
multisense::MultiSenseConfig::LightingConfig::ExternalConfig::FlashMode::SYNC_WITH_MAIN_STEREO
@ SYNC_WITH_MAIN_STEREO
multisense::MultiSenseInfo::DeviceInfo
The Device information associated with the MultiSense.
Definition: MultiSenseTypes.hh:1290
crl::multisense::details::wire::CamConfig::autoWhiteBalanceThresh
float autoWhiteBalanceThresh
Definition: CamConfigMessage.hh:77
crl::multisense::details::wire::LedSet::invert_pulse
uint8_t invert_pulse
Definition: LedSetMessage.hh:87
crl::multisense::details::wire::CamConfig::autoExposureRoiX
uint16_t autoExposureRoiX
Definition: CamConfigMessage.hh:102
multisense::MultiSenseConfig::ImuConfig::gyroscope
std::optional< OperatingMode > gyroscope
Configuration for the onboard gyroscope.
Definition: MultiSenseTypes.hh:880
multisense::MultiSenseConfig::StereoConfig
Stereo specific configuration.
Definition: MultiSenseTypes.hh:483
crl::multisense::details::wire::AuxCamConfig::autoWhiteBalanceDecay
uint32_t autoWhiteBalanceDecay
Definition: AuxCamConfigMessage.hh:73
multisense::MultiSenseConfig::ManualWhiteBalanceConfig
Manual white balance specific configuration.
Definition: MultiSenseTypes.hh:626
multisense::MultiSenseConfig::LightingConfig::ExternalConfig::FlashMode::NONE
@ NONE
multisense::MultiSenseConfig::height
uint32_t height
The operating height of the MultiSense in pixels.
Definition: MultiSenseTypes.hh:1011
multisense
Definition: MultiSenseChannel.hh:44
multisense::ImuRange::range
float range
The max value the sensor can return.
Definition: MultiSenseTypes.hh:458
multisense::MultiSenseInfo::DeviceInfo::lighting_type
LightingType lighting_type
The type of lighting used in the MultiSense.
Definition: MultiSenseTypes.hh:1463
multisense::MultiSenseConfig::AuxConfig::sharpening_enabled
bool sharpening_enabled
Enable sharpening.
Definition: MultiSenseTypes.hh:744
crl::multisense::details::wire::AuxCamConfig::autoExposureTargetIntensity
float autoExposureTargetIntensity
Definition: AuxCamConfigMessage.hh:88
crl::multisense::details::wire::CamConfig::stereoPostFilterStrength
float stereoPostFilterStrength
Definition: CamConfigMessage.hh:92
crl::multisense::details::wire::LedStatus::rolling_shutter_led
uint8_t rolling_shutter_led
Definition: LedStatusMessage.hh:93
multisense::MultiSenseConfig::NetworkTransmissionConfig
Config for transmitting packets from the MultiSense to the host.
Definition: MultiSenseTypes.hh:814
crl::multisense::details::wire::SysPacketDelay::enable
bool enable
Definition: SysPacketDelayMessage.hh:55
multisense::MultiSenseConfig::LightingConfig::external
std::optional< ExternalConfig > external
The external lighting config.
Definition: MultiSenseTypes.hh:990
crl::multisense::details::wire::CamSetResolution::disparities
int32_t disparities
Definition: CamSetResolutionMessage.hh:64
crl::multisense::details::wire::CamConfig
Definition: CamConfigMessage.hh:54
crl::multisense::details::wire::AuxCamConfig::whiteBalanceRed
float whiteBalanceRed
Definition: AuxCamConfigMessage.hh:70
crl::multisense::details::wire::LedStatus::led_delay_us
uint32_t led_delay_us
Definition: LedStatusMessage.hh:74
crl::multisense::details::wire::LedSet::number_of_pulses
uint32_t number_of_pulses
Definition: LedSetMessage.hh:80
crl::multisense::details::wire::ImuConfig::samplesPerMessage
uint32_t samplesPerMessage
Definition: ImuConfigMessage.hh:82
crl::multisense::details::wire::LedSet::mask
uint8_t mask
Definition: LedSetMessage.hh:58
crl::multisense::details::wire::CamConfig::disparities
int32_t disparities
Definition: CamConfigMessage.hh:87
crl::multisense::details::wire::CamSetResolution
Definition: CamSetResolutionMessage.hh:50
crl::multisense::details::wire::ImuConfig::configs
std::vector< imu::Config > configs
Definition: ImuConfigMessage.hh:83
crl::multisense::details::wire::AuxCamConfig::gainMax
float gainMax
Definition: AuxCamConfigMessage.hh:95
crl::multisense::details::wire::CamConfig::gain
float gain
Definition: CamConfigMessage.hh:65
crl::multisense::details::wire::LedSet::rolling_shutter_led
uint8_t rolling_shutter_led
Definition: LedSetMessage.hh:93
multisense::MultiSenseConfig::width
uint32_t width
The operating width of the MultiSense in pixels.
Definition: MultiSenseTypes.hh:1005
multisense::MultiSenseConfig::LightingConfig
Lighting configuration for the camera.
Definition: MultiSenseTypes.hh:902
crl::multisense::details::wire::CamSetResolution::height
uint32_t height
Definition: CamSetResolutionMessage.hh:59
crl::multisense::details::wire::CamConfig::framesPerSecond
float framesPerSecond
Definition: CamConfigMessage.hh:64
multisense::MultiSenseConfig::MaxDisparities::D64
@ D64
64 pixels
multisense::MultiSenseConfig::MaxDisparities::D256
@ D256
256 pixels
crl::multisense::details::wire::AuxCamControl::sharpeningLimit
uint8_t sharpeningLimit
Definition: AuxCamControlMessage.hh:87
multisense::ImuRange
The range for each sensor along with the corresponding sampling resolution.
Definition: MultiSenseTypes.hh:453
multisense::MultiSenseConfig::AuxConfig::image_config
ImageConfig image_config
Image configuration for the Aux imager.
Definition: MultiSenseTypes.hh:739
multisense::MultiSenseInfo::ImuInfo::accelerometer
std::optional< Source > accelerometer
Configuration specific to the accelerometer.
Definition: MultiSenseTypes.hh:1609
create_valid_wire_aux_config
crl::multisense::details::wire::AuxCamConfig create_valid_wire_aux_config()
Definition: configuration_test.cc:154
create_valid_config
multisense::MultiSenseConfig create_valid_config(uint32_t width, uint32_t height)
Definition: configuration_test.cc:43
multisense::MultiSenseConfig::StereoConfig::postfilter_strength
float postfilter_strength
This is used to filter low confidence stereo data before it is sent to the host.
Definition: MultiSenseTypes.hh:490
crl::multisense::details::wire::CamConfig::autoExposureDecay
uint32_t autoExposureDecay
Definition: CamConfigMessage.hh:70
crl::multisense::details::wire::AuxCamControl::sharpeningEnable
bool sharpeningEnable
Definition: AuxCamControlMessage.hh:85
crl::multisense::details::wire::AuxCamConfig::exposure
uint32_t exposure
Definition: AuxCamConfigMessage.hh:64
multisense::MultiSenseConfig::LightingConfig::internal
std::optional< InternalConfig > internal
The internal lighting config.
Definition: MultiSenseTypes.hh:984
crl::multisense::details::wire::AuxCamConfig::autoExposureMax
uint32_t autoExposureMax
Definition: AuxCamConfigMessage.hh:66
crl::multisense::details::wire::CamConfig::gamma
float gamma
Definition: CamConfigMessage.hh:122
multisense::MultiSenseInfo::ImuInfo
Information about the IMU onboard the MultiSense.
Definition: MultiSenseTypes.hh:1578
create_valid_lighting_wire_config
crl::multisense::details::wire::LedStatus create_valid_lighting_wire_config()
Definition: configuration_test.cc:225
create_wire_packet_delay
crl::multisense::details::wire::SysPacketDelay create_wire_packet_delay()
Definition: configuration_test.cc:186
multisense::MultiSenseConfig
Complete configuration object for configuring the MultiSense.
Definition: MultiSenseTypes.hh:478
crl::multisense::details::wire::AuxCamConfig::autoExposureRoiX
uint16_t autoExposureRoiX
Definition: AuxCamConfigMessage.hh:81
crl::multisense::details::wire::CamControl::stereoPostFilterStrength
float stereoPostFilterStrength
Definition: CamControlMessage.hh:80
multisense::MultiSenseConfig::ImuConfig::samples_per_frame
uint32_t samples_per_frame
The number of IMU samples which should be included in a IMU frame.
Definition: MultiSenseTypes.hh:870
crl::multisense::details::wire::CamConfig::autoExposureRoiHeight
uint16_t autoExposureRoiHeight
Definition: CamConfigMessage.hh:105