Go to the documentation of this file.00001 #include "../utest.h"
00002
00003 using namespace std;
00004 using namespace PointMatcherSupport;
00005
00006
00007
00008
00009
00010
00011
00012 class TransformationCheckerTest: public IcpHelper
00013 {
00014 public:
00015 PM::TransformationChecker* transformCheck;
00016
00017
00018 virtual void SetUp()
00019 {
00020 icp.setDefault();
00021
00022
00023
00024 icp.transformationCheckers.clear();
00025 }
00026
00027
00028 virtual void TearDown(){}
00029
00030 void addFilter(string name, PM::Parameters params)
00031 {
00032 transformCheck =
00033 PM::get().TransformationCheckerRegistrar.create(name, params);
00034
00035 icp.transformationCheckers.push_back(transformCheck);
00036 }
00037 };
00038
00039
00040 TEST_F(TransformationCheckerTest, CounterTransformationChecker)
00041 {
00042 addFilter("CounterTransformationChecker", map_list_of ("maxIterationCount", toParam(20)) );
00043 validate2dTransformation();
00044 }
00045
00046 TEST_F(TransformationCheckerTest, DifferentialTransformationChecker)
00047 {
00048 addFilter("DifferentialTransformationChecker", map_list_of
00049 ("minDiffRotErr", toParam(0.001))
00050 ("minDiffTransErr", toParam(0.001))
00051 ("smoothLength", toParam(4))
00052 );
00053 validate2dTransformation();
00054 }
00055
00056 TEST_F(TransformationCheckerTest, BoundTransformationChecker)
00057 {
00058
00059
00060
00061 PM::TransformationChecker* extraTransformCheck;
00062
00063 extraTransformCheck = PM::get().TransformationCheckerRegistrar.create(
00064 "CounterTransformationChecker"
00065 );
00066 icp.transformationCheckers.push_back(extraTransformCheck);
00067
00068 addFilter("BoundTransformationChecker", map_list_of
00069 ("maxRotationNorm", toParam(1.0))
00070 ("maxTranslationNorm", toParam(1.0))
00071 );
00072 validate2dTransformation();
00073 }
00074
00075
00076
00077
00078 TEST(Transformation, RigidTransformation)
00079 {
00080 PM::Transformation* rigidTrans;
00081 rigidTrans = PM::get().REG(Transformation).create("RigidTransformation");
00082
00083
00084
00085 PM::Matrix T_3D = PM::Matrix::Identity(4,4);
00086 T_3D(0,0) = 2.3;
00087 T_3D(0,1) = 0.03;
00088
00089 EXPECT_FALSE(rigidTrans->checkParameters(T_3D));
00090
00091 EXPECT_THROW(rigidTrans->compute(data3D, T_3D), TransformationError);
00092
00093
00094 for(int i = 0; i < 10; i++)
00095 {
00096 T_3D = rigidTrans->correctParameters(T_3D);
00097 EXPECT_TRUE(rigidTrans->checkParameters(T_3D));
00098 }
00099
00100
00101
00102 PM::Matrix T_2D = PM::Matrix::Identity(3,3);
00103 T_2D(1,0) = 8.99;
00104 T_2D(0,1) = 4.03;
00105
00106 EXPECT_FALSE(rigidTrans->checkParameters(T_2D));
00107
00108 EXPECT_THROW(rigidTrans->compute(data2D, T_2D), TransformationError);
00109
00110
00111 for(int i = 0; i < 10; i++)
00112 {
00113 T_2D = rigidTrans->correctParameters(T_2D);
00114 EXPECT_TRUE(rigidTrans->checkParameters(T_2D));
00115 }
00116
00117 }