4 #include <assetloading/XmlUtils.h>
5 #include <assetloading/XmlSceneLoader.h>
6 #include <assetloading/XmlAssetsLoader.h>
7 #include <assetloading/XmlSurveyLoader.h>
8 #include <scanner/beamDeflector/OscillatingMirrorBeamDeflector.h>
9 #include <scanner/beamDeflector/ConicBeamDeflector.h>
10 #include <scanner/beamDeflector/PolygonMirrorBeamDeflector.h>
11 #include <scanner/beamDeflector/RisleyBeamDeflector.h>
12 #include <scanner/SingleScanner.h>
13 #include <scanner/MultiScanner.h>
14 #include <platform/Platform.h>
15 #include <platform/HelicopterPlatform.h>
16 #include <platform/LinearPathPlatform.h>
17 #include <platform/GroundVehiclePlatform.h>
18 #include <noise/NoiseSource.h>
19 #include <noise/NormalNoiseSource.h>
20 #include <noise/UniformNoiseSource.h>
23 namespace HeliosTests{
37 double const eps = 0.00001;
112 catch(std::exception &ex){
123 std::string testScannersPath =
"data/test/test_scanners.xml";
124 std::string assetsPath =
"assets/";
127 std::shared_ptr<Scanner> scanner = std::static_pointer_cast<Scanner>(
130 if(std::dynamic_pointer_cast<SingleScanner>(scanner)==
nullptr)
132 if(std::dynamic_pointer_cast<MultiScanner>(scanner)!=
nullptr)
134 if(scanner->getScannerId() !=
"leica_als50")
return false;
135 if(scanner->getDetector()->cfg_device_accuracy_m != 0.05)
return false;
136 if(scanner->getBeamDivergence() != 0.00033)
return false;
137 if(scanner->name !=
"Leica ALS50")
return false;
139 std::dynamic_pointer_cast<OscillatingMirrorBeamDeflector>(
140 scanner->getBeamDeflector()
143 std::list<int> &pfs = scanner->getSupportedPulseFreqs_Hz();
144 if(pfs.size() != 1)
return false;
145 if(pfs.front() != 83000)
return false;
146 if(scanner->getPulseFreq_Hz() != 83000)
return false;
147 if(scanner->getPulseLength_ns() != 10)
return false;
148 if(scanner->getDetector()->cfg_device_rangeMin_m != 200)
return false;
150 scanner->getBeamDeflector()->cfg_device_scanAngleMax_rad-0.6544985
153 if(scanner->getBeamDeflector()->cfg_device_scanFreqMin_Hz != 25)
155 if(scanner->getBeamDeflector()->cfg_device_scanFreqMax_Hz != 70)
158 scanner = std::static_pointer_cast<Scanner>(
159 loader.
getAssetById(
"scanner",
"leica_als50-ii",
nullptr)
161 if(std::dynamic_pointer_cast<SingleScanner>(scanner)==
nullptr)
163 if(std::dynamic_pointer_cast<MultiScanner>(scanner)!=
nullptr)
165 if(scanner->getScannerId() !=
"leica_als50-ii")
return false;
166 if(scanner->getDetector()->cfg_device_accuracy_m != 0.05)
return false;
167 if(scanner->getBeamDivergence() != 0.00022)
return false;
168 if(scanner->name !=
"Leica ALS50-II")
return false;
170 std::dynamic_pointer_cast<OscillatingMirrorBeamDeflector>(
171 scanner->getBeamDeflector()
174 pfs = scanner->getSupportedPulseFreqs_Hz();
175 if(pfs.size() != 3)
return false;
176 std::list<int>::iterator pfsit = pfs.begin();
177 if(*pfsit != 20000)
return false;
179 if(*pfsit != 60000)
return false;
181 if(*pfsit != 150000)
return false;
182 if(scanner->getPulseFreq_Hz() != 20000)
return false;
183 if(scanner->getPulseLength_ns() != 10)
return false;
184 if(scanner->getDetector()->cfg_device_rangeMin_m != 200)
return false;
186 scanner->getBeamDeflector()->cfg_device_scanAngleMax_rad-0.6544985
189 if(scanner->getBeamDeflector()->cfg_device_scanFreqMin_Hz != 0)
191 if(scanner->getBeamDeflector()->cfg_device_scanFreqMax_Hz != 90)
193 if(scanner->getMaxNOR() != 4)
return false;
195 scanner = std::static_pointer_cast<Scanner>(
198 if(std::dynamic_pointer_cast<SingleScanner>(scanner)==
nullptr)
200 if(std::dynamic_pointer_cast<MultiScanner>(scanner)!=
nullptr)
202 if(scanner->getScannerId() !=
"optech_2033")
return false;
203 if(scanner->getDetector()->cfg_device_accuracy_m != 0.01)
return false;
204 if(scanner->getBeamDivergence() != 0.000424)
return false;
205 if(scanner->name !=
"Optech ALTM 2033")
return false;
207 std::dynamic_pointer_cast<OscillatingMirrorBeamDeflector>(
208 scanner->getBeamDeflector()
211 pfs = scanner->getSupportedPulseFreqs_Hz();
212 if(pfs.size() != 1)
return false;
213 if(pfs.front() != 33000)
return false;
214 if(scanner->getPulseLength_ns() != 8)
return false;
215 if(scanner->getDetector()->cfg_device_rangeMin_m != 1)
return false;
217 scanner->getBeamDeflector()->cfg_device_scanAngleMax_rad-0.3490659
220 if(scanner->getBeamDeflector()->cfg_device_scanFreqMin_Hz!=0)
return false;
221 if(scanner->getBeamDeflector()->cfg_device_scanFreqMax_Hz!=30)
224 std::dynamic_pointer_cast<OscillatingMirrorBeamDeflector>(
225 scanner->getBeamDeflector()
226 )->cfg_device_scanProduct != 590
228 if(scanner->getWavelength() != 1047e-9)
return false;
229 glm::dvec3 epdiff = scanner->getHeadRelativeEmitterPosition()
230 - glm::dvec3(0, 0.085, 0.06);
232 std::fabs(epdiff[0]) >
eps ||
233 std::fabs(epdiff[1]) >
eps ||
234 std::fabs(epdiff[2]) >
eps
236 Rotation eatt = scanner->getHeadRelativeEmitterAttitude();
241 glm::dvec3 eraxis = scanner->getScannerHead()->cfg_device_rotateAxis;
242 if(eraxis[0] != 0 || eraxis[1] != 0 || eraxis[2] != 1)
return false;
244 scanner = std::static_pointer_cast<Scanner>(
247 if(std::dynamic_pointer_cast<SingleScanner>(scanner)==
nullptr)
249 if(std::dynamic_pointer_cast<MultiScanner>(scanner)!=
nullptr)
251 if(scanner->getScannerId() !=
"riegl_lms-q560")
return false;
252 if(scanner->getDetector()->cfg_device_accuracy_m != 0.02)
return false;
253 if(scanner->getBeamDivergence() != 0.0005)
return false;
254 if(scanner->name !=
"RIEGL LMS-Q560")
return false;
256 std::dynamic_pointer_cast<PolygonMirrorBeamDeflector>(
257 scanner->getBeamDeflector()
260 pfs = scanner->getSupportedPulseFreqs_Hz();
261 if(pfs.size() != 5)
return false;
263 if(*pfsit != 50000){
return false;} ++pfsit;
264 if(*pfsit != 100000){
return false;} ++pfsit;
265 if(*pfsit != 180000){
return false;} ++pfsit;
266 if(*pfsit != 200000){
return false;} ++pfsit;
267 if(*pfsit != 240000){
return false;} ++pfsit;
268 if(scanner->getPulseLength_ns() != 4)
return false;
270 scanner->getBeamDeflector()->cfg_device_scanAngleMax_rad-0.7853982
274 std::dynamic_pointer_cast<PolygonMirrorBeamDeflector>(
275 scanner->getBeamDeflector()
276 )->getScanAngleEffectiveMax_rad() - 0.3926991
279 if(scanner->getBeamDeflector()->cfg_device_scanFreqMin_Hz != 10)
281 if(scanner->getBeamDeflector()->cfg_device_scanFreqMax_Hz != 160)
284 scanner = std::static_pointer_cast<Scanner>(
285 loader.
getAssetById(
"scanner",
"riegl_vq-880g",
nullptr)
287 if(std::dynamic_pointer_cast<SingleScanner>(scanner)==
nullptr)
289 if(std::dynamic_pointer_cast<MultiScanner>(scanner)!=
nullptr)
291 if(scanner->getScannerId() !=
"riegl_vq-880g")
return false;
292 if(scanner->getDetector()->cfg_device_accuracy_m != 0.025)
return false;
293 if(scanner->getBeamDivergence() != 0.0003)
return false;
294 if(scanner->name !=
"RIEGL VQ-880-G")
return false;
296 std::dynamic_pointer_cast<ConicBeamDeflector>(
297 scanner->getBeamDeflector()
300 pfs = scanner->getSupportedPulseFreqs_Hz();
301 if(pfs.size()!=4)
return false;
303 if(*pfsit != 150000){
return false;} ++pfsit;
304 if(*pfsit != 300000){
return false;} ++pfsit;
305 if(*pfsit != 600000){
return false;} ++pfsit;
306 if(*pfsit != 900000){
return false;} ++pfsit;
307 if(scanner->getPulseLength_ns() != 2)
return false;
309 scanner->getBeamDeflector()->cfg_device_scanAngleMax_rad-0.3490659
312 if(scanner->getBeamDeflector()->cfg_device_scanFreqMin_Hz != 28)
314 if(scanner->getBeamDeflector()->cfg_device_scanFreqMax_Hz != 200)
316 if(std::fabs(scanner->getWavelength()-1064e-9) >
eps)
return false;
317 epdiff = scanner->getHeadRelativeEmitterPosition()
318 - glm::dvec3(0, 0.085, 0.06);
320 std::fabs(epdiff[0]) >
eps ||
321 std::fabs(epdiff[1]) >
eps ||
322 std::fabs(epdiff[2]) >
eps
324 eatt = scanner->getHeadRelativeEmitterAttitude();
329 eraxis = scanner->getScannerHead()->cfg_device_rotateAxis;
330 if(eraxis[0] != 0 || eraxis[1] != 0 || eraxis[2] != 1)
return false;
332 scanner = std::static_pointer_cast<Scanner>(
335 if(std::dynamic_pointer_cast<SingleScanner>(scanner)==
nullptr)
337 if(std::dynamic_pointer_cast<MultiScanner>(scanner)!=
nullptr)
339 if(scanner->getScannerId() !=
"livox_mid-70")
return false;
340 if(scanner->getDetector()->cfg_device_accuracy_m != 0.02)
return false;
341 if(scanner->getBeamDivergence() != 0.004887)
return false;
342 if(scanner->name !=
"Livox Mid-70")
return false;
344 std::dynamic_pointer_cast<RisleyBeamDeflector>(
345 scanner->getBeamDeflector()
348 pfs = scanner->getSupportedPulseFreqs_Hz();
349 if(pfs.size() != 1)
return false;
350 if(pfs.front() != 100000)
return false;
351 if(scanner->getPulseLength_ns() != 4)
return false;
352 if(scanner->getDetector()->cfg_device_rangeMin_m != 2)
return false;
354 scanner->getBeamDeflector()->cfg_device_scanAngleMax_rad-0.6108652
358 std::dynamic_pointer_cast<RisleyBeamDeflector>(
359 scanner->getBeamDeflector()
360 )->rotorSpeed_rad_1 - 1160.876155
364 std::dynamic_pointer_cast<RisleyBeamDeflector>(
365 scanner->getBeamDeflector()
366 )->rotorSpeed_rad_2 + 742.298655
369 if(std::fabs(scanner->getWavelength()-905e-9) >
eps)
return false;
370 if(scanner->getMaxNOR() != 1)
return false;
371 if(scanner->getFWFSettings().beamSampleQuality != 3)
return false;
372 epdiff = scanner->getHeadRelativeEmitterPosition();
374 std::fabs(epdiff[0]) >
eps ||
375 std::fabs(epdiff[1]) >
eps ||
376 std::fabs(epdiff[2]) >
eps
378 eatt = scanner->getHeadRelativeEmitterAttitude();
383 eraxis = scanner->getScannerHead()->cfg_device_rotateAxis;
384 if(eraxis[0] != 1 || eraxis[1] != 0 || eraxis[2] != 0)
return false;
386 scanner = std::static_pointer_cast<Scanner>(
387 loader.
getAssetById(
"scanner",
"livox-mid-100",
nullptr)
389 if(std::dynamic_pointer_cast<SingleScanner>(scanner) !=
nullptr)
391 if(std::dynamic_pointer_cast<MultiScanner>(scanner) ==
nullptr)
393 if(scanner->getScannerId() !=
"livox-mid-100")
return false;
394 if(scanner->getDetector(0)->cfg_device_accuracy_m != 0.02)
return false;
395 if(scanner->getDetector(1)->cfg_device_accuracy_m != 0.03)
return false;
396 if(scanner->getDetector(2)->cfg_device_accuracy_m != 0.02)
return false;
397 if(scanner->getBeamDivergence(0) != 0.0027)
return false;
398 if(scanner->getBeamDivergence(1) != 0.0027)
return false;
399 if(scanner->getBeamDivergence(2) != 0.0027)
return false;
400 if( std::dynamic_pointer_cast<RisleyBeamDeflector>(
401 scanner->getBeamDeflector(0)
404 if( std::dynamic_pointer_cast<RisleyBeamDeflector>(
405 scanner->getBeamDeflector(1)
408 if( std::dynamic_pointer_cast<RisleyBeamDeflector>(
409 scanner->getBeamDeflector(2)
412 if( std::dynamic_pointer_cast<ConicBeamDeflector>(
413 scanner->getBeamDeflector(2)
416 pfs = scanner->getSupportedPulseFreqs_Hz();
417 if(pfs.size() != 1)
return false;
418 if(pfs.front() != 50000)
return false;
419 if(scanner->getPulseLength_ns(0) != 4)
return false;
420 if(scanner->getPulseLength_ns(1) != 4)
return false;
421 if(scanner->getPulseLength_ns(2) != 4)
return false;
422 if(scanner->getDetector(0)->cfg_device_rangeMin_m != 2)
return false;
423 if(scanner->getDetector(1)->cfg_device_rangeMin_m != 2)
return false;
424 if(scanner->getDetector(2)->cfg_device_rangeMin_m != 2)
return false;
426 scanner->getBeamDeflector(0)->cfg_device_scanAngleMax_rad-0.6108652
430 scanner->getBeamDeflector(1)->cfg_device_scanAngleMax_rad-0.6108652
434 scanner->getBeamDeflector(2)->cfg_device_scanAngleMax_rad-0.6108652
438 std::dynamic_pointer_cast<RisleyBeamDeflector>(
439 scanner->getBeamDeflector(0)
440 )->rotorSpeed_rad_1 - 1114.084602
444 std::dynamic_pointer_cast<RisleyBeamDeflector>(
445 scanner->getBeamDeflector(1)
446 )->rotorSpeed_rad_1 - 1160.876155
450 std::dynamic_pointer_cast<RisleyBeamDeflector>(
451 scanner->getBeamDeflector(0)
452 )->rotorSpeed_rad_2 + 636.6197724
456 std::dynamic_pointer_cast<RisleyBeamDeflector>(
457 scanner->getBeamDeflector(1)
458 )->rotorSpeed_rad_2 + 742.298655
461 if(std::fabs(scanner->getWavelength(0)-905e-9) >
eps)
return false;
462 if(std::fabs(scanner->getWavelength(1)-905e-9) >
eps)
return false;
463 if(std::fabs(scanner->getWavelength(2)-905e-9) >
eps)
return false;
464 if(scanner->getFWFSettings(0).beamSampleQuality != 2)
return false;
465 if(scanner->getFWFSettings(1).beamSampleQuality != 3)
return false;
466 if(scanner->getFWFSettings(2).beamSampleQuality != 4)
return false;
467 epdiff = scanner->getHeadRelativeEmitterPosition(0)-glm::dvec3(0, 0, 0.1);
469 std::fabs(epdiff[0]) >
eps ||
470 std::fabs(epdiff[1]) >
eps ||
471 std::fabs(epdiff[2]) >
eps
473 epdiff = scanner->getHeadRelativeEmitterPosition(1) -
474 glm::dvec3(0, 0, -0.1);
476 std::fabs(epdiff[0]) >
eps ||
477 std::fabs(epdiff[1]) >
eps ||
478 std::fabs(epdiff[2]) >
eps
480 epdiff = scanner->getHeadRelativeEmitterPosition(2);
482 std::fabs(epdiff[0]) >
eps ||
483 std::fabs(epdiff[1]) >
eps ||
484 std::fabs(epdiff[2]) >
eps
486 eatt = scanner->getHeadRelativeEmitterAttitude(0);
488 std::fabs(eatt.
getQ0()-0.965926) >
eps ||
491 std::fabs(eatt.
getQ3()-0.258819) >
eps
493 eatt = scanner->getHeadRelativeEmitterAttitude(1);
500 eatt = scanner->getHeadRelativeEmitterAttitude(2);
502 std::fabs(eatt.
getQ0()-0.965926) >
eps ||
505 std::fabs(eatt.
getQ3()+0.258819) >
eps
507 eraxis = scanner->getScannerHead(0)->cfg_device_rotateAxis;
508 if(eraxis[0] != 1 || eraxis[1] != 0 || eraxis[2] != 0)
return false;
509 eraxis = scanner->getScannerHead(1)->cfg_device_rotateAxis;
510 if(eraxis[0] != 0 || eraxis[1] != 1 || eraxis[2] != 0)
return false;
511 eraxis = scanner->getScannerHead(2)->cfg_device_rotateAxis;
512 if(eraxis[0] != 0 || eraxis[1] != 1 || eraxis[2] != 0)
return false;
515 scanner = std::dynamic_pointer_cast<Scanner>(loader.
getAssetById(
516 "scanner",
"_unexistent_scanner_",
nullptr
526 std::string testPlatformsPath =
"data/test/test_platforms.xml";
527 std::string assetsPath =
"assets/";
530 std::shared_ptr<Platform> platf = std::dynamic_pointer_cast<Platform>(
533 std::shared_ptr<HelicopterPlatform> hplatf = std::dynamic_pointer_cast<
536 if(hplatf ==
nullptr)
return false;
537 if(platf->name !=
"Quadrocopter UAV")
return false;
538 if(hplatf->mCfg_drag != 0.0099)
return false;
539 if(hplatf->ef_xy_max != 0.099)
return false;
540 if(hplatf->cfg_speedup_magnitude != 1.99)
return false;
541 if(hplatf->cfg_slowdown_magnitude != 1.99)
return false;
542 if(hplatf->cfg_slowdown_dist_xy != 4.99)
return false;
543 if(std::fabs(hplatf->cfg_pitch_base+0.0959931) >
eps)
return false;
544 if(std::fabs(hplatf->cfg_roll_speed-0.5087635) >
eps)
return false;
545 if(std::fabs(hplatf->cfg_pitch_speed-1.5086626) >
eps)
return false;
546 if(std::fabs(hplatf->cfg_yaw_speed-1.4999360) >
eps)
return false;
547 if(std::fabs(hplatf->cfg_max_roll_offset-0.4433136) >
eps)
return false;
548 if(std::fabs(hplatf->cfg_max_pitch_offset-0.6038839) >
eps)
return false;
553 std::fabs(mpdiff[0]) >
eps ||
554 std::fabs(mpdiff[1]) >
eps ||
555 std::fabs(mpdiff[2]) >
eps
557 Rotation matt = platf->cfg_device_relativeMountAttitude;
565 platf = std::dynamic_pointer_cast<Platform>(loader.
getAssetById(
566 "platform",
"sr22",
nullptr
568 if(platf->name !=
"Cirrus SR-22")
return false;
569 mpdiff = platf->cfg_device_relativeMountPosition - glm::dvec3(0, 0, 0.7);
571 std::fabs(mpdiff[0]) >
eps ||
572 std::fabs(mpdiff[1]) >
eps ||
573 std::fabs(mpdiff[2]) >
eps
575 matt = platf->cfg_device_relativeMountAttitude;
577 std::fabs(matt.
getQ0()-0.5) >
eps ||
578 std::fabs(matt.
getQ1()-0.5) >
eps ||
579 std::fabs(matt.
getQ2()-0.5) >
eps ||
582 if(platf->positionXNoiseSource->getClipMin()!=0.0)
return false;
583 if(platf->positionXNoiseSource->getClipMax()!=0.0)
return false;
584 if(platf->positionXNoiseSource->isClipEnabled())
return false;
585 if(platf->positionXNoiseSource->getFixedLifespan()!=5)
return false;
586 std::shared_ptr<NormalNoiseSource<double>> nns = std::dynamic_pointer_cast<
588 >(platf->positionXNoiseSource);
589 if(nns ==
nullptr)
return false;
591 platf->positionXNoiseSource
594 if(nns->getMean()!=0.01)
return false;
595 if(nns->getStdev()!=0.021)
return false;
596 if(platf->positionYNoiseSource->getClipMin()!=-0.01)
return false;
597 if(platf->positionYNoiseSource->getClipMax()!=0.0)
return false;
598 if(platf->positionYNoiseSource->isClipEnabled())
return false;
599 if(platf->positionYNoiseSource->getFixedLifespan()!=7)
return false;
600 nns = std::dynamic_pointer_cast<NormalNoiseSource<double>>(
601 platf->positionYNoiseSource);
602 if(nns ==
nullptr)
return false;
604 platf->positionYNoiseSource
607 if(nns->getMean()!=-0.01)
return false;
608 if(nns->getStdev()!=0.019)
return false;
609 if(platf->positionZNoiseSource->getClipMin()!=-0.03)
return false;
610 if(platf->positionZNoiseSource->getClipMax()!=0.03)
return false;
611 if(!platf->positionZNoiseSource->isClipEnabled())
return false;
612 if(platf->positionZNoiseSource->getFixedLifespan()!=1)
return false;
613 nns = std::dynamic_pointer_cast<NormalNoiseSource<double>>(
614 platf->positionZNoiseSource);
615 if(nns ==
nullptr)
return false;
617 platf->positionZNoiseSource
620 if(nns->getMean()!=0.0)
return false;
621 if(nns->getStdev()!=0.02)
return false;
622 if(platf->attitudeXNoiseSource->getClipMin()!=0.0)
return false;
623 if(platf->attitudeXNoiseSource->getClipMax()!=0.0)
return false;
624 if(platf->attitudeXNoiseSource->isClipEnabled())
return false;
625 if(platf->attitudeXNoiseSource->getFixedLifespan()!=1)
return false;
626 nns = std::dynamic_pointer_cast<NormalNoiseSource<double>>(
627 platf->attitudeXNoiseSource
629 if(nns ==
nullptr)
return false;
631 platf->attitudeXNoiseSource
634 if(nns->getMean()!=0.0)
return false;
635 if(nns->getStdev()!=0.001)
return false;
636 if(platf->attitudeYNoiseSource->getClipMin()!=0.0)
return false;
637 if(platf->attitudeYNoiseSource->getClipMax()!=0.0)
return false;
638 if(platf->attitudeYNoiseSource->isClipEnabled())
return false;
639 if(platf->attitudeYNoiseSource->getFixedLifespan()!=3)
return false;
640 nns = std::dynamic_pointer_cast<NormalNoiseSource<double>>(
641 platf->attitudeYNoiseSource
643 if(nns ==
nullptr)
return false;
645 platf->attitudeYNoiseSource
648 if(nns->getMean()!=0.0)
return false;
649 if(nns->getStdev()!=0.001)
return false;
650 if(platf->attitudeZNoiseSource->getClipMin()!=0.0)
return false;
651 if(platf->attitudeZNoiseSource->getClipMax()!=0.0)
return false;
652 if(platf->attitudeZNoiseSource->isClipEnabled())
return false;
653 if(platf->attitudeZNoiseSource->getFixedLifespan()!=11)
return false;
654 nns = std::dynamic_pointer_cast<NormalNoiseSource<double>>(
655 platf->attitudeZNoiseSource
657 if(nns ==
nullptr)
return false;
659 platf->attitudeZNoiseSource
662 if(nns->getMean()!=0.0)
return false;
663 if(nns->getStdev()!=0.001)
return false;
665 platf = std::dynamic_pointer_cast<Platform>(loader.
getAssetById(
666 "platform",
"tractor"
668 if(platf->name !=
"Tractor")
return false;
669 mpdiff = platf->cfg_device_relativeMountPosition - glm::dvec3(0, 1, 4);
671 std::fabs(mpdiff[0]) >
eps ||
672 std::fabs(mpdiff[1]) >
eps ||
673 std::fabs(mpdiff[2]) >
eps
675 matt = platf->cfg_device_relativeMountAttitude;
677 std::fabs(matt.
getQ0()-0.6830127) >
eps ||
678 std::fabs(matt.
getQ1()+0.1830127) >
eps ||
679 std::fabs(matt.
getQ2()-0.1830127) >
eps ||
680 std::fabs(matt.
getQ3()+0.6830127) >
eps
682 std::shared_ptr<GroundVehiclePlatform> gplatf = std::dynamic_pointer_cast<
684 if(gplatf ==
nullptr)
return false;
685 if(gplatf->mCfg_drag != 0.00499)
return false;
687 platf = std::dynamic_pointer_cast<Platform>(
690 if(platf->name !=
"TLS Tripod")
return false;
691 mpdiff = platf->cfg_device_relativeMountPosition - glm::dvec3(0, 0, 1.5);
693 std::fabs(mpdiff[0]) >
eps ||
694 std::fabs(mpdiff[1]) >
eps ||
695 std::fabs(mpdiff[2]) >
eps
Base class for Helios exceptions.
Definition: HeliosException.h:12
Asset loading tests.
Definition: AssetLoadingTest.h:30
double const eps
Decimal precision tolerance.
Definition: AssetLoadingTest.h:37
bool testSceneLoading()
Test scene loading.
Definition: AssetLoadingTest.h:720
bool testObjLoading()
Test Wavefront OBJ loading.
Definition: AssetLoadingTest.h:700
bool testScannerLoading()
Test scanner loading.
Definition: AssetLoadingTest.h:121
bool testSurveyLoading()
Test survey loading.
Definition: AssetLoadingTest.h:725
bool testDetailedVoxelLoading()
Test detailed voxel loading.
Definition: AssetLoadingTest.h:710
bool testTiffLoading()
Test TIFF loading.
Definition: AssetLoadingTest.h:715
AssetLoadingTest()
Asset loading test constructor.
Definition: AssetLoadingTest.h:44
bool testPlatformLoading()
Test platform loading.
Definition: AssetLoadingTest.h:524
bool run() override
Definition: AssetLoadingTest.h:100
bool testVoxelLoading()
Test voxel loading.
Definition: AssetLoadingTest.h:705
BaseTest class.
Definition: BaseTest.h:20
Class for normal noise handling.
Definition: NormalNoiseSource.h:16
Definition: Rotation.h:80
double getQ2() const
Get the second coordinate of the vectorial part of the quaternion.
Definition: Rotation.h:130
double getQ1() const
Get the first coordinate of the vectorial part of the quaternion.
Definition: Rotation.h:122
double getQ3() const
Get the third coordinate of the vectorial part of the quaternion.
Definition: Rotation.h:137
double getQ0() const
Get the scalar coordinate of the quaternion.
Definition: Rotation.h:115
Class for asset loading from XML file.
Definition: XmlAssetsLoader.h:28
std::shared_ptr< Asset > getAssetById(std::string type, std::string id, void *extraOutput=nullptr)
Get asset by its identifier.
Definition: XmlAssetsLoader.cpp:1546