quadratic_control_cost.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
25 #ifndef SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_QUADRATIC_CONTROL_COST_H_
26 #define SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_QUADRATIC_CONTROL_COST_H_
27 
30 
31 #include <memory>
32 
33 namespace corbo {
34 
35 class QuadraticControlCost : public StageCost
36 {
37  public:
38  QuadraticControlCost() { _R_sqrt = Eigen::MatrixXd::Constant(1, 1, 1); }
39 
40  QuadraticControlCost(const Eigen::Ref<const Eigen::MatrixXd>& R, bool integral_form = false, bool lsq_form = false)
41  : _integral_form(integral_form), _lsq_form(lsq_form)
42  {
43  setWeightR(R);
44  }
45 
46  StageCost::Ptr getInstance() const override { return std::make_shared<QuadraticControlCost>(); }
47 
50  void setLsqForm(bool lsq_form) { _lsq_form = lsq_form; }
51  void setIntegralForm(bool integral_form) { _integral_form = integral_form; }
52 
53  bool hasIntegralTerms(int k) const override { return _integral_form; }
54  bool hasNonIntegralTerms(int k) const override { return !_integral_form; }
55 
56  int getNonIntegralControlTermDimension(int k) const override { return !_integral_form ? (_lsq_form ? _R.rows() : 1) : 0; }
57  int getIntegralStateControlTermDimension(int k) const override { return _integral_form ? 1 : 0; }
58 
59  bool isLsqFormNonIntegralControlTerm(int k) const override { return !_integral_form && _lsq_form; }
60 
63  Eigen::Ref<Eigen::VectorXd> cost) const override;
64 
65  bool update(int n, double t, ReferenceTrajectoryInterface& xref, ReferenceTrajectoryInterface& uref, ReferenceTrajectoryInterface* sref,
66  bool single_dt, const Eigen::VectorXd& x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector<double>& dts,
67  const DiscretizationGridInterface* /*grid*/) override
68  {
69  _u_ref = &uref;
70 
72 
73  return false;
74  }
75 
76  bool checkParameters(int state_dim, int control_dim, std::stringstream* issues) const override;
77 
78 #ifdef MESSAGE_SUPPORT
79  virtual bool fromMessage(const messages::QuadraticControlCost& message, std::stringstream* issues);
80  virtual void toMessage(messages::QuadraticControlCost& message) const;
81 
82  bool fromMessage(const messages::StageCost& message, std::stringstream* issues) override
83  {
84  return fromMessage(message.quadratic_control_cost(), issues);
85  }
86  void toMessage(messages::StageCost& message) const override { toMessage(*message.mutable_quadratic_control_cost()); }
87 #endif
88 
89  protected:
90  Eigen::MatrixXd _R_sqrt;
91  Eigen::MatrixXd _R;
93  Eigen::DiagonalMatrix<double, -1> _R_diag;
94  bool _diagonal_mode = false;
96  bool _lsq_form = true;
97  bool _integral_form = false;
98 
99  const ReferenceTrajectoryInterface* _u_ref = nullptr;
100  bool _zero_u_ref = false;
101 };
103 
104 } // namespace corbo
105 
106 #endif // SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_QUADRATIC_CONTROL_COST_H_
corbo::QuadraticControlCost::_R_sqrt
Eigen::MatrixXd _R_sqrt
Definition: quadratic_control_cost.h:134
corbo::QuadraticControlCost::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: quadratic_control_cost.h:97
corbo::QuadraticControlCost::setIntegralForm
void setIntegralForm(bool integral_form)
Definition: quadratic_control_cost.h:95
corbo::QuadraticControlCost::_lsq_form
bool _lsq_form
Definition: quadratic_control_cost.h:140
corbo::QuadraticControlCost::setLsqForm
void setLsqForm(bool lsq_form)
Definition: quadratic_control_cost.h:94
Eigen::DiagonalMatrix< double, -1 >
corbo::StagePreprocessor::Ptr
std::shared_ptr< StagePreprocessor > Ptr
Definition: stage_preprocessor.h:66
corbo::ReferenceTrajectoryInterface
Interface class for reference trajectories.
Definition: reference_trajectory.h:82
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::QuadraticControlCost::_R_diag_sqrt
Eigen::DiagonalMatrix< double, -1 > _R_diag_sqrt
Definition: quadratic_control_cost.h:136
corbo::QuadraticControlCost::_diagonal_mode
bool _diagonal_mode
Definition: quadratic_control_cost.h:138
corbo::QuadraticControlCost::isLsqFormNonIntegralControlTerm
bool isLsqFormNonIntegralControlTerm(int k) const override
Definition: quadratic_control_cost.h:103
corbo::QuadraticControlCost::computeIntegralStateControlTerm
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
Definition: quadratic_control_cost.cpp:130
corbo::QuadraticControlCost::computeNonIntegralControlTerm
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: quadratic_control_cost.cpp:87
corbo::QuadraticControlCost
Definition: quadratic_control_cost.h:57
corbo::ReferenceTrajectoryInterface::isZero
virtual bool isZero() const
Definition: reference_trajectory.h:118
corbo::QuadraticControlCost::_zero_u_ref
bool _zero_u_ref
Definition: quadratic_control_cost.h:144
corbo::QuadraticControlCost::_diagonal_mode_intentionally
bool _diagonal_mode_intentionally
Definition: quadratic_control_cost.h:139
corbo::QuadraticControlCost::_R
Eigen::MatrixXd _R
Definition: quadratic_control_cost.h:135
corbo::StageCost::Ptr
std::shared_ptr< StageCost > Ptr
Definition: stage_functions.h:155
corbo::QuadraticControlCost::checkParameters
bool checkParameters(int state_dim, int control_dim, std::stringstream *issues) const override
Definition: quadratic_control_cost.cpp:155
corbo::QuadraticControlCost::_u_ref
const ReferenceTrajectoryInterface * _u_ref
Definition: quadratic_control_cost.h:143
corbo::QuadraticControlCost::setWeightR
bool setWeightR(const Eigen::Ref< const Eigen::MatrixXd > &R)
Definition: quadratic_control_cost.cpp:55
stage_functions.h
corbo::QuadraticControlCost::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: quadratic_control_cost.h:98
FACTORY_REGISTER_STAGE_COST
#define FACTORY_REGISTER_STAGE_COST(type)
Definition: stage_functions.h:170
corbo::QuadraticControlCost::update
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
Definition: quadratic_control_cost.h:109
Eigen::Ref
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
corbo::QuadraticControlCost::QuadraticControlCost
QuadraticControlCost()
Definition: quadratic_control_cost.h:82
corbo::QuadraticControlCost::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: quadratic_control_cost.h:101
n
PlainMatrixType mat * n
Definition: eigenvalues.cpp:41
reference_trajectory.h
corbo::QuadraticControlCost::_R_diag
Eigen::DiagonalMatrix< double, -1 > _R_diag
Definition: quadratic_control_cost.h:137
corbo::QuadraticControlCost::getNonIntegralControlTermDimension
int getNonIntegralControlTermDimension(int k) const override
Definition: quadratic_control_cost.h:100
corbo::QuadraticControlCost::getInstance
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Definition: quadratic_control_cost.h:90
corbo::QuadraticControlCost::_integral_form
bool _integral_form
Definition: quadratic_control_cost.h:141


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:06:08