25 #ifndef SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_FINAL_STATE_CONSTRAINTS_H_
26 #define SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_FINAL_STATE_CONSTRAINTS_H_
38 class TerminalBall :
public FinalStageConstraint
41 using Ptr = std::shared_ptr<TerminalBall>;
42 using ConstPtr = std::shared_ptr<const TerminalBall>;
67 bool update(
int n,
double t, ReferenceTrajectoryInterface& xref, ReferenceTrajectoryInterface& uref, ReferenceTrajectoryInterface* sref,
69 const std::vector<double>& dts,
const DiscretizationGridInterface* )
override
80 #ifdef MESSAGE_SUPPORT
81 bool fromMessage(
const messages::FinalStageConstraints& message, std::stringstream* issues)
override;
82 void toMessage(messages::FinalStageConstraints& message)
const override;
101 using Ptr = std::shared_ptr<TerminalBallInheritFromCost>;
102 using ConstPtr = std::shared_ptr<const TerminalBallInheritFromCost>;
108 int getNonIntegralStateTermDimension(
int k)
const override {
return 1; }
119 bool checkParameters(
int state_dim,
int control_dim,
FinalStageCost::ConstPtr final_stage_cost, std::stringstream* issues)
const override;
121 #ifdef MESSAGE_SUPPORT
122 bool fromMessage(
const messages::FinalStageConstraints& message, std::stringstream* issues)
override;
123 void toMessage(messages::FinalStageConstraints& message)
const override;
133 using Ptr = std::shared_ptr<TerminalEqualityConstraint>;
134 using ConstPtr = std::shared_ptr<const TerminalEqualityConstraint>;
142 bool isEqualityConstraint()
const override {
return true; }
144 int getNonIntegralStateTermDimension(
int k)
const override {
return _xref.size(); }
147 const Eigen::VectorXd& getXRef()
const {
return _xref; }
151 assert(x_k.size() == _xref.size());
152 assert(cost.size() == _xref.size());
163 bool checkParameters(
int state_dim,
int control_dim,
FinalStageCost::ConstPtr final_stage_cost, std::stringstream* issues)
const override
165 if (state_dim != _xref.size())
168 *issues <<
"TerminalEqualityConstraint: Dimension of xref (" << _xref.size() <<
") does not coincide with state dimension ("
169 << state_dim <<
")." << std::endl;
174 #ifdef MESSAGE_SUPPORT
175 bool fromMessage(
const messages::TerminalEqualityConstraint& message, std::stringstream* issues)
180 void toMessage(messages::TerminalEqualityConstraint& message)
const
182 message.mutable_x_ref()->Resize(_xref.size(), 0);
186 bool fromMessage(
const messages::FinalStageConstraints& message, std::stringstream* issues)
override
188 return fromMessage(message.terminal_equality_constraint(), issues);
190 void toMessage(messages::FinalStageConstraints& message)
const override { toMessage(*message.mutable_terminal_equality_constraint()); }
194 Eigen::VectorXd _xref;
198 class TerminalPartialEqualityConstraint :
public TerminalEqualityConstraint
201 using Ptr = std::shared_ptr<TerminalPartialEqualityConstraint>;
202 using ConstPtr = std::shared_ptr<const TerminalPartialEqualityConstraint>;
241 cost[idx] = x_k[i] -
_xref[i];
248 bool update(
int n,
double t, ReferenceTrajectoryInterface& xref, ReferenceTrajectoryInterface& uref, ReferenceTrajectoryInterface* sref,
257 if (state_dim !=
_xref.size())
260 *issues <<
"TerminalEqualityConstraint: Dimension of xref (" <<
_xref.size() <<
") does not coincide with state dimension ("
261 << state_dim <<
")." << std::endl;
266 *issues <<
"TerminalEqualityConstraint: Dimension of active_components (" <<
_active_components.size()
267 <<
") does not coincide with state dimension (" << state_dim <<
")." << std::endl;
272 #ifdef MESSAGE_SUPPORT
273 bool fromMessage(
const messages::TerminalPartialEqualityConstraint& message, std::stringstream* issues)
280 void toMessage(messages::TerminalPartialEqualityConstraint& message)
const
282 message.mutable_x_ref()->Resize(
_xref.size(), 0);
294 bool fromMessage(
const messages::FinalStageConstraints& message, std::stringstream* issues)
override
296 return fromMessage(message.terminal_partial_eq_constr(), issues);
298 void toMessage(messages::FinalStageConstraints& message)
const override { toMessage(*message.mutable_terminal_partial_eq_constr()); }
309 #endif // SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_FINAL_STATE_CONSTRAINTS_H_