@@ -66,8 +66,6 @@ namespace simple_mpc
6666 const size_t nv = model.nv ;
6767 const size_t nu = nv - 6 ;
6868
69- formulation_.computeProblemData (0 , model_handler.getReferenceState ().head (nq), Eigen::VectorXd::Zero (nv));
70-
7169 // Prepare contact point task
7270 const size_t n_contacts = model_handler_.getFeetNames ().size ();
7371 const Eigen::Vector3d normal{0 , 0 , 1 };
@@ -101,7 +99,6 @@ namespace simple_mpc
10199 std::make_shared<tsid::tasks::TaskSE3Equality>(" task-base" , robot_, model_handler_.getBaseFrameName ());
102100 baseTask_->Kp (settings_.kp_base * Eigen::VectorXd::Ones (6 ));
103101 baseTask_->Kd (2.0 * baseTask_->Kp ().cwiseSqrt ());
104- baseTask_->setReference (pose_base_);
105102 formulation_.addMotionTask (*baseTask_, settings_.w_base , 1 );
106103
107104 sampleBase_ = tsid::trajectories::TrajectorySample (12 , 6 );
@@ -111,8 +108,17 @@ namespace simple_mpc
111108 solver_->resize (formulation_.nVar (), formulation_.nEq (), formulation_.nIn ());
112109
113110 // Dry run to initialize solver data & output
114- const tsid::solvers::HQPData & solver_data = formulation_.computeProblemData (
115- 0 , model_handler.getReferenceState ().head (nq), model_handler.getReferenceState ().tail (nv));
111+ const Eigen::VectorXd q_ref = model_handler.getReferenceState ().head (nq);
112+ const Eigen::VectorXd v_ref = model_handler.getReferenceState ().tail (nv);
113+ std::vector<bool > c_ref (n_contacts);
114+ Eigen::VectorXd f_ref = Eigen::VectorXd::Zero (3 * n_contacts);
115+ for (int i = 0 ; i < n_contacts; i++)
116+ {
117+ c_ref[i] = true ;
118+ f_ref[2 + 3 * i] = weight / n_contacts;
119+ }
120+ setTarget (q_ref, v_ref, v_ref, c_ref, f_ref);
121+ const tsid::solvers::HQPData & solver_data = formulation_.computeProblemData (0 , q_ref, v_ref);
116122 last_solution_ = solver_->solve (solver_data);
117123 }
118124
0 commit comments