00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 #include <robot/control/kinematics/IKORFullSpaceSolverTest>
00026 
00027 using robot::control::kinematics::IKORFullSpaceSolverTest;
00028 
00029 
00030 
00031 using base::equals;
00032 using robot::control::kinematics::IKORFullSpaceSolver;
00033 
00034 
00035 IKORFullSpaceSolverTest::IKORFullSpaceSolverTest()
00036 {
00037 }
00038 
00039 
00040 void IKORFullSpaceSolverTest::setUp()
00041 {
00042 
00043   fsp = ref<IKORFullSpaceSolver>(NewObj IKORFullSpaceSolver());
00044 }
00045 
00046 
00047 void IKORFullSpaceSolverTest::tearDown()
00048 {
00049 }
00050 
00051 
00052 void IKORFullSpaceSolverTest::testByHandCase1()
00053 {
00054 return;
00055   
00056   Matrix A( zeroMatrix(3,6) );
00057                 A(0,1)=-0.325l;
00058   A(1,0)=2.064;                                            A(1,4)=0.54;
00059                 A(2,1)=1.943;  A(2,2)=1.156; A(2,3)=0.674;
00060 
00061   Vector b(3);
00062   b[0]=0; b[1]=0; b[2]=1;
00063 
00064   array<Int> dependentRowsEliminated;
00065 
00066   Matrix gi = fsp->solve(A,b,dependentRowsEliminated);
00067 
00068 
00069 
00070 }
00071 
00072 
00073 void IKORFullSpaceSolverTest::testSpecialCase1()
00074 {
00075 return;
00076   
00077   
00078   
00079   
00080 
00081   Matrix A( zeroMatrix(3,9) );
00082   A(0,6)=1; A(0,8)=-0.61;
00083   A(1,0)=-1.236; A(1,1)=0.635; A(1,2)=0.88; A(1,5)=0.343; A(1,7)=1; A(1,8)=-0.893;
00084   A(2,3)=-0.851; A(2,4)=-0.343;
00085 
00086   Vector b( zeroVector(3) );
00087   b(0)=-0.0101;
00088 
00089   array<Int> dependentRowsEliminated;
00090 
00091   Matrix gi = fsp->solve(A,b,dependentRowsEliminated);
00092 
00093   
00094   Matrix gi2( zeroMatrix(7,9) );
00095   gi2(0,6)=-0.0101;
00096   gi2(1,0)=-0.012; gi2(1,8)=0.0166;
00097   gi2(2,1)=0.0233; gi2(2,8)=0.0166;
00098   gi2(3,2)=0.0168; gi2(3,8)=0.0166;
00099   gi2(4,5)=0.0431; gi2(4,8)=0.0166;
00100   gi2(5,7)=0.0148; gi2(5,8)=0.0166;
00101   gi2(6,3)=0.3738; gi2(6,4)=-0.9275; gi2(6,6)=-0.0101;
00102 
00103   gi2.transpose(); 
00104 
00105   CPPUNIT_ASSERT( gi.equals(gi2, 0.0001) );
00106 
00107 }
00108 
00109 
00110 
00111 void IKORFullSpaceSolverTest::testSpecialCase2()
00112 {
00113 return;
00114   
00115   
00116   
00117   
00118 
00119   Matrix A(3,6);
00120   A(0,0)=1; A(0,1)=1; A(0,2)=2; A(0,3)=2; A(0,4)=4; A(0,5)=3;
00121   A(1,0)=2; A(1,1)=5; A(1,2)=4; A(1,3)=0; A(1,4)=9; A(1,5)=6;
00122   A(2,0)=3; A(2,1)=2; A(2,2)=6; A(2,3)=4; A(2,4)=8; A(2,5)=9;
00123 
00124   Vector b(3);
00125   b(0)=3; b(1)=7; b(2)=6;
00126 
00127   array<Int> dependentRowsEliminated;
00128 
00129   Matrix gi = fsp->solve(A,b,dependentRowsEliminated);
00130 
00131 
00132   
00133   Matrix gi2( zeroMatrix(4,6) );
00134   gi2(0,1)=1.4; gi2(0,3)=0.8;
00135   gi2(1,3)=-0.0556; gi2(1,4)=0.778;
00136   gi2(2,1)=1.4; gi2(2,2)=-0.8321; gi2(2,3)=0.8; gi2(2,5)=0.5547;
00137   gi2(3,0)=0.9636; gi2(3,1)=1.4; gi2(3,2)=-0.1482; gi2(3,3)=0.8; gi2(3,5)=-0.2224;
00138   gi2.transpose(); 
00139 
00140   Debugln(DJ,"gi (from FSP)=\n" << gi);
00141   Debugln(DJ,"gi2 (from paper)=\n" << gi2);
00142 
00143   CPPUNIT_ASSERT( gi.equals(gi2, 0.0001) );
00144 
00145 }
00146 
00147 
00148 
00149 void IKORFullSpaceSolverTest::testEnduranceExample()
00150 {
00151   
00152   
00153   
00154   
00155 
00156   Matrix A(4,8);
00157   A(0,0)=1; A(0,1)=0; A(0,2)=0; A(0,3)=0; A(0,4)=0; A(0,5)=1; A(0,6)=0; A(0,7)=0;
00158   A(1,0)=0; A(1,1)=3; A(1,2)=1; A(1,3)=0; A(1,4)=2; A(1,5)=0; A(1,6)=1; A(1,7)=4;
00159   A(2,0)=0; A(2,1)=6; A(2,2)=0; A(2,3)=0; A(2,4)=4; A(2,5)=0; A(2,6)=0; A(2,7)=8;
00160   A(3,0)=0; A(3,1)=5; A(3,2)=6; A(3,3)=0; A(3,4)=0; A(3,5)=0; A(3,6)=6; A(3,7)=0;
00161 
00162   Vector b(4);
00163   b[0]=0; b[1]=1; b[2]=2; b[3]=3;
00164 
00165   array<Int> dependentRowsEliminated;
00166 
00167   Matrix gi = fsp->solve(A,b,dependentRowsEliminated);
00168 
00169   Debugln(DJ,"gi=\n" << gi);
00170 }
00171 
00172 
00173 #ifdef DEBUG
00174 CPPUNIT_TEST_SUITE_REGISTRATION( IKORFullSpaceSolverTest );
00175 #endif
00176