101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			3.3 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_unstable/geometry/Event.h>
 | ||
|  | #include <gtsam/base/numericalDerivative.h>
 | ||
|  | #include <gtsam/nonlinear/Expression.h>
 | ||
|  | #include <CppUnitLite/TestHarness.h>
 | ||
|  | #include <boost/bind.hpp>
 | ||
|  | 
 | ||
|  | 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; | ||
|  | 
 | ||
|  | //*****************************************************************************
 | ||
|  | 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 / Event::Speed; | ||
|  |   EXPECT_DOUBLES_EQUAL(expected, event.toa(microphoneAt0), 1e-9); | ||
|  | } | ||
|  | 
 | ||
|  | //*****************************************************************************
 | ||
|  | TEST( Event, Toa2 ) { | ||
|  |   double expectedTOA = timeOfEvent + 1 / Event::Speed; | ||
|  |   EXPECT_DOUBLES_EQUAL(expectedTOA, exampleEvent.toa(microphoneAt0), 1e-9); | ||
|  | } | ||
|  | 
 | ||
|  | //*************************************************************************
 | ||
|  | TEST (Event, Derivatives) { | ||
|  |   Matrix14 actualH1; | ||
|  |   Matrix13 actualH2; | ||
|  |   exampleEvent.toa(microphoneAt0, actualH1, actualH2); | ||
|  |   Matrix expectedH1 = numericalDerivative11<double, Event>( | ||
|  |       boost::bind(&Event::toa, _1, microphoneAt0, boost::none, boost::none), | ||
|  |       exampleEvent); | ||
|  |   EXPECT(assert_equal(expectedH1, actualH1, 1e-8)); | ||
|  |   Matrix expectedH2 = numericalDerivative11<double, Point3>( | ||
|  |       boost::bind(&Event::toa, exampleEvent, _1, boost::none, boost::none), | ||
|  |       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(&Event::toa, event_, knownMicrophone_); | ||
|  | 
 | ||
|  |   Values values; | ||
|  |   values.insert(key, exampleEvent); | ||
|  |   double expectedTOA = timeOfEvent + 1 / Event::Speed; | ||
|  |   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); | ||
|  | } | ||
|  | //*****************************************************************************
 | ||
|  | 
 |