@@ -81,9 +81,10 @@ namespace simple_mpc
8181 solver_ = tsid::solvers::SolverHQPFactory::createNewSolver (tsid::solvers::SOLVER_HQP_PROXQP, " solver-proxqp" );
8282 solver_->resize (formulation_.nVar (), formulation_.nEq (), formulation_.nIn ());
8383
84- HQPData_ = formulation_.computeProblemData (
84+ // Dry run to initialize solver data & output
85+ const tsid::solvers::HQPData & solver_data = formulation_.computeProblemData (
8586 0 , model_handler.getReferenceState ().head (nq), model_handler.getReferenceState ().tail (nv));
86- sol_ = solver_->solve (HQPData_ );
87+ const tsid::solvers::HQPOutput & solver_output = solver_->solve (solver_data );
8788 }
8889
8990 void setTarget (
@@ -139,9 +140,9 @@ namespace simple_mpc
139140 void
140141 solve (const double t, const Eigen::VectorXd & q_meas, const Eigen::VectorXd & v_meas, Eigen::VectorXd & tau_res)
141142 {
142- HQPData_ = formulation_.computeProblemData (t, q_meas, v_meas);
143- sol_ = solver_->solve (HQPData_ );
144- tau_res = formulation_.getActuatorForces (sol_ );
143+ const tsid::solvers::HQPData & solver_data_ = formulation_.computeProblemData (t, q_meas, v_meas);
144+ const tsid::solvers::HQPOutput & solver_output = solver_->solve (solver_data_ );
145+ tau_res = formulation_.getActuatorForces (solver_output );
145146 }
146147
147148 // Order matters to be instanciated in the right order
@@ -155,8 +156,6 @@ namespace simple_mpc
155156 std::shared_ptr<tsid::tasks::TaskJointPosture> postureTask_;
156157 std::shared_ptr<tsid::tasks::TaskSE3Equality> baseTask_;
157158 tsid::solvers::SolverHQPBase * solver_;
158- tsid::solvers::HQPData HQPData_;
159- tsid::solvers::HQPOutput sol_;
160159 tsid::trajectories::TrajectorySample samplePosture_; // TODO: no need to store it
161160 tsid::trajectories::TrajectorySample sampleBase_; // TODO: no need to store it
162161 pinocchio::SE3 pose_base_;
0 commit comments