solvertest.cpp
Go to the documentation of this file.
00001 #include "solvertest.hpp"
00002 #include <frames_io.hpp>
00003 #include <framevel_io.hpp>
00004 #include <kinfam_io.hpp>
00005 #include <time.h>
00006 
00007 
00008 CPPUNIT_TEST_SUITE_REGISTRATION( SolverTest );
00009 
00010 using namespace KDL;
00011 
00012 void SolverTest::setUp()
00013 {
00014     srand( (unsigned)time( NULL ));
00015 
00016     chain1.addSegment(Segment("Segment 1", Joint("Joint 1", Joint::RotZ),
00017                               Frame(Vector(0.0,0.0,0.0))));
00018     chain1.addSegment(Segment("Segment 2", Joint("Joint 2", Joint::RotX),
00019                               Frame(Vector(0.0,0.0,0.9))));
00020     chain1.addSegment(Segment("Segment 3", Joint("Joint 3", Joint::None),
00021                               Frame(Vector(-0.4,0.0,0.0))));
00022     chain1.addSegment(Segment("Segment 4", Joint("Joint 4", Joint::RotX),
00023                               Frame(Vector(0.0,0.0,1.2))));
00024     chain1.addSegment(Segment("Segment 5", Joint("Joint 5", Joint::None),
00025                               Frame(Vector(0.4,0.0,0.0))));
00026     chain1.addSegment(Segment("Segment 6", Joint("Joint 6", Joint::RotZ),
00027                               Frame(Vector(0.0,0.0,1.4))));
00028     chain1.addSegment(Segment("Segment 7", Joint("Joint 7", Joint::RotX),
00029                               Frame(Vector(0.0,0.0,0.0))));
00030     chain1.addSegment(Segment("Segment 8", Joint("Joint 8", Joint::RotZ),
00031                               Frame(Vector(0.0,0.0,0.4))));
00032     chain1.addSegment(Segment("Segment 9", Joint("Joint 9", Joint::None),
00033                               Frame(Vector(0.0,0.0,0.0))));
00034 
00035     chain2.addSegment(Segment("Segment 1", Joint("Joint 1", Joint::RotZ),
00036                               Frame(Vector(0.0,0.0,0.5))));
00037     chain2.addSegment(Segment("Segment 2", Joint("Joint 2", Joint::RotX),
00038                               Frame(Vector(0.0,0.0,0.4))));
00039     chain2.addSegment(Segment("Segment 3", Joint("Joint 3", Joint::RotX),
00040                               Frame(Vector(0.0,0.0,0.3))));
00041     chain2.addSegment(Segment("Segment 4", Joint("Joint 4", Joint::RotX),
00042                               Frame(Vector(0.0,0.0,0.2))));
00043     chain2.addSegment(Segment("Segment 5", Joint("Joint 5", Joint::RotZ),
00044                               Frame(Vector(0.0,0.0,0.1))));
00045 
00046 
00047     chain3.addSegment(Segment("Segment 1", Joint("Joint 1", Joint::RotZ),
00048                               Frame(Vector(0.0,0.0,0.0))));
00049     chain3.addSegment(Segment("Segment 2", Joint("Joint 2", Joint::RotX),
00050                               Frame(Vector(0.0,0.0,0.9))));
00051     chain3.addSegment(Segment("Segment 3", Joint("Joint 3", Joint::RotZ),
00052                               Frame(Vector(-0.4,0.0,0.0))));
00053     chain3.addSegment(Segment("Segment 4", Joint("Joint 4", Joint::RotX),
00054                               Frame(Vector(0.0,0.0,1.2))));
00055     chain3.addSegment(Segment("Segment 5", Joint("Joint 5", Joint::None),
00056                               Frame(Vector(0.4,0.0,0.0))));
00057     chain3.addSegment(Segment("Segment 6", Joint("Joint 6", Joint::RotZ),
00058                               Frame(Vector(0.0,0.0,1.4))));
00059     chain3.addSegment(Segment("Segment 7", Joint("Joint 7", Joint::RotX),
00060                               Frame(Vector(0.0,0.0,0.0))));
00061     chain3.addSegment(Segment("Segment 8", Joint("Joint 8", Joint::RotZ),
00062                               Frame(Vector(0.0,0.0,0.4))));
00063     chain3.addSegment(Segment("Segment 9", Joint("Joint 9", Joint::RotY),
00064                               Frame(Vector(0.0,0.0,0.0))));
00065 
00066 
00067     chain4.addSegment(Segment("Segment 1", Joint("Joint 1", Vector(10,0,0), Vector(1,0,1),Joint::RotAxis),
00068                               Frame(Vector(0.0,0.0,0.5))));
00069     chain4.addSegment(Segment("Segment 2", Joint("Joint 2", Vector(0,5,0), Vector(1,0,0),Joint::RotAxis),
00070                               Frame(Vector(0.0,0.0,0.4))));
00071     chain4.addSegment(Segment("Segment 3", Joint("Joint 3", Vector(0,0,5), Vector(1,0,4),Joint::RotAxis),
00072                               Frame(Vector(0.0,0.0,0.3))));
00073     chain4.addSegment(Segment("Segment 4", Joint("Joint 4", Vector(0,0,0), Vector(1,0,0),Joint::RotAxis),
00074                               Frame(Vector(0.0,0.0,0.2))));
00075     chain4.addSegment(Segment("Segment 5", Joint("Joint 5", Vector(0,0,0), Vector(0,0,1),Joint::RotAxis),
00076                               Frame(Vector(0.0,0.0,0.1))));
00077 
00078 
00079 
00080     //chain definition for vereshchagin's dynamic solver
00081     Joint rotJoint0 = Joint(Joint::RotZ, 1, 0, 0.01);
00082     Joint rotJoint1 = Joint(Joint::RotZ, 1, 0, 0.01);
00083 
00084     Frame refFrame(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, 0.0, 0.0));
00085     Frame frame1(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.4, 0.0));
00086     Frame frame2(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.4, 0.0));
00087 
00088     //chain segments
00089     Segment segment1 = Segment(rotJoint0, frame1);
00090     Segment segment2 = Segment(rotJoint1, frame2);
00091 
00092     //rotational inertia around symmetry axis of rotation
00093     RotationalInertia rotInerSeg1(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
00094 
00095     //spatial inertia
00096     RigidBodyInertia inerSegment1(0.3, Vector(0.0, -0.4, 0.0), rotInerSeg1);
00097     RigidBodyInertia inerSegment2(0.3, Vector(0.0, -0.4, 0.0), rotInerSeg1);
00098     segment1.setInertia(inerSegment1);
00099     segment2.setInertia(inerSegment2);
00100 
00101     //chain
00102     chaindyn.addSegment(segment1);
00103     chaindyn.addSegment(segment2);
00104 
00105 }
00106 
00107 void SolverTest::tearDown()
00108 {
00109 //     delete fksolverpos;
00110 //     delete jacsolver;
00111 //     delete fksolvervel;
00112 //     delete iksolvervel;
00113 //     delete iksolverpos;
00114 }
00115 
00116 void SolverTest::FkPosAndJacTest()
00117 {
00118     ChainFkSolverPos_recursive fksolver1(chain1);
00119     ChainJntToJacSolver jacsolver1(chain1);
00120     FkPosAndJacLocal(chain1,fksolver1,jacsolver1);
00121     ChainFkSolverPos_recursive fksolver2(chain2);
00122     ChainJntToJacSolver jacsolver2(chain2);
00123     FkPosAndJacLocal(chain2,fksolver2,jacsolver2);
00124     ChainFkSolverPos_recursive fksolver3(chain3);
00125     ChainJntToJacSolver jacsolver3(chain3);
00126     FkPosAndJacLocal(chain3,fksolver3,jacsolver3);
00127     ChainFkSolverPos_recursive fksolver4(chain4);
00128     ChainJntToJacSolver jacsolver4(chain4);
00129     FkPosAndJacLocal(chain4,fksolver4,jacsolver4);
00130 }
00131 
00132 void SolverTest::FkVelAndJacTest()
00133 {
00134     ChainFkSolverVel_recursive fksolver1(chain1);
00135     ChainJntToJacSolver jacsolver1(chain1);
00136     FkVelAndJacLocal(chain1,fksolver1,jacsolver1);
00137     ChainFkSolverVel_recursive fksolver2(chain2);
00138     ChainJntToJacSolver jacsolver2(chain2);
00139     FkVelAndJacLocal(chain2,fksolver2,jacsolver2);
00140     ChainFkSolverVel_recursive fksolver3(chain3);
00141     ChainJntToJacSolver jacsolver3(chain3);
00142     FkVelAndJacLocal(chain3,fksolver3,jacsolver3);
00143     ChainFkSolverVel_recursive fksolver4(chain4);
00144     ChainJntToJacSolver jacsolver4(chain4);
00145     FkVelAndJacLocal(chain4,fksolver4,jacsolver4);
00146 }
00147 
00148 void SolverTest::FkVelAndIkVelTest()
00149 {
00150     //Chain1
00151     std::cout<<"square problem"<<std::endl;
00152     ChainFkSolverVel_recursive fksolver1(chain1);
00153     ChainIkSolverVel_pinv iksolver1(chain1);
00154     ChainIkSolverVel_pinv_givens iksolver_pinv_givens1(chain1);
00155     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00156     FkVelAndIkVelLocal(chain1,fksolver1,iksolver1);
00157     std::cout<<"KDL-SVD-Givens"<<std::endl;
00158     FkVelAndIkVelLocal(chain1,fksolver1,iksolver_pinv_givens1);
00159 
00160     //Chain2
00161     std::cout<<"underdetermined problem"<<std::endl;
00162     ChainFkSolverVel_recursive fksolver2(chain2);
00163     ChainIkSolverVel_pinv iksolver2(chain2);
00164     ChainIkSolverVel_pinv_givens iksolver_pinv_givens2(chain2);
00165     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00166     FkVelAndIkVelLocal(chain2,fksolver2,iksolver2);
00167     std::cout<<"KDL-SVD-Givens"<<std::endl;
00168     FkVelAndIkVelLocal(chain2,fksolver2,iksolver_pinv_givens2);
00169 
00170     //Chain3
00171     std::cout<<"overdetermined problem"<<std::endl;
00172     ChainFkSolverVel_recursive fksolver3(chain3);
00173     ChainIkSolverVel_pinv iksolver3(chain3);
00174     ChainIkSolverVel_pinv_givens iksolver_pinv_givens3(chain3);
00175     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00176     FkVelAndIkVelLocal(chain3,fksolver3,iksolver3);
00177     std::cout<<"KDL-SVD-Givens"<<std::endl;
00178     FkVelAndIkVelLocal(chain3,fksolver3,iksolver_pinv_givens3);
00179 
00180     //Chain4
00181     std::cout<<"overdetermined problem"<<std::endl;
00182     ChainFkSolverVel_recursive fksolver4(chain4);
00183     ChainIkSolverVel_pinv iksolver4(chain4);
00184     ChainIkSolverVel_pinv_givens iksolver_pinv_givens4(chain4);
00185     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00186     FkVelAndIkVelLocal(chain4,fksolver4,iksolver4);
00187     std::cout<<"KDL-SVD-Givens"<<std::endl;
00188     FkVelAndIkVelLocal(chain4,fksolver4,iksolver_pinv_givens4);
00189 }
00190 
00191 void SolverTest::FkPosAndIkPosTest()
00192 {
00193     std::cout<<"square problem"<<std::endl;
00194     ChainFkSolverPos_recursive fksolver1(chain1);
00195     ChainIkSolverVel_pinv iksolver1v(chain1);
00196     ChainIkSolverVel_pinv_givens iksolverv_pinv_givens1(chain1);
00197     ChainIkSolverPos_NR iksolver1(chain1,fksolver1,iksolver1v);
00198     ChainIkSolverPos_NR iksolver1_givens(chain1,fksolver1,iksolverv_pinv_givens1,1000);
00199 
00200     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00201     FkPosAndIkPosLocal(chain1,fksolver1,iksolver1);
00202     std::cout<<"KDL-SVD-Givens"<<std::endl;
00203     FkPosAndIkPosLocal(chain1,fksolver1,iksolver1_givens);
00204 
00205     std::cout<<"underdetermined problem"<<std::endl;
00206     ChainFkSolverPos_recursive fksolver2(chain2);
00207     ChainIkSolverVel_pinv iksolverv2(chain2);
00208     ChainIkSolverVel_pinv_givens iksolverv_pinv_givens2(chain2);
00209     ChainIkSolverPos_NR iksolver2(chain2,fksolver2,iksolverv2);
00210     ChainIkSolverPos_NR iksolver2_givens(chain2,fksolver2,iksolverv_pinv_givens2,1000);
00211 
00212     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00213     FkPosAndIkPosLocal(chain2,fksolver2,iksolver2);
00214     std::cout<<"KDL-SVD-Givens"<<std::endl;
00215     FkPosAndIkPosLocal(chain2,fksolver2,iksolver2_givens);
00216 
00217     std::cout<<"overdetermined problem"<<std::endl;
00218     ChainFkSolverPos_recursive fksolver3(chain3);
00219     ChainIkSolverVel_pinv iksolverv3(chain3);
00220     ChainIkSolverVel_pinv_givens iksolverv_pinv_givens3(chain3);
00221     ChainIkSolverPos_NR iksolver3(chain3,fksolver3,iksolverv3);
00222     ChainIkSolverPos_NR iksolver3_givens(chain3,fksolver3,iksolverv_pinv_givens3,1000);
00223 
00224     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00225     FkPosAndIkPosLocal(chain3,fksolver3,iksolver3);
00226     std::cout<<"KDL-SVD-Givens"<<std::endl;
00227     FkPosAndIkPosLocal(chain3,fksolver3,iksolver3_givens);
00228 
00229     std::cout<<"underdetermined problem with WGs segment constructor"<<std::endl;
00230     ChainFkSolverPos_recursive fksolver4(chain4);
00231     ChainIkSolverVel_pinv iksolverv4(chain4);
00232     ChainIkSolverVel_pinv_givens iksolverv_pinv_givens4(chain4);
00233     ChainIkSolverPos_NR iksolver4(chain4,fksolver4,iksolverv4,1000);
00234     ChainIkSolverPos_NR iksolver4_givens(chain4,fksolver4,iksolverv_pinv_givens4,1000);
00235 
00236     std::cout<<"KDL-SVD-HouseHolder"<<std::endl;
00237     FkPosAndIkPosLocal(chain4,fksolver4,iksolver4);
00238     std::cout<<"KDL-SVD-Givens"<<std::endl;
00239     FkPosAndIkPosLocal(chain4,fksolver4,iksolver4_givens);
00240 }
00241 
00242 
00243 void SolverTest::FkPosAndJacLocal(Chain& chain,ChainFkSolverPos& fksolverpos,ChainJntToJacSolver& jacsolver)
00244 {
00245     double deltaq = 1E-4;
00246     double epsJ   = 1E-4;
00247 
00248     Frame F1,F2;
00249 
00250     JntArray q(chain.getNrOfJoints());
00251     Jacobian jac(chain.getNrOfJoints());
00252 
00253     for(unsigned int i=0; i<chain.getNrOfJoints(); i++)
00254     {
00255         random(q(i));
00256     }
00257 
00258     jacsolver.JntToJac(q,jac);
00259 
00260     for (int i=0; i< q.rows() ; i++)
00261     {
00262         // test the derivative of J towards qi
00263         double oldqi = q(i);
00264         q(i) = oldqi+deltaq;
00265         CPPUNIT_ASSERT(0==fksolverpos.JntToCart(q,F2));
00266         q(i) = oldqi-deltaq;
00267         CPPUNIT_ASSERT(0==fksolverpos.JntToCart(q,F1));
00268         q(i) = oldqi;
00269         // check Jacobian :
00270         Twist Jcol1 = diff(F1,F2,2*deltaq);
00271         Twist Jcol2(Vector(jac(0,i),jac(1,i),jac(2,i)),
00272                     Vector(jac(3,i),jac(4,i),jac(5,i)));
00273 
00274         //CPPUNIT_ASSERT_EQUAL(true,Equal(Jcol1,Jcol2,epsJ));
00275         CPPUNIT_ASSERT_EQUAL(Jcol1,Jcol2);
00276     }
00277 }
00278 
00279 void SolverTest::FkVelAndJacLocal(Chain& chain, ChainFkSolverVel& fksolvervel, ChainJntToJacSolver& jacsolver)
00280 {
00281     double deltaq = 1E-4;
00282     double epsJ   = 1E-4;
00283 
00284     JntArray q(chain.getNrOfJoints());
00285     JntArray qdot(chain.getNrOfJoints());
00286 
00287     for(unsigned int i=0; i<chain.getNrOfJoints(); i++)
00288     {
00289         random(q(i));
00290         random(qdot(i));
00291     }
00292     JntArrayVel qvel(q,qdot);
00293     Jacobian jac(chain.getNrOfJoints());
00294 
00295     FrameVel cart;
00296     Twist t;
00297 
00298     jacsolver.JntToJac(qvel.q,jac);
00299     CPPUNIT_ASSERT(fksolvervel.JntToCart(qvel,cart)==0);
00300     MultiplyJacobian(jac,qvel.qdot,t);
00301     CPPUNIT_ASSERT_EQUAL(cart.deriv(),t);
00302 }
00303 
00304 void SolverTest::FkVelAndIkVelLocal(Chain& chain, ChainFkSolverVel& fksolvervel, ChainIkSolverVel& iksolvervel)
00305 {
00306     double epsJ   = 1E-7;
00307 
00308     JntArray q(chain.getNrOfJoints());
00309     JntArray qdot(chain.getNrOfJoints());
00310 
00311     for(unsigned int i=0; i<chain.getNrOfJoints(); i++)
00312     {
00313         random(q(i));
00314         random(qdot(i));
00315     }
00316     JntArrayVel qvel(q,qdot);
00317     JntArray qdot_solved(chain.getNrOfJoints());
00318 
00319     FrameVel cart;
00320 
00321     CPPUNIT_ASSERT(0==fksolvervel.JntToCart(qvel,cart));
00322 
00323     int ret = iksolvervel.CartToJnt(qvel.q,cart.deriv(),qdot_solved);
00324     CPPUNIT_ASSERT(0<=ret);
00325 
00326     qvel.deriv()=qdot_solved;
00327 
00328     if(chain.getNrOfJoints()<=6)
00329         CPPUNIT_ASSERT(Equal(qvel.qdot,qdot_solved,1e-5));
00330     else
00331     {
00332         FrameVel cart_solved;
00333         CPPUNIT_ASSERT(0==fksolvervel.JntToCart(qvel,cart_solved));
00334         CPPUNIT_ASSERT(Equal(cart.deriv(),cart_solved.deriv(),1e-5));
00335     }
00336 }
00337 
00338 
00339 void SolverTest::FkPosAndIkPosLocal(Chain& chain,ChainFkSolverPos& fksolverpos, ChainIkSolverPos& iksolverpos)
00340 {
00341     JntArray q(chain.getNrOfJoints());
00342     for(unsigned int i=0; i<chain.getNrOfJoints(); i++)
00343     {
00344         random(q(i));
00345     }
00346     JntArray q_init(chain.getNrOfJoints());
00347     double tmp;
00348     for(unsigned int i=0; i<chain.getNrOfJoints(); i++)
00349     {
00350         random(tmp);
00351         q_init(i)=q(i)+0.1*tmp;
00352     }
00353     JntArray q_solved(q);
00354 
00355     Frame F1,F2;
00356 
00357     CPPUNIT_ASSERT(0==fksolverpos.JntToCart(q,F1));
00358     CPPUNIT_ASSERT(0==iksolverpos.CartToJnt(q_init,F1,q_solved));
00359     CPPUNIT_ASSERT(0==fksolverpos.JntToCart(q_solved,F2));
00360 
00361     CPPUNIT_ASSERT_EQUAL(F1,F2);
00362     //CPPUNIT_ASSERT_EQUAL(q,q_solved);
00363 
00364 }
00365 
00366 
00367 void SolverTest::VereshchaginTest()
00368 {
00369 
00370     Vector constrainXLinear(1.0, 0.0, 0.0);
00371     Vector constrainXAngular(0.0, 0.0, 0.0);
00372     Vector constrainYLinear(0.0, 0.0, 0.0);
00373     Vector constrainYAngular(0.0, 0.0, 0.0);
00374     // Vector constrainZLinear(0.0, 0.0, 0.0);
00375     //Vector constrainZAngular(0.0, 0.0, 0.0);
00376     Twist constraintForcesX(constrainXLinear, constrainXAngular);
00377     Twist constraintForcesY(constrainYLinear, constrainYAngular);
00378     //Twist constraintForcesZ(constrainZLinear, constrainZAngular);
00379     Jacobian alpha(1);
00380     //alpha.setColumn(0, constraintForcesX);
00381     alpha.setColumn(0, constraintForcesX);
00382     //alpha.setColumn(0, constraintForcesZ);
00383 
00384     //Acceleration energy at  the end-effector
00385     JntArray betha(1); //set to zero
00386     betha(0) = 0.0;
00387     //betha(1) = 0.0;
00388     //betha(2) = 0.0;
00389 
00390     //arm root acceleration
00391     Vector linearAcc(0.0, 10, 0.0); //gravitational acceleration along Y
00392     Vector angularAcc(0.0, 0.0, 0.0);
00393     Twist twist1(linearAcc, angularAcc);
00394 
00395     //external forces on the arm
00396     Vector externalForce1(0.0, 0.0, 0.0);
00397     Vector externalTorque1(0.0, 0.0, 0.0);
00398     Vector externalForce2(0.0, 0.0, 0.0);
00399     Vector externalTorque2(0.0, 0.0, 0.0);
00400     Wrench externalNetForce1(externalForce1, externalTorque1);
00401     Wrench externalNetForce2(externalForce2, externalTorque2);
00402     Wrenches externalNetForce;
00403     externalNetForce.push_back(externalNetForce1);
00404     externalNetForce.push_back(externalNetForce2);
00405     //~Definition of constraints and external disturbances
00406     //-------------------------------------------------------------------------------------//
00407 
00408 
00409     //Definition of solver and initial configuration
00410     //-------------------------------------------------------------------------------------//
00411     int numberOfConstraints = 1;
00412     ChainIdSolver_Vereshchagin constraintSolver(chaindyn, twist1, numberOfConstraints);
00413 
00414     //These arrays of joint values contain actual and desired values
00415     //actual is generated by a solver and integrator
00416     //desired is given by an interpolator
00417     //error is the difference between desired-actual
00418     //in this test only the actual values are printed.
00419     int k = 1;
00420     JntArray jointPoses[k];
00421     JntArray jointRates[k];
00422     JntArray jointAccelerations[k];
00423     JntArray jointTorques[k];
00424     for (int i = 0; i < k; i++)
00425     {
00426         JntArray jointValues(chaindyn.getNrOfJoints());
00427         jointPoses[i] = jointValues;
00428         jointRates[i] = jointValues;
00429         jointAccelerations[i] = jointValues;
00430         jointTorques[i] = jointValues;
00431     }
00432 
00433     // Initial arm position configuration/constraint
00434     JntArray jointInitialPose(chaindyn.getNrOfJoints());
00435     jointInitialPose(0) = 0.0; // initial joint0 pose
00436     jointInitialPose(1) = M_PI/6.0; //initial joint1 pose, negative in clockwise
00437     //j0=0.0, j1=pi/6.0 correspond to x = 0.2, y = -0.7464
00438     //j0=2*pi/3.0, j1=pi/4.0 correspond to x = 0.44992, y = 0.58636
00439 
00440     //actual
00441     jointPoses[0](0) = jointInitialPose(0);
00442     jointPoses[0](1) = jointInitialPose(1);
00443 
00444     //~Definition of solver and initial configuration
00445     //-------------------------------------------------------------------------------------//
00446 
00447 
00448     //Definition of process main loop
00449     //-------------------------------------------------------------------------------------//
00450     //Time required to complete the task move(frameinitialPose, framefinalPose)
00451     double taskTimeConstant = 0.1;
00452     double simulationTime = 1*taskTimeConstant;
00453     double timeDelta = 0.01;
00454     int status;
00455 
00456     const std::string msg = "Assertion failed, check matrix and array sizes";
00457 
00458     for (double t = 0.0; t <=simulationTime; t = t + timeDelta)
00459     {
00460         status = constraintSolver.CartToJnt(jointPoses[0], jointRates[0], jointAccelerations[0], alpha, betha, externalNetForce, jointTorques[0]);
00461 
00462         CPPUNIT_ASSERT((status == 0));
00463         if (status != 0)
00464         {
00465             std::cout << "Check matrix and array sizes. Something does not match " << std::endl;
00466             exit(1);
00467         }
00468         else
00469         {
00470             //Integration(robot joint values for rates and poses; actual) at the given "instanteneous" interval for joint position and velocity.
00471             jointRates[0](0) = jointRates[0](0) + jointAccelerations[0](0) * timeDelta; //Euler Forward
00472             jointPoses[0](0) = jointPoses[0](0) + (jointRates[0](0) - jointAccelerations[0](0) * timeDelta / 2.0) * timeDelta; //Trapezoidal rule
00473             jointRates[0](1) = jointRates[0](1) + jointAccelerations[0](1) * timeDelta; //Euler Forward
00474             jointPoses[0](1) = jointPoses[0](1) + (jointRates[0](1) - jointAccelerations[0](1) * timeDelta / 2.0) * timeDelta;
00475             //printf("time, j0_pose, j1_pose, j0_rate, j1_rate, j0_acc, j1_acc, j0_constraintTau, j1_constraintTau \n");
00476             printf("%f          %f      %f       %f     %f       %f      %f     %f      %f\n", t, jointPoses[0](0), jointPoses[0](1), jointRates[0](0), jointRates[0](1), jointAccelerations[0](0), jointAccelerations[0](1), jointTorques[0](0), jointTorques[0](1));
00477         }
00478     }
00479 }


orocos_kdl
Author(s): Ruben Smits, Erwin Aertbelien, Orocos Developers
autogenerated on Sat Dec 28 2013 17:17:25