@@ -54,10 +54,6 @@ ipm::Settings rectifySettings(const OptimalControlProblem& ocp, ipm::Settings&&
5454 if (settings.computeLagrangeMultipliers ) {
5555 settings.createValueFunction = true ;
5656 }
57- // True does not make sense if there are no constraints.
58- if (ocp.equalityConstraintPtr ->empty ()) {
59- settings.projectStateInputEqualityConstraints = false ;
60- }
6157 // Turn off the barrier update strategy if there are no inequality constraints.
6258 if (ocp.inequalityConstraintPtr ->empty () && ocp.stateInequalityConstraintPtr ->empty () && ocp.preJumpInequalityConstraintPtr ->empty () &&
6359 ocp.finalInequalityConstraintPtr ->empty ()) {
@@ -244,9 +240,7 @@ void IpmSolver::runImpl(scalar_t initTime, const vector_t& initState, scalar_t f
244240 settings_.usePrimalStepSizeForDual ? std::min (stepInfo.stepSize , deltaSolution.maxDualStepSize ) : deltaSolution.maxDualStepSize ;
245241 if (settings_.computeLagrangeMultipliers ) {
246242 multiple_shooting::incrementTrajectory (lmd, deltaSolution.deltaLmdSol , stepInfo.stepSize , lmd);
247- if (settings_.projectStateInputEqualityConstraints ) {
248- multiple_shooting::incrementTrajectory (nu, deltaSolution.deltaNuSol , stepInfo.stepSize , nu);
249- }
243+ multiple_shooting::incrementTrajectory (nu, deltaSolution.deltaNuSol , stepInfo.stepSize , nu);
250244 }
251245 multiple_shooting::incrementTrajectory (dualStateIneq, deltaSolution.deltaDualStateIneq , stepInfo.stepSize , dualStateIneq);
252246 multiple_shooting::incrementTrajectory (dualStateInputIneq, deltaSolution.deltaDualStateInputIneq , stepInfo.stepSize ,
@@ -369,14 +363,8 @@ IpmSolver::OcpSubproblemSolution IpmSolver::getOCPSolution(const vector_t& delta
369363 auto & deltaXSol = solution.deltaXSol ;
370364 auto & deltaUSol = solution.deltaUSol ;
371365 hpipm_status status;
372- if (!settings_.projectStateInputEqualityConstraints ) {
373- hpipmInterface_.resize (extractSizesFromProblem (dynamics_, lagrangian_, &stateInputEqConstraints_));
374- status = hpipmInterface_.solve (delta_x0, dynamics_, lagrangian_, &stateInputEqConstraints_, deltaXSol, deltaUSol,
375- settings_.printSolverStatus );
376- } else { // without constraints, or when using projection, we have an unconstrained QP.
377- hpipmInterface_.resize (extractSizesFromProblem (dynamics_, lagrangian_, nullptr ));
378- status = hpipmInterface_.solve (delta_x0, dynamics_, lagrangian_, nullptr , deltaXSol, deltaUSol, settings_.printSolverStatus );
379- }
366+ hpipmInterface_.resize (extractSizesFromProblem (dynamics_, lagrangian_, nullptr ));
367+ status = hpipmInterface_.solve (delta_x0, dynamics_, lagrangian_, nullptr , deltaXSol, deltaUSol, settings_.printSolverStatus );
380368
381369 if (status != hpipm_status::SUCCESS) {
382370 throw std::runtime_error (" [IpmSolver] Failed to solve QP" );
@@ -493,9 +481,7 @@ PrimalSolution IpmSolver::toPrimalSolution(const std::vector<AnnotatedTime>& tim
493481 if (settings_.useFeedbackPolicy ) {
494482 ModeSchedule modeSchedule = this ->getReferenceManager ().getModeSchedule ();
495483 matrix_array_t KMatrices = hpipmInterface_.getRiccatiFeedback (dynamics_[0 ], lagrangian_[0 ]);
496- if (settings_.projectStateInputEqualityConstraints ) {
497- multiple_shooting::remapProjectedGain (constraintsProjection_, KMatrices);
498- }
484+ multiple_shooting::remapProjectedGain (constraintsProjection_, KMatrices);
499485 return multiple_shooting::toPrimalSolution (time, std::move (modeSchedule), std::move (x), std::move (u), std::move (KMatrices));
500486
501487 } else {
@@ -586,9 +572,7 @@ PerformanceIndex IpmSolver::setupQuadraticSubproblem(const std::vector<Annotated
586572 settings_.initialDualMarginRate );
587573 }
588574 performance[workerId] += ipm::computePerformanceIndex (result, dt, barrierParam, slackStateIneq[i], slackStateInputIneq[i]);
589- if (settings_.projectStateInputEqualityConstraints ) {
590- multiple_shooting::projectTranscription (result, settings_.computeLagrangeMultipliers );
591- }
575+ multiple_shooting::projectTranscription (result, settings_.computeLagrangeMultipliers );
592576 dynamics_[i] = std::move (result.dynamics );
593577 stateInputEqConstraints_[i] = std::move (result.stateInputEqConstraints );
594578 stateIneqConstraints_[i] = std::move (result.stateIneqConstraints );
0 commit comments