44#include < pinocchio/algorithm/center-of-mass.hpp>
55#include < pinocchio/algorithm/frames.hpp>
66
7- #include " simple-mpc/inverse-dynamics/kinodynamics .hpp"
7+ #include " simple-mpc/inverse-dynamics/centroidal .hpp"
88#include " simple-mpc/robot-handler.hpp"
99#include " test_utils.cpp"
1010
11- BOOST_AUTO_TEST_SUITE (inverse_dynamics )
11+ BOOST_AUTO_TEST_SUITE (inverse_dynamics_centroidal )
1212
1313using namespace simple_mpc;
1414
@@ -28,10 +28,10 @@ Eigen::VectorXd solo_q_start(const RobotModelHandler & model_handler)
2828}
2929
3030// Helper class to create the problem and run it
31- class TestKinoID
31+ class TestCentroidalID
3232{
3333public:
34- TestKinoID (RobotModelHandler model_handler_, KinodynamicsID ::Settings settings_)
34+ TestCentroidalID (RobotModelHandler model_handler_, CentroidalID ::Settings settings_)
3535 : model_handler(model_handler_)
3636 , data_handler(model_handler)
3737 , settings(settings_)
@@ -93,9 +93,9 @@ class TestKinoID
9393public:
9494 const RobotModelHandler model_handler;
9595 RobotDataHandler data_handler;
96- KinodynamicsID ::Settings settings;
96+ CentroidalID ::Settings settings;
9797 double dt = 1e-3 ;
98- KinodynamicsID solver;
98+ CentroidalID solver;
9999
100100 double t = 0 .;
101101 int step_i = 0 ;
@@ -107,19 +107,31 @@ class TestKinoID
107107 std::map<std::string, double > errors;
108108};
109109
110- BOOST_AUTO_TEST_CASE (KinodynamicsID_postureTask )
110+ BOOST_AUTO_TEST_CASE (CentroidalID_postureTask )
111111{
112- TestKinoID test (getSoloHandler (), KinodynamicsID::Settings ().set_kp_posture (20 .).set_w_posture (1 .));
112+ CentroidalID::Settings settings;
113+ settings.kp_posture = 20 .;
114+ settings.w_posture = 1 .;
115+
116+ TestCentroidalID test (getSoloHandler (), settings);
113117
114118 // Easy access
115119 const RobotModelHandler & model_handler = test.model_handler ;
116120 const size_t nq = model_handler.getModel ().nq ;
117121 const size_t nv = model_handler.getModel ().nv ;
118122
119123 // Target state
120- const Eigen::VectorXd q_target = model_handler.getReferenceState ().head (nq);
124+ const Eigen::VectorXd q_target =
125+ model_handler.getReferenceState ().head (nq); // CentroidalID set posture target to reference configuration
126+ CentroidalID::FeetPoseVector feet_pose_vec;
127+ CentroidalID::FeetVelocityVector feet_vel_vec;
128+ for (int foot_nb; foot_nb < test.model_handler .getFeetNb (); foot_nb++)
129+ {
130+ feet_pose_vec.push_back (pinocchio::SE3::Identity ());
131+ feet_vel_vec.push_back (pinocchio::Motion::Zero ());
132+ }
121133 test.solver .setTarget (
122- q_target, Eigen::VectorXd::Zero (nv ), Eigen::VectorXd::Zero (nv) , {false , false , false , false }, {});
134+ Eigen::VectorXd::Zero (3 ), Eigen::VectorXd::Zero (3 ), feet_pose_vec, feet_vel_vec , {false , false , false , false }, {});
123135
124136 // Change initial state
125137 test.q = solo_q_start (model_handler);
@@ -139,15 +151,15 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_postureTask)
139151 }
140152}
141153
142- void test_contact (TestKinoID test)
154+ void test_contact (TestCentroidalID test)
143155{
144156 // Easy access
145157 const RobotModelHandler & model_handler = test.model_handler ;
146158 const RobotDataHandler & data_handler = test.data_handler ;
147159 const size_t nq = model_handler.getModel ().nq ;
148160 const size_t nv = model_handler.getModel ().nv ;
149161
150- // No need to set target as KinodynamicsID sets it by default to reference state
162+ // No need to set target as CentroidalID sets it by default to reference state
151163 const Eigen::VectorXd q_target = model_handler.getReferenceState ().head (nq);
152164
153165 // Let the robot stabilize
@@ -172,77 +184,81 @@ void test_contact(TestKinoID test)
172184 }
173185}
174186
175- BOOST_AUTO_TEST_CASE (KinodynamicsID_contactPoint_cost )
187+ BOOST_AUTO_TEST_CASE (CentroidalID_contactPoint_cost )
176188{
177- TestKinoID simu (
178- getSoloHandler (), KinodynamicsID::Settings ()
179- .set_kp_base (1.0 )
180- .set_kp_contact (10.0 )
181- .set_w_base (1 .)
182- .set_w_contact_motion (10.0 )
183- .set_w_contact_force (1.0 ));
189+ CentroidalID::Settings settings;
190+ settings.kp_base = 1.0 ;
191+ settings.kp_contact = 10.0 ;
192+ settings.w_base = 1 .;
193+ settings.w_contact_motion = 10.0 ;
194+ settings.w_contact_force = 1.0 ;
195+
196+ TestCentroidalID simu (getSoloHandler (), settings);
184197 simu.q = solo_q_start (simu.model_handler ); // Set initial configuration
185198 test_contact (simu);
186199}
187200
188- BOOST_AUTO_TEST_CASE (KinodynamicsID_contactQuad_cost )
201+ BOOST_AUTO_TEST_CASE (CentroidalID_contactQuad_cost )
189202{
190- TestKinoID simu (
191- getTalosModelHandler (), KinodynamicsID::Settings ()
192- .set_kp_base (1.0 )
193- .set_kp_posture (1 .)
194- .set_kp_contact (10.0 )
195- .set_w_base (1 .)
196- .set_w_posture (0.05 )
197- .set_w_contact_motion (10.0 )
198- .set_w_contact_force (1.0 ));
203+ CentroidalID::Settings settings;
204+ settings.kp_base = 1.0 ;
205+ settings.kp_posture = 1 .;
206+ settings.kp_contact = 10.0 ;
207+ settings.w_base = 1 .;
208+ settings.w_posture = 0.05 ;
209+ settings.w_contact_motion = 10.0 ;
210+ settings.w_contact_force = 1.0 ;
211+
212+ TestCentroidalID simu (getTalosModelHandler (), settings);
199213 test_contact (simu);
200214}
201215
202- BOOST_AUTO_TEST_CASE (KinodynamicsID_contactPoint_equality )
216+ BOOST_AUTO_TEST_CASE (CentroidalID_contactPoint_equality )
203217{
204- TestKinoID simu (
205- getSoloHandler (), KinodynamicsID::Settings ()
206- . set_kp_base ( 1.0 )
207- . set_kp_contact ( 10.0 )
208- . set_w_base ( 1 .)
209- . set_w_contact_motion ( 10.0 )
210- . set_w_contact_force ( 1.0 )
211- . set_contact_motion_equality ( true ) );
218+ CentroidalID::Settings settings;
219+ settings. kp_base = 1.0 ;
220+ settings. kp_contact = 10.0 ;
221+ settings. w_base = 1 .;
222+ settings. w_contact_motion = 10.0 ;
223+ settings. w_contact_force = 1.0 ;
224+ settings. contact_motion_equality = true ;
225+ TestCentroidalID simu ( getSoloHandler (), settings );
212226 simu.q = solo_q_start (simu.model_handler ); // Set initial configuration
213227 test_contact (simu);
214228}
215229
216- BOOST_AUTO_TEST_CASE (KinodynamicsID_contactQuad_equality )
230+ BOOST_AUTO_TEST_CASE (CentroidalID_contactQuad_equality )
217231{
218- TestKinoID simu (
219- getTalosModelHandler (), KinodynamicsID::Settings ()
220- .set_kp_base (1.0 )
221- .set_kp_posture (1 .)
222- .set_kp_contact (10.0 )
223- .set_w_base (1 .)
224- .set_w_posture (0.05 )
225- .set_w_contact_motion (10.0 )
226- .set_w_contact_force (1.0 )
227- .set_contact_motion_equality (true ));
232+ CentroidalID::Settings settings;
233+ settings.kp_base = 1.0 ;
234+ settings.kp_posture = 1 .;
235+ settings.kp_contact = 10.0 ;
236+ settings.w_base = 1 .;
237+ settings.w_posture = 0.05 ;
238+ settings.w_contact_motion = 10.0 ;
239+ settings.w_contact_force = 1.0 ;
240+ settings.contact_motion_equality = true ;
241+
242+ TestCentroidalID simu (getTalosModelHandler (), settings);
228243 test_contact (simu);
229244}
230245
231- BOOST_AUTO_TEST_CASE (KinodynamicsID_baseTask )
246+ BOOST_AUTO_TEST_CASE (CentroidalID_baseTask )
232247{
233- TestKinoID test (
234- getSoloHandler (), KinodynamicsID::Settings ()
235- .set_kp_base (7 .)
236- .set_kp_contact (.1 )
237- .set_w_base (100.0 )
238- .set_w_contact_force (1.0 )
239- .set_w_contact_motion (1.0 ));
248+ CentroidalID::Settings settings;
249+ settings.kp_base = 7 .;
250+ settings.kp_contact = .1 ;
251+ settings.w_base = 100.0 ;
252+ settings.w_contact_force = 1.0 ;
253+ settings.w_contact_motion = 1.0 ;
254+
255+ TestCentroidalID test (getSoloHandler (), settings);
240256
241257 // Easy access
242258 const RobotModelHandler & model_handler = test.model_handler ;
243259 const size_t nq = model_handler.getModel ().nq ;
244260
245- // No need to set target as KinodynamicsID sets it by default to reference state
261+ // No need to set target as CentroidalID sets it by default to reference state
246262 const Eigen::VectorXd q_target = model_handler.getReferenceState ().head (nq);
247263
248264 // Change initial state
@@ -266,24 +282,25 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_baseTask)
266282 }
267283}
268284
269- BOOST_AUTO_TEST_CASE (KinodynamicsID_allTasks )
285+ BOOST_AUTO_TEST_CASE (CentroidalID_allTasks )
270286{
271- TestKinoID test (
272- getSoloHandler (), KinodynamicsID::Settings ()
273- .set_kp_base (10 .)
274- .set_kp_posture (1 .)
275- .set_kp_contact (10 .)
276- .set_w_base (10.0 )
277- .set_w_posture (0.1 )
278- .set_w_contact_force (1.0 )
279- .set_w_contact_motion (1.0 ));
287+ CentroidalID::Settings settings;
288+ settings.kp_base = 10 .;
289+ settings.kp_posture = 1 .;
290+ settings.kp_contact = 10 .;
291+ settings.w_base = 10.0 ;
292+ settings.w_posture = 0.1 ;
293+ settings.w_contact_force = 1.0 ;
294+ settings.w_contact_motion = 1.0 ;
295+
296+ TestCentroidalID test (getSoloHandler (), settings);
280297
281298 // Easy access
282299 const RobotModelHandler & model_handler = test.model_handler ;
283300 const size_t nq = model_handler.getModel ().nq ;
284301 const size_t nv = model_handler.getModel ().nv ;
285302
286- // No need to set target as KinodynamicsID sets it by default to reference state
303+ // No need to set target as CentroidalID sets it by default to reference state
287304 const Eigen::VectorXd q_target = model_handler.getReferenceState ().head (nq);
288305
289306 test.q = solo_q_start (model_handler);
0 commit comments