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);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 |