Go to the documentation of this file.
25 #ifndef SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_HYBRID_COST_H_
26 #define SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_HYBRID_COST_H_
39 class MinTimeQuadraticGainScheduled :
public StageCost
66 bool update(
int n,
double t, ReferenceTrajectoryInterface& xref, ReferenceTrajectoryInterface& uref, ReferenceTrajectoryInterface* sref,
67 bool single_dt,
const Eigen::VectorXd& x0,
StagePreprocessor::Ptr stage_preprocessor,
const std::vector<double>& dts,
68 const DiscretizationGridInterface* grid)
override
83 if (
_min_time.
update(
n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed =
true;
84 if (
_quad_cost.
update(
n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed =
true;
87 Eigen::VectorXd xd = xref.getReferenceCached(
n) - x0;
110 if (changed)
return true;
112 if (
_gain_to > 1e-2 && prev_gain_to <= 1e-2)
116 if (_gain_to <= 1e-2 && prev_gain_to > 1e-2)
124 if (_gain_quadratic <= 1e-2 && prev_gain_quad > 1e-2)
152 #ifdef MESSAGE_SUPPORT
153 bool fromMessage(
const messages::StageCost& message, std::stringstream* issues)
override
157 const messages::MinTimeQuadraticGainScheduled& msg = message.min_time_quad_form_gain_scheduled();
159 success = success &&
_min_time.fromMessage(msg.minimum_time(), issues);
160 success = success &&
_quad_cost.fromMessage(msg.quadratic_form(), issues);
167 void toMessage(messages::StageCost& message)
const override
169 messages::MinTimeQuadraticGainScheduled* msg = message.mutable_min_time_quad_form_gain_scheduled();
171 _min_time.toMessage(*msg->mutable_minimum_time());
172 _quad_cost.toMessage(*msg->mutable_quadratic_form());
233 bool changed =
false;
240 if (
_min_time.
update(
n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed =
true;
241 if (
_quad_cost.
update(
n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed =
true;
270 #ifdef MESSAGE_SUPPORT
271 bool fromMessage(
const messages::StageCost& message, std::stringstream* issues)
override
275 const messages::MinTimeQuadratic& msg = message.min_time_quad_form();
277 success = success &&
_min_time.fromMessage(msg.minimum_time(), issues);
278 success = success &&
_quad_cost.fromMessage(msg.quadratic_form(), issues);
285 void toMessage(messages::StageCost& message)
const override
287 messages::MinTimeQuadratic* msg = message.mutable_min_time_quad_form();
289 _min_time.toMessage(*msg->mutable_minimum_time());
290 _quad_cost.toMessage(*msg->mutable_quadratic_form());
306 class MinTimeQuadraticControls :
public StageCost
337 bool update(
int n,
double t, ReferenceTrajectoryInterface& xref, ReferenceTrajectoryInterface& uref, ReferenceTrajectoryInterface* sref,
338 bool single_dt,
const Eigen::VectorXd& x0,
StagePreprocessor::Ptr stage_preprocessor,
const std::vector<double>& dts,
339 const DiscretizationGridInterface* grid)
override
341 bool changed =
false;
342 if (
_min_time.
update(
n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed =
true;
364 #ifdef MESSAGE_SUPPORT
365 bool fromMessage(
const messages::StageCost& message, std::stringstream* issues)
override
369 const messages::MinTimeQuadraticControls& msg = message.min_time_quad_controls();
371 success = success &&
_min_time.fromMessage(msg.minimum_time(), issues);
372 success = success &&
_quad_control_cost.fromMessage(msg.quadratic_controls(), issues);
377 void toMessage(messages::StageCost& message)
const override
379 messages::MinTimeQuadraticControls* msg = message.mutable_min_time_quad_controls();
381 _min_time.toMessage(*msg->mutable_minimum_time());
392 class MinTimeQuadraticStates :
public StageCost
423 bool update(
int n,
double t, ReferenceTrajectoryInterface& xref, ReferenceTrajectoryInterface& uref, ReferenceTrajectoryInterface* sref,
424 bool single_dt,
const Eigen::VectorXd& x0,
StagePreprocessor::Ptr stage_preprocessor,
const std::vector<double>& dts,
425 const DiscretizationGridInterface* grid)
override
427 bool changed =
false;
428 if (
_min_time.
update(
n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed =
true;
450 #ifdef MESSAGE_SUPPORT
451 bool fromMessage(
const messages::StageCost& message, std::stringstream* issues)
override
455 const messages::MinTimeQuadraticStates& msg = message.min_time_quad_states();
457 success = success &&
_min_time.fromMessage(msg.minimum_time(), issues);
458 success = success &&
_quad_state_cost.fromMessage(msg.quadratic_states(), issues);
463 void toMessage(messages::StageCost& message)
const override
465 messages::MinTimeQuadraticStates* msg = message.mutable_min_time_quad_states();
467 _min_time.toMessage(*msg->mutable_minimum_time());
480 #endif // SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_HYBRID_COST_H_
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
bool update(int n, double t, ReferenceTrajectoryInterface &xref, ReferenceTrajectoryInterface &uref, ReferenceTrajectoryInterface *sref, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *) override
bool hasIntegralTerms(int k) const override
int getNonIntegralStateTermDimension(int k) const override
void setIntegralForm(bool integral_form)
void setLsqForm(bool lsq_form)
bool setWeightQ(const Eigen::Ref< const Eigen::MatrixXd > &Q)
bool update(int n, double t, ReferenceTrajectoryInterface &xref, ReferenceTrajectoryInterface &uref, ReferenceTrajectoryInterface *sref, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *grid) override
int getIntegralStateControlTermDimension(int k) const override
bool update(int n, double t, ReferenceTrajectoryInterface &xref, ReferenceTrajectoryInterface &uref, ReferenceTrajectoryInterface *sref, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *grid) override
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
QuadraticFormCost _quad_cost
bool isLsqFormNonIntegralControlTerm(int k) const override
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
std::shared_ptr< StagePreprocessor > Ptr
int getIntegralStateControlTermDimension(int k) const override
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
Interface class for reference trajectories.
bool hasNonIntegralTerms(int k) const override
void setCustomWeight(double weight)
void setLsqForm(bool lsq_form)
int getNonIntegralStateTermDimension(int k) const override
bool isLsqFormNonIntegralStateTerm(int k) const override
bool hasIntegralTerms(int k) const override
bool isLsqFormNonIntegralControlTerm(int k) const override
void computeIntegralStateControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
bool update(int n, double, ReferenceTrajectoryInterface &, ReferenceTrajectoryInterface &, ReferenceTrajectoryInterface *, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *) override
bool hasIntegralTerms(int k) const override
int getNonIntegralStateTermDimension(int k) const override
MinTimeQuadraticControls()=default
MinTimeQuadraticStates()=default
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
void computeIntegralStateControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
bool update(int n, double t, ReferenceTrajectoryInterface &xref, ReferenceTrajectoryInterface &uref, ReferenceTrajectoryInterface *sref, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *grid) override
int getIntegralStateControlTermDimension(int k) const override
MinTimeQuadraticGainScheduled()=default
void computeIntegralStateControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
int getNonIntegralDtTermDimension(int k) const override
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
std::shared_ptr< StageCost > Ptr
int getIntegralStateControlTermDimension(int k) const override
QuadraticStateCost _quad_state_cost
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
bool hasIntegralTerms(int k) const override
int getNonIntegralStateTermDimension(int k) const override
bool hasIntegralTerms(int k) const override
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
bool isLsqFormNonIntegralDtTerm(int k) const override
bool setWeightR(const Eigen::Ref< const Eigen::MatrixXd > &R)
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
int getNonIntegralControlTermDimension(int k) const override
int getNonIntegralDtTermDimension(int k) const override
int getNonIntegralControlTermDimension(int k) const override
void computeIntegralStateControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
bool hasNonIntegralTerms(int k) const override
bool update(int n, double t, ReferenceTrajectoryInterface &xref, ReferenceTrajectoryInterface &uref, ReferenceTrajectoryInterface *sref, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *grid) override
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
bool hasNonIntegralTerms(int k) const override
void computeIntegralStateControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
int getNonIntegralDtTermDimension(int k) const override
#define FACTORY_REGISTER_STAGE_COST(type)
bool isLsqFormNonIntegralDtTerm(int k) const override
QuadraticControlCost _quad_control_cost
bool update(int n, double t, ReferenceTrajectoryInterface &xref, ReferenceTrajectoryInterface &uref, ReferenceTrajectoryInterface *sref, bool single_dt, const Eigen::VectorXd &x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector< double > &dts, const DiscretizationGridInterface *) override
void setIntegralForm(bool integral_form)
bool hasNonIntegralTerms(int k) const override
const EIGEN_DEVICE_FUNC TanhReturnType tanh() const
A matrix or vector expression mapping an existing expression.
bool isLsqFormNonIntegralDtTerm(int k) const override
bool hasNonIntegralTerms(int k) const override
bool isLsqFormNonIntegralControlTerm(int k) const override
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
bool isLsqFormNonIntegralStateTerm(int k) const override
void setLsqForm(bool lsq_form)
bool isLsqFormNonIntegralStateTerm(int k) const override
bool isLsqFormNonIntegralControlTerm(int k) const override
bool hasNonIntegralTerms(int k) const override
int getNonIntegralDtTermDimension(int k) const override
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
int getIntegralStateControlTermDimension(int k) const override
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
MinTimeQuadratic()=default
int getNonIntegralDtTermDimension(int k) const override
QuadraticFormCost _quad_cost
void computeIntegralStateControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
int getNonIntegralControlTermDimension(int k) const override
bool hasNonIntegralTerms(int k) const override
bool isLsqFormNonIntegralDtTerm(int k) const override
int getNonIntegralControlTermDimension(int k) const override
bool hasIntegralTerms(int k) const override
bool isLsqFormNonIntegralStateTerm(int k) const override
int getIntegralStateControlTermDimension(int k) const override
Generic interface class for discretization grids.
control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:48