@@ -22,7 +22,7 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_postureTask)
2222
2323 solver.setTarget (
2424 q_target, Eigen::VectorXd::Zero (model_handler.getModel ().nv ), Eigen::VectorXd::Zero (model_handler.getModel ().nv ),
25- {true , true , true , true }, Eigen::VectorXd::Zero (4 * 3 ));
25+ {false , false , false , false }, Eigen::VectorXd::Zero (4 * 3 ));
2626
2727 double t = 0 ;
2828 double dt = 1e-3 ;
@@ -56,4 +56,50 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_postureTask)
5656 }
5757}
5858
59+ BOOST_AUTO_TEST_CASE (KinodynamicsID_allTasks)
60+ {
61+ RobotModelHandler model_handler = getSoloHandler ();
62+ RobotDataHandler data_handler (model_handler);
63+
64+ KinodynamicsID solver (model_handler, KinodynamicsID::Settings::Default ());
65+
66+ const Eigen::VectorXd q_target = model_handler.getReferenceState ().head (model_handler.getModel ().nq );
67+ Eigen::VectorXd f_target = Eigen::VectorXd::Zero (4 * 3 );
68+ f_target[2 ] = model_handler.getMass () * 9.81 / 4 ;
69+ f_target[5 ] = model_handler.getMass () * 9.81 / 4 ;
70+ f_target[8 ] = model_handler.getMass () * 9.81 / 4 ;
71+ f_target[11 ] = model_handler.getMass () * 9.81 / 4 ;
72+
73+ solver.setTarget (
74+ q_target, Eigen::VectorXd::Zero (model_handler.getModel ().nv ), Eigen::VectorXd::Zero (model_handler.getModel ().nv ),
75+ {true , true , true , true }, f_target);
76+
77+ double t = 0 ;
78+ double dt = 1e-3 ;
79+ Eigen::VectorXd q = pinocchio::randomConfiguration (model_handler.getModel ());
80+ q.head (7 ) = q_target.head (7 );
81+ Eigen::VectorXd v = Eigen::VectorXd::Random (model_handler.getModel ().nv );
82+ Eigen::VectorXd a = Eigen::VectorXd::Random (model_handler.getModel ().nv );
83+ Eigen::VectorXd tau = Eigen::VectorXd::Zero (model_handler.getModel ().nv - 6 );
84+
85+ Eigen::VectorXd error = 1e12 * Eigen::VectorXd::Ones (model_handler.getModel ().nv );
86+
87+ for (int i = 0 ; i < 1000 ; i++)
88+ {
89+ // Solve and get solution
90+ solver.solve (t, q, v, tau);
91+ a = solver.getAccelerations ();
92+
93+ // Integrate
94+ t += dt;
95+ q = pinocchio::integrate (model_handler.getModel (), q, (v + a / 2 . * dt) * dt);
96+ v += a * dt;
97+
98+ // Check error is decreasing
99+ Eigen::VectorXd new_error = pinocchio::difference (model_handler.getModel (), q, q_target);
100+ BOOST_CHECK_LE (new_error.norm (), error.norm ());
101+ error = new_error;
102+ }
103+ }
104+
59105BOOST_AUTO_TEST_SUITE_END ()
0 commit comments