85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
| /**
 | |
|  *  @file  testBearingFactor.cpp
 | |
|  *  @brief Unit tests for BearingFactor Class
 | |
|  *  @authors Frank Dellaert, Viorela Ila
 | |
|  **/
 | |
| 
 | |
| #include <boost/bind.hpp>
 | |
| #include <CppUnitLite/TestHarness.h>
 | |
| #include "numericalDerivative.h"
 | |
| #include "BearingFactor.h"
 | |
| 
 | |
| using namespace std;
 | |
| using namespace gtsam;
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| TEST( BearingFactor, relativeBearing )
 | |
| {
 | |
| 	Matrix expectedH, actualH;
 | |
| 
 | |
| 	// establish relativeBearing is indeed zero
 | |
| 	Point2 l1(1, 0);
 | |
| 	CHECK(assert_equal(Rot2(),relativeBearing(l1)));
 | |
| 
 | |
| 	// Check numerical derivative
 | |
| 	expectedH = numericalDerivative11(relativeBearing, l1, 1e-5);
 | |
| 	actualH = DrelativeBearing(l1);
 | |
| 	CHECK(assert_equal(expectedH,actualH));
 | |
| 
 | |
| 	// establish relativeBearing is indeed 45 degrees
 | |
| 	Point2 l2(1, 1);
 | |
| 	CHECK(assert_equal(Rot2(M_PI_4),relativeBearing(l2)));
 | |
| 
 | |
| 	// Check numerical derivative
 | |
| 	expectedH = numericalDerivative11(relativeBearing, l2, 1e-5);
 | |
| 	actualH = DrelativeBearing(l2);
 | |
| 	CHECK(assert_equal(expectedH,actualH));
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| TEST( BearingFactor, bearing )
 | |
| {
 | |
| 	Matrix expectedH1, actualH1, expectedH2, actualH2;
 | |
| 
 | |
| 	// establish bearing is indeed zero
 | |
| 	Pose2 x1;
 | |
| 	Point2 l1(1, 0);
 | |
| 	CHECK(assert_equal(Rot2(),bearing(x1,l1)));
 | |
| 
 | |
| 	// establish bearing is indeed 45 degrees
 | |
| 	Point2 l2(1, 1);
 | |
| 	CHECK(assert_equal(Rot2(M_PI_4),bearing(x1,l2)));
 | |
| 
 | |
| 	// establish bearing is indeed 45 degrees even if shifted
 | |
| 	Pose2 x2(1, 1, 0);
 | |
| 	Point2 l3(2, 2);
 | |
| 	CHECK(assert_equal(Rot2(M_PI_4),bearing(x2,l3)));
 | |
| 
 | |
| 	// Check numerical derivatives
 | |
| 	expectedH1 = numericalDerivative21(bearing, x2, l3, 1e-5);
 | |
| 	actualH1 = Dbearing1(x2, l3);
 | |
| 	CHECK(assert_equal(expectedH1,actualH1));
 | |
| 	expectedH2 = numericalDerivative22(bearing, x2, l3, 1e-5);
 | |
| 	actualH2 = Dbearing1(x2, l3);
 | |
| 	CHECK(assert_equal(expectedH1,actualH1));
 | |
| 
 | |
| 	// establish bearing is indeed 45 degrees even if rotated
 | |
| 	Pose2 x3(1, 1, M_PI_4);
 | |
| 	Point2 l4(1, 3);
 | |
| 	CHECK(assert_equal(Rot2(M_PI_4),bearing(x3,l4)));
 | |
| 
 | |
| 	// Check numerical derivatives, optional style
 | |
| 	expectedH1 = numericalDerivative21(bearing, x3, l4, 1e-5);
 | |
| 	expectedH2 = numericalDerivative22(bearing, x3, l4, 1e-5);
 | |
| 	bearing(x3, l4, actualH1, actualH2);
 | |
| 	CHECK(assert_equal(expectedH1,actualH1));
 | |
| 	CHECK(assert_equal(expectedH1,actualH1));
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| int main() {
 | |
| 	TestResult tr;
 | |
| 	return TestRegistry::runAllTests(tr);
 | |
| }
 | |
| /* ************************************************************************* */
 |