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


multisense_lib
Author(s):
autogenerated on Thu Apr 17 2025 02:49:08