- 3.0.2 optimal control module.
GNRiccatiSolver.hpp
Go to the documentation of this file.
1 /**********************************************************************************************************************
2 This file is part of the Control Toolbox (https://github.com/ethz-adrl/control-toolbox), copyright by ETH Zurich.
3 Licensed under the BSD-2 license (see LICENSE file in main directory)
4 **********************************************************************************************************************/
5 
6 #pragma once
7 
8 #include "LQOCSolver.hpp"
9 
10 #ifdef MATLAB_FULL_LOG
11 #include <ct/optcon/matlab.hpp>
12 #endif
13 
14 namespace ct {
15 namespace optcon {
16 
21 template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
22 class GNRiccatiSolver : public LQOCSolver<STATE_DIM, CONTROL_DIM, SCALAR>
23 {
24 public:
25  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
26 
27  static const int state_dim = STATE_DIM;
28  static const int control_dim = CONTROL_DIM;
29 
31 
39 
42 
43  GNRiccatiSolver(const std::shared_ptr<LQOCProblem_t>& lqocProblem = nullptr);
44 
45  GNRiccatiSolver(int N);
46 
47  virtual void solve() override;
48 
49  virtual void initializeAndAllocate() override;
50 
51  virtual void solveSingleStage(int N) override;
52 
53  virtual void configure(const NLOptConSettings& settings) override;
54 
55  virtual void computeStatesAndControls() override;
56 
57  virtual void computeFeedbackMatrices() override;
58 
59  virtual void compute_lv() override;
60 
61  virtual SCALAR getSmallestEigenvalue() override;
62 
63 protected:
68  virtual void setProblemImpl(std::shared_ptr<LQOCProblem_t> lqocProblem) override;
69 
70  void changeNumberOfStages(int N);
71 
72  void initializeCostToGo();
73 
74  void computeCostToGo(size_t k);
75 
76  void designController(size_t k);
77 
78  void logToMatlab();
79 
81 
82  ControlVectorArray gv_;
83  FeedbackArray G_;
84 
85  ControlMatrixArray H_;
86  ControlMatrixArray Hi_;
87  ControlMatrixArray Hi_inverse_;
88  ControlMatrix H_corrFix_;
89 
90  StateVectorArray sv_;
91  StateMatrixArray S_;
92 
93  int N_;
94 
96 
98  Eigen::SelfAdjointEigenSolver<Eigen::Matrix<SCALAR, CONTROL_DIM, CONTROL_DIM>> eigenvalueSolver_;
99 
101 #ifdef MATLAB_FULL_LOG
102  matlab::MatFile matFile_;
103 #endif //MATLAB
104 };
105 
106 
107 } // namespace optcon
108 } // namespace ct
ct::core::ControlVectorArray< CONTROL_DIM, SCALAR > ControlVectorArray
Definition: GNRiccatiSolver.hpp:41
void changeNumberOfStages(int N)
Definition: GNRiccatiSolver-impl.hpp:103
ct::core::StateMatrix< STATE_DIM, SCALAR > StateMatrix
Definition: GNRiccatiSolver.hpp:32
virtual void compute_lv() override
compute iLQR-style lv
Definition: GNRiccatiSolver-impl.hpp:78
ControlMatrix H_corrFix_
Definition: GNRiccatiSolver.hpp:88
virtual void setProblemImpl(std::shared_ptr< LQOCProblem_t > lqocProblem) override
Definition: GNRiccatiSolver-impl.hpp:89
SCALAR smallestEigenvalue_
Definition: GNRiccatiSolver.hpp:95
LQOCProblem< STATE_DIM, CONTROL_DIM, SCALAR > LQOCProblem_t
Definition: GNRiccatiSolver.hpp:30
static const int control_dim
Definition: GNRiccatiSolver.hpp:28
static EIGEN_MAKE_ALIGNED_OPERATOR_NEW const int state_dim
Definition: GNRiccatiSolver.hpp:27
virtual void solve() override
solve the LQOC problem
Definition: GNRiccatiSolver-impl.hpp:28
virtual SCALAR getSmallestEigenvalue() override
return the smallest eigenvalue
Definition: GNRiccatiSolver-impl.hpp:83
ct::core::StateVectorArray< STATE_DIM, SCALAR > StateVectorArray
Definition: GNRiccatiSolver.hpp:40
virtual void configure(const NLOptConSettings &settings) override
Definition: GNRiccatiSolver-impl.hpp:49
ct::core::ControlVector< CONTROL_DIM, SCALAR > ControlVector
Definition: GNRiccatiSolver.hpp:34
ct::core::ControlMatrix< CONTROL_DIM, SCALAR > ControlMatrix
Definition: GNRiccatiSolver.hpp:35
Settings for the NLOptCon algorithm.
Definition: NLOptConSettings.hpp:198
CppAD::AD< CppAD::cg::CG< double > > SCALAR
void initializeCostToGo()
Definition: GNRiccatiSolver-impl.hpp:132
void designController(size_t k)
Definition: GNRiccatiSolver-impl.hpp:167
Defines a Linear-Quadratic Optimal Control Problem, which is optionally constrained.
Definition: LQOCProblem.hpp:57
void logToMatlab()
Definition: GNRiccatiSolver-impl.hpp:266
GNRiccatiSolver(const std::shared_ptr< LQOCProblem_t > &lqocProblem=nullptr)
Definition: GNRiccatiSolver-impl.hpp:13
ct::core::StateControlMatrixArray< STATE_DIM, CONTROL_DIM, SCALAR > StateControlMatrixArray
Definition: GNRiccatiSolver.hpp:37
ControlMatrixArray H_
Definition: GNRiccatiSolver.hpp:85
StateMatrixArray S_
Definition: GNRiccatiSolver.hpp:91
Definition: GNRiccatiSolver.hpp:22
ct::core::StateMatrixArray< STATE_DIM, SCALAR > StateMatrixArray
Definition: GNRiccatiSolver.hpp:33
ControlMatrixArray Hi_inverse_
Definition: GNRiccatiSolver.hpp:87
void computeCostToGo(size_t k)
Definition: GNRiccatiSolver-impl.hpp:147
virtual void computeStatesAndControls() override
extract the solution (can be overriden if additional extraction steps required in specific solver) ...
Definition: GNRiccatiSolver-impl.hpp:56
virtual void computeFeedbackMatrices() override
return TVLQR feedback matrices
Definition: GNRiccatiSolver-impl.hpp:73
ct::core::ControlMatrixArray< CONTROL_DIM, SCALAR > ControlMatrixArray
Definition: GNRiccatiSolver.hpp:36
ControlMatrixArray Hi_
Definition: GNRiccatiSolver.hpp:86
FeedbackArray G_
Definition: GNRiccatiSolver.hpp:83
a dummy class which is created for compatibility reasons if the MATLAB flag is not set...
Definition: matlab.hpp:17
ControlVectorArray gv_
Definition: GNRiccatiSolver.hpp:82
ct::core::FeedbackArray< STATE_DIM, CONTROL_DIM, SCALAR > FeedbackArray
Definition: GNRiccatiSolver.hpp:38
virtual void initializeAndAllocate() override
a method reserved for memory allocation (e.g. required for HPIPM)
Definition: GNRiccatiSolver-impl.hpp:286
int N_
Definition: GNRiccatiSolver.hpp:93
Eigen::SelfAdjointEigenSolver< Eigen::Matrix< SCALAR, CONTROL_DIM, CONTROL_DIM > > eigenvalueSolver_
Eigenvalue solver, used for inverting the Hessian and for regularization.
Definition: GNRiccatiSolver.hpp:98
NLOptConSettings settings_
Definition: GNRiccatiSolver.hpp:80
virtual void solveSingleStage(int N) override
Definition: GNRiccatiSolver-impl.hpp:36
StateVectorArray sv_
Definition: GNRiccatiSolver.hpp:90
Definition: LQOCSolver.hpp:22