27 #include <corbo-communication/utilities.h>
46 std::vector<BaseEdge::Ptr> cost_terms, eq_terms, ineq_terms;
47 for (
int k = 0; k <
n - 1; ++k)
49 VectorVertexSE2& x_next = (k <
n - 2) ?
_x_seq[k + 1] :
_xf;
56 nlp_fun.getNonIntegralStageFunctionEdges(k,
_x_seq[k],
_u_seq[k],
_dt, u_prev, dt_prev, cost_terms, eq_terms, ineq_terms);
57 for (
BaseEdge::Ptr& edge : cost_terms) edges.addObjectiveEdge(edge);
58 for (
BaseEdge::Ptr& edge : eq_terms) edges.addEqualityEdge(edge);
59 for (
BaseEdge::Ptr& edge : ineq_terms) edges.addInequalityEdge(edge);
61 if (nlp_fun.stage_cost && nlp_fun.stage_cost->hasIntegralTerms(k))
66 std::make_shared<corbo::TrapezoidalIntegralCostEdge>(
_x_seq[k],
_u_seq[k], x_next,
_dt, nlp_fun.stage_cost, k);
67 edges.addObjectiveEdge(edge);
72 edges.addObjectiveEdge(edge);
78 if (nlp_fun.stage_equalities && nlp_fun.stage_equalities->hasIntegralTerms(k))
83 dynamics,
_x_seq[k],
_u_seq[k], x_next,
_dt, nlp_fun.stage_equalities, k);
84 edge->setFiniteDifferencesCollocationMethod(
_fd_eval);
85 edges.addEqualityEdge(edge);
90 std::make_shared<corbo::LeftSumEqualityEdge>(
_x_seq[k],
_u_seq[k],
_dt, nlp_fun.stage_equalities, k);
91 edges.addEqualityEdge(edge);
95 sys_edge->setFiniteDifferencesCollocationMethod(
_fd_eval);
96 edges.addEqualityEdge(sys_edge);
105 edge->setFiniteDifferencesCollocationMethod(
_fd_eval);
106 edges.addEqualityEdge(edge);
109 if (nlp_fun.stage_inequalities && nlp_fun.stage_inequalities->hasIntegralTerms(k))
114 std::make_shared<corbo::TrapezoidalIntegralInequalityEdge>(
_x_seq[k],
_u_seq[k], x_next,
_dt, nlp_fun.stage_inequalities, k);
115 edges.addInequalityEdge(edge);
120 std::make_shared<corbo::LeftSumInequalityEdge>(
_x_seq[k],
_u_seq[k],
_dt, nlp_fun.stage_inequalities, k);
121 edges.addInequalityEdge(edge);
133 if (cost_edge) edges.addObjectiveEdge(cost_edge);
136 BaseEdge::Ptr constr_edge = nlp_fun.getFinalStateConstraintEdge(n - 1,
_xf);
139 if (nlp_fun.final_stage_constraints->isEqualityConstraint())
140 edges.addEqualityEdge(constr_edge);
142 edges.addInequalityEdge(constr_edge);
150 nlp_fun.getFinalControlDeviationEdges(n,
_u_ref,
_u_seq.back(),
_dt, cost_terms, eq_terms, ineq_terms);
151 for (
BaseEdge::Ptr& edge : cost_terms) edges.addObjectiveEdge(edge);
152 for (
BaseEdge::Ptr& edge : eq_terms) edges.addEqualityEdge(edge);
153 for (
BaseEdge::Ptr& edge : ineq_terms) edges.addInequalityEdge(edge);