104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
| /* ----------------------------------------------------------------------------
 | |
| 
 | |
|  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
 | |
|  * Atlanta, Georgia 30332-0415
 | |
|  * All Rights Reserved
 | |
|  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
 | |
| 
 | |
|  * See LICENSE for the license information
 | |
| 
 | |
|  * -------------------------------------------------------------------------- */
 | |
| 
 | |
| /**
 | |
|  *  @file  testEvent.cpp
 | |
|  *  @brief Unit tests for space time "Event"
 | |
|  *  @author Frank Dellaert
 | |
|  *  @author Jay Chakravarty
 | |
|  *  @date December 2014
 | |
|  */
 | |
| 
 | |
| #include <gtsam/base/numericalDerivative.h>
 | |
| #include <gtsam/nonlinear/Expression.h>
 | |
| #include <gtsam_unstable/geometry/Event.h>
 | |
| 
 | |
| #include <CppUnitLite/TestHarness.h>
 | |
| 
 | |
| using namespace std::placeholders;
 | |
| using namespace std;
 | |
| using namespace gtsam;
 | |
| 
 | |
| // Create a noise model for the TOA error
 | |
| static const double ms = 1e-3;
 | |
| static const double cm = 1e-2;
 | |
| typedef Eigen::Matrix<double, 1, 1> Vector1;
 | |
| static SharedNoiseModel model(noiseModel::Isotropic::Sigma(1, 0.5 * ms));
 | |
| 
 | |
| static const double timeOfEvent = 25;
 | |
| static const Event exampleEvent(timeOfEvent, 1, 0, 0);
 | |
| static const Point3 microphoneAt0(0, 0, 0);
 | |
| 
 | |
| static const double kSpeedOfSound = 340;
 | |
| static const TimeOfArrival kToa(kSpeedOfSound);
 | |
| 
 | |
| //*****************************************************************************
 | |
| TEST(Event, Constructor) {
 | |
|   const double t = 0;
 | |
|   Event actual(t, 201.5 * cm, 201.5 * cm, (212 - 45) * cm);
 | |
| }
 | |
| 
 | |
| //*****************************************************************************
 | |
| TEST(Event, Toa1) {
 | |
|   Event event(0, 1, 0, 0);
 | |
|   double expected = 1. / kSpeedOfSound;
 | |
|   EXPECT_DOUBLES_EQUAL(expected, kToa(event, microphoneAt0), 1e-9);
 | |
| }
 | |
| 
 | |
| //*****************************************************************************
 | |
| TEST(Event, Toa2) {
 | |
|   double expectedTOA = timeOfEvent + 1. / kSpeedOfSound;
 | |
|   EXPECT_DOUBLES_EQUAL(expectedTOA, kToa(exampleEvent, microphoneAt0), 1e-9);
 | |
| }
 | |
| 
 | |
| //*************************************************************************
 | |
| TEST(Event, Derivatives) {
 | |
|   Matrix14 actualH1;
 | |
|   Matrix13 actualH2;
 | |
|   kToa(exampleEvent, microphoneAt0, actualH1, actualH2);
 | |
|   Matrix expectedH1 = numericalDerivative11<double, Event>(
 | |
|       std::bind(kToa, std::placeholders::_1, microphoneAt0, nullptr, nullptr),
 | |
|       exampleEvent);
 | |
|   EXPECT(assert_equal(expectedH1, actualH1, 1e-8));
 | |
|   Matrix expectedH2 = numericalDerivative11<double, Point3>(
 | |
|       std::bind(kToa, exampleEvent, std::placeholders::_1, nullptr, nullptr),
 | |
|       microphoneAt0);
 | |
|   EXPECT(assert_equal(expectedH2, actualH2, 1e-8));
 | |
| }
 | |
| 
 | |
| //*****************************************************************************
 | |
| TEST(Event, Expression) {
 | |
|   Key key = 12;
 | |
|   Expression<Event> event_(key);
 | |
|   Expression<Point3> knownMicrophone_(microphoneAt0);  // constant expression
 | |
|   Expression<double> expression(kToa, event_, knownMicrophone_);
 | |
| 
 | |
|   Values values;
 | |
|   values.insert(key, exampleEvent);
 | |
|   double expectedTOA = timeOfEvent + 1. / kSpeedOfSound;
 | |
|   EXPECT_DOUBLES_EQUAL(expectedTOA, expression.value(values), 1e-9);
 | |
| }
 | |
| 
 | |
| //*****************************************************************************
 | |
| TEST(Event, Retract) {
 | |
|   Event event, expected(1, 2, 3, 4);
 | |
|   Vector4 v;
 | |
|   v << 1, 2, 3, 4;
 | |
|   EXPECT(assert_equal(expected, event.retract(v)));
 | |
| }
 | |
| 
 | |
| //*****************************************************************************
 | |
| int main() {
 | |
|   TestResult tr;
 | |
|   return TestRegistry::runAllTests(tr);
 | |
| }
 | |
| //*****************************************************************************
 |