hybrid_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_HYBRID_COST_H_
26 #define SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_HYBRID_COST_H_
27 
32 
33 #include <algorithm>
34 #include <cmath>
35 #include <memory>
36 
37 namespace corbo {
38 
39 class MinTimeQuadraticGainScheduled : public StageCost
40 {
41  public:
43 
44  StageCost::Ptr getInstance() const override { return std::make_shared<MinTimeQuadraticGainScheduled>(); }
45 
46  bool hasNonIntegralTerms(int k) const override
47  {
49  }
50  bool hasIntegralTerms(int k) const override { return _gain_quadratic > 1e-2 && _quad_cost.hasIntegralTerms(k); }
51 
52  int getNonIntegralDtTermDimension(int k) const override { return _gain_to > 1e-2 ? _min_time.getNonIntegralDtTermDimension(k) : 0; }
53  int getNonIntegralStateTermDimension(int k) const override { return _gain_quadratic > 1e-2 ? _quad_cost.getNonIntegralStateTermDimension(k) : 0; }
54  int getNonIntegralControlTermDimension(int k) const override
55  {
57  }
58  int getIntegralStateControlTermDimension(int k) const override
59  {
61  }
62 
63  bool isLsqFormNonIntegralStateTerm(int k) const override { return _quad_cost.isLsqFormNonIntegralStateTerm(k); }
64  bool isLsqFormNonIntegralControlTerm(int k) const override { return _quad_cost.isLsqFormNonIntegralControlTerm(k); }
65 
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
69  {
70  double prev_gain_quad = _gain_quadratic;
71  double prev_gain_to = _gain_to;
72 
73  if (_gain_quadratic > 1e-2)
74  {
75  // revert scaling to reset default weights
76  // TODO(roesmann) maybe better backup the default matrices
79  }
80 
81  bool changed = false;
82 
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;
85 
86  // compute distance to goal
87  Eigen::VectorXd xd = xref.getReferenceCached(n) - x0;
88  double dist = xd.transpose() * _quad_cost.getWeightQ() * xd; // TODO(roesmann): use qf?
89 
90  // calculate the tan hyperbolica to approximate a sigmoid function
91  // shift the tanh by "3" in order to align it approx. at the origin, such that f(0)=0;
92  double aux = 0.5 * std::tanh(_gamma * dist - 3);
93 
94  _gain_to = aux + 0.5; // normalize to [0,1]
95  _gain_quadratic = -aux + 0.5; // normalize to [0,1]
96 
97  if (_gain_quadratic > 1e-2)
98  {
99  // consider as active
102  }
103 
104  // update time-optimal weight
105  if (single_dt)
106  _min_time.setCustomWeight((double)(n - 1) * _gain_to);
107  else
108  _min_time.setCustomWeight(_gain_to); // default weight is 1
109 
110  if (changed) return true;
111 
112  if (_gain_to > 1e-2 && prev_gain_to <= 1e-2)
113  {
114  return true;
115  }
116  if (_gain_to <= 1e-2 && prev_gain_to > 1e-2)
117  {
118  return true;
119  }
120  if (_gain_quadratic > 1e-2 && prev_gain_quad <= 1e-2)
121  {
122  return true;
123  }
124  if (_gain_quadratic <= 1e-2 && prev_gain_quad > 1e-2)
125  {
126  return true;
127  }
128  return false;
129  }
130 
131  void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref<Eigen::VectorXd> cost) const override
132  {
133  _min_time.computeNonIntegralDtTerm(k, dt, cost);
134  }
135 
137  {
139  }
140 
142  {
144  }
145 
147  Eigen::Ref<Eigen::VectorXd> cost) const override
148  {
149  _quad_cost.computeIntegralStateControlTerm(k, x_k, u_k, cost);
150  }
151 
152 #ifdef MESSAGE_SUPPORT
153  bool fromMessage(const messages::StageCost& message, std::stringstream* issues) override
154  {
155  bool success = true;
156 
157  const messages::MinTimeQuadraticGainScheduled& msg = message.min_time_quad_form_gain_scheduled();
158 
159  success = success && _min_time.fromMessage(msg.minimum_time(), issues);
160  success = success && _quad_cost.fromMessage(msg.quadratic_form(), issues);
161 
162  _gamma = msg.scale();
163 
164  return success;
165  }
166 
167  void toMessage(messages::StageCost& message) const override
168  {
169  messages::MinTimeQuadraticGainScheduled* msg = message.mutable_min_time_quad_form_gain_scheduled();
170 
171  _min_time.toMessage(*msg->mutable_minimum_time());
172  _quad_cost.toMessage(*msg->mutable_quadratic_form());
173 
174  msg->set_scale(_gamma);
175  }
176 #endif
177 
178  protected:
181 
182  double _gamma = 0.1;
183 
184  double _gain_to = 1;
185  double _gain_quadratic = 0;
186 };
188 
189 class MinTimeQuadratic : public StageCost
190 {
191  public:
192  MinTimeQuadratic() = default;
193 
194  MinTimeQuadratic(const Eigen::Ref<const Eigen::MatrixXd>& Q, const Eigen::Ref<const Eigen::MatrixXd>& R, bool integral_form, bool lsq_form = false)
195  {
198  _quad_cost.setIntegralForm(integral_form);
199  _quad_cost.setLsqForm(lsq_form);
200  _min_time.setLsqForm(lsq_form);
201  }
202 
203  StageCost::Ptr getInstance() const override { return std::make_shared<MinTimeQuadratic>(); }
204 
205  bool hasNonIntegralTerms(int k) const override
206  {
208  }
209  bool hasIntegralTerms(int k) const override { return k >= _quad_k_min && _quad_cost.hasIntegralTerms(k); }
210 
212  int getNonIntegralStateTermDimension(int k) const override { return k >= _quad_k_min ? _quad_cost.getNonIntegralStateTermDimension(k) : 0; }
213  int getNonIntegralControlTermDimension(int k) const override { return k >= _quad_k_min ? _quad_cost.getNonIntegralControlTermDimension(k) : 0; }
214  int getIntegralStateControlTermDimension(int k) const override
215  {
217  }
218 
219  bool isLsqFormNonIntegralDtTerm(int k) const override { return _min_time.isLsqFormNonIntegralDtTerm(k); }
220  bool isLsqFormNonIntegralStateTerm(int k) const override { return _quad_cost.isLsqFormNonIntegralStateTerm(k); }
221  bool isLsqFormNonIntegralControlTerm(int k) const override { return _quad_cost.isLsqFormNonIntegralControlTerm(k); }
222 
224  bool single_dt, const Eigen::VectorXd& x0, StagePreprocessor::Ptr stage_preprocessor, const std::vector<double>& dts,
225  const DiscretizationGridInterface* grid) override
226  {
227  int quad_k_min = 0;
228  if (_only_last_n > 0)
229  {
230  quad_k_min = std::max(n - _only_last_n, 0); // TODO(roesmann) or plus 1
231  }
232 
233  bool changed = false;
234  if (quad_k_min != _quad_k_min)
235  {
236  changed = true;
237  _quad_k_min = quad_k_min;
238  }
239 
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;
242 
243  return changed;
244  }
245 
246  void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref<Eigen::VectorXd> cost) const override
247  {
248  _min_time.computeNonIntegralDtTerm(k, dt, cost);
249  }
250 
252  {
253  assert(k >= _quad_k_min);
255  }
256 
258  {
259  assert(k >= _quad_k_min);
261  }
262 
264  Eigen::Ref<Eigen::VectorXd> cost) const override
265  {
266  assert(k >= _quad_k_min);
267  _quad_cost.computeIntegralStateControlTerm(k, x_k, u_k, cost);
268  }
269 
270 #ifdef MESSAGE_SUPPORT
271  bool fromMessage(const messages::StageCost& message, std::stringstream* issues) override
272  {
273  bool success = true;
274 
275  const messages::MinTimeQuadratic& msg = message.min_time_quad_form();
276 
277  success = success && _min_time.fromMessage(msg.minimum_time(), issues);
278  success = success && _quad_cost.fromMessage(msg.quadratic_form(), issues);
279 
280  _only_last_n = msg.only_last_n();
281 
282  return success;
283  }
284 
285  void toMessage(messages::StageCost& message) const override
286  {
287  messages::MinTimeQuadratic* msg = message.mutable_min_time_quad_form();
288 
289  _min_time.toMessage(*msg->mutable_minimum_time());
290  _quad_cost.toMessage(*msg->mutable_quadratic_form());
291 
292  msg->set_only_last_n(_only_last_n);
293  }
294 #endif
295 
296  protected:
299 
300  int _only_last_n = 0;
301 
302  int _quad_k_min = 0;
303 };
304 FACTORY_REGISTER_STAGE_COST(MinTimeQuadratic)
305 
306 class MinTimeQuadraticControls : public StageCost
307 {
308  public:
309  MinTimeQuadraticControls() = default;
310 
311  MinTimeQuadraticControls(const Eigen::Ref<const Eigen::MatrixXd>& R, bool integral_form, bool lsq_form = false)
312  {
314  _quad_control_cost.setIntegralForm(integral_form);
315  _quad_control_cost.setLsqForm(lsq_form);
316  _min_time.setLsqForm(lsq_form);
317  }
318 
319  StageCost::Ptr getInstance() const override { return std::make_shared<MinTimeQuadraticControls>(); }
320 
321  bool hasNonIntegralTerms(int k) const override
322  {
324  }
325  bool hasIntegralTerms(int k) const override { return _quad_control_cost.hasIntegralTerms(k); }
326 
327  int getNonIntegralDtTermDimension(int k) const override { return _min_time.getNonIntegralDtTermDimension(k); }
329  int getIntegralStateControlTermDimension(int k) const override
330  {
332  }
333 
334  bool isLsqFormNonIntegralDtTerm(int k) const override { return _min_time.isLsqFormNonIntegralDtTerm(k); }
336 
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
340  {
341  bool changed = false;
342  if (_min_time.update(n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed = true;
343  if (_quad_control_cost.update(n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed = true;
344 
345  return changed;
346  }
347 
348  void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref<Eigen::VectorXd> cost) const override
349  {
351  }
352 
354  {
356  }
357 
359  Eigen::Ref<Eigen::VectorXd> cost) const override
360  {
362  }
363 
364 #ifdef MESSAGE_SUPPORT
365  bool fromMessage(const messages::StageCost& message, std::stringstream* issues) override
366  {
367  bool success = true;
368 
369  const messages::MinTimeQuadraticControls& msg = message.min_time_quad_controls();
370 
371  success = success && _min_time.fromMessage(msg.minimum_time(), issues);
372  success = success && _quad_control_cost.fromMessage(msg.quadratic_controls(), issues);
373 
374  return success;
375  }
376 
377  void toMessage(messages::StageCost& message) const override
378  {
379  messages::MinTimeQuadraticControls* msg = message.mutable_min_time_quad_controls();
380 
381  _min_time.toMessage(*msg->mutable_minimum_time());
382  _quad_control_cost.toMessage(*msg->mutable_quadratic_controls());
383  }
384 #endif
385 
386  protected:
389 };
390 FACTORY_REGISTER_STAGE_COST(MinTimeQuadraticControls)
391 
392 class MinTimeQuadraticStates : public StageCost
393 {
394  public:
395  MinTimeQuadraticStates() = default;
396 
397  MinTimeQuadraticStates(const Eigen::Ref<const Eigen::MatrixXd>& Q, bool integral_form, bool lsq_form = false)
398  {
400  _quad_state_cost.setIntegralForm(integral_form);
401  _quad_state_cost.setLsqForm(lsq_form);
402  _min_time.setLsqForm(lsq_form);
403  }
404 
405  StageCost::Ptr getInstance() const override { return std::make_shared<MinTimeQuadraticStates>(); }
406 
407  bool hasNonIntegralTerms(int k) const override
408  {
410  }
411  bool hasIntegralTerms(int k) const override { return _quad_state_cost.hasIntegralTerms(k); }
412 
413  int getNonIntegralDtTermDimension(int k) const override { return _min_time.getNonIntegralDtTermDimension(k); }
415  int getIntegralStateControlTermDimension(int k) const override
416  {
418  }
419 
420  bool isLsqFormNonIntegralDtTerm(int k) const override { return _min_time.isLsqFormNonIntegralDtTerm(k); }
421  bool isLsqFormNonIntegralStateTerm(int k) const override { return _quad_state_cost.isLsqFormNonIntegralStateTerm(k); }
422 
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
426  {
427  bool changed = false;
428  if (_min_time.update(n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed = true;
429  if (_quad_state_cost.update(n, t, xref, uref, sref, single_dt, x0, stage_preprocessor, dts, grid)) changed = true;
430 
431  return changed;
432  }
433 
434  void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref<Eigen::VectorXd> cost) const override
435  {
437  }
438 
440  {
442  }
443 
445  Eigen::Ref<Eigen::VectorXd> cost) const override
446  {
448  }
449 
450 #ifdef MESSAGE_SUPPORT
451  bool fromMessage(const messages::StageCost& message, std::stringstream* issues) override
452  {
453  bool success = true;
454 
455  const messages::MinTimeQuadraticStates& msg = message.min_time_quad_states();
456 
457  success = success && _min_time.fromMessage(msg.minimum_time(), issues);
458  success = success && _quad_state_cost.fromMessage(msg.quadratic_states(), issues);
459 
460  return success;
461  }
462 
463  void toMessage(messages::StageCost& message) const override
464  {
465  messages::MinTimeQuadraticStates* msg = message.mutable_min_time_quad_states();
466 
467  _min_time.toMessage(*msg->mutable_minimum_time());
468  _quad_state_cost.toMessage(*msg->mutable_quadratic_states());
469  }
470 #endif
471 
472  protected:
475 };
476 FACTORY_REGISTER_STAGE_COST(MinTimeQuadraticStates)
477 
478 } // namespace corbo
479 
480 #endif // SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_FUNCTIONS_HYBRID_COST_H_
corbo::QuadraticFormCost
Definition: quadratic_cost.h:57
corbo::MinTimeQuadratic::computeNonIntegralDtTerm
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:268
corbo::QuadraticStateCost::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_state_cost.h:109
corbo::QuadraticControlCost::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: quadratic_control_cost.h:97
corbo::MinTimeQuadratic::getNonIntegralStateTermDimension
int getNonIntegralStateTermDimension(int k) const override
Definition: hybrid_cost.h:234
corbo::QuadraticControlCost::setIntegralForm
void setIntegralForm(bool integral_form)
Definition: quadratic_control_cost.h:95
corbo::QuadraticControlCost::setLsqForm
void setLsqForm(bool lsq_form)
Definition: quadratic_control_cost.h:94
corbo::QuadraticStateCost::setWeightQ
bool setWeightQ(const Eigen::Ref< const Eigen::MatrixXd > &Q)
Definition: quadratic_state_cost.cpp:55
corbo::MinTimeQuadraticControls::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 *grid) override
Definition: hybrid_cost.h:359
corbo::QuadraticStateCost::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: quadratic_state_cost.h:96
corbo::MinTimeQuadraticGainScheduled::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 *grid) override
Definition: hybrid_cost.h:110
corbo::MinTimeQuadratic::computeNonIntegralStateTerm
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:273
corbo::MinTimeQuadratic::_quad_cost
QuadraticFormCost _quad_cost
Definition: hybrid_cost.h:320
corbo::MinTimeQuadraticControls::isLsqFormNonIntegralControlTerm
bool isLsqFormNonIntegralControlTerm(int k) const override
Definition: hybrid_cost.h:357
corbo::StageCost
Definition: stage_functions.h:152
corbo::MinTimeQuadraticGainScheduled::getInstance
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Definition: hybrid_cost.h:88
corbo::StagePreprocessor::Ptr
std::shared_ptr< StagePreprocessor > Ptr
Definition: stage_preprocessor.h:66
corbo::MinTimeQuadraticGainScheduled::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: hybrid_cost.h:102
corbo::QuadraticStateCost
Definition: quadratic_state_cost.h:57
corbo::MinTimeQuadraticGainScheduled::computeNonIntegralDtTerm
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:175
corbo::QuadraticFormCost::computeNonIntegralStateTerm
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: quadratic_cost.cpp:122
corbo::ReferenceTrajectoryInterface
Interface class for reference trajectories.
Definition: reference_trajectory.h:82
corbo::MinTimeQuadraticControls::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: hybrid_cost.h:343
corbo::MinimumTime::setCustomWeight
void setCustomWeight(double weight)
Definition: minimum_time.h:124
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::QuadraticStateCost::setLsqForm
void setLsqForm(bool lsq_form)
Definition: quadratic_state_cost.h:102
corbo::MinTimeQuadraticStates::getNonIntegralStateTermDimension
int getNonIntegralStateTermDimension(int k) const override
Definition: hybrid_cost.h:436
corbo::QuadraticFormCost::getNonIntegralControlTermDimension
int getNonIntegralControlTermDimension(int k) const override
Definition: quadratic_cost.h:104
corbo::QuadraticFormCost::getNonIntegralStateTermDimension
int getNonIntegralStateTermDimension(int k) const override
Definition: quadratic_cost.h:103
corbo::MinTimeQuadratic
Definition: hybrid_cost.h:211
corbo::QuadraticStateCost::isLsqFormNonIntegralStateTerm
bool isLsqFormNonIntegralStateTerm(int k) const override
Definition: quadratic_state_cost.h:98
corbo::MinTimeQuadraticStates::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: hybrid_cost.h:433
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::MinimumTime::update
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
Definition: minimum_time.h:96
corbo::MinTimeQuadraticGainScheduled::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: hybrid_cost.h:94
corbo::QuadraticFormCost::scaleCurrentWeightR
void scaleCurrentWeightR(double scale)
Definition: quadratic_cost.cpp:308
corbo::QuadraticStateCost::getNonIntegralStateTermDimension
int getNonIntegralStateTermDimension(int k) const override
Definition: quadratic_state_cost.h:95
corbo::MinTimeQuadraticControls::MinTimeQuadraticControls
MinTimeQuadraticControls()=default
corbo::MinTimeQuadraticStates::MinTimeQuadraticStates
MinTimeQuadraticStates()=default
corbo::MinimumTime::computeNonIntegralDtTerm
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: minimum_time.h:114
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::QuadraticFormCost::setWeightQ
bool setWeightQ(const Eigen::Ref< const Eigen::MatrixXd > &Q)
Definition: quadratic_cost.cpp:55
corbo::QuadraticControlCost
Definition: quadratic_control_cost.h:57
corbo::QuadraticFormCost::scaleCurrentWeightQ
void scaleCurrentWeightQ(double scale)
Definition: quadratic_cost.cpp:300
corbo::MinTimeQuadraticControls::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: hybrid_cost.h:380
corbo::MinTimeQuadraticStates::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 *grid) override
Definition: hybrid_cost.h:445
corbo::MinTimeQuadraticControls::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: hybrid_cost.h:351
corbo::MinTimeQuadraticGainScheduled::MinTimeQuadraticGainScheduled
MinTimeQuadraticGainScheduled()=default
corbo::MinTimeQuadraticGainScheduled::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: hybrid_cost.h:190
corbo::MinTimeQuadraticGainScheduled::computeNonIntegralStateTerm
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:180
corbo::MinTimeQuadratic::getNonIntegralDtTermDimension
int getNonIntegralDtTermDimension(int k) const override
Definition: hybrid_cost.h:233
corbo::MinTimeQuadraticGainScheduled
Definition: hybrid_cost.h:61
corbo::MinTimeQuadraticControls::getInstance
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Definition: hybrid_cost.h:341
corbo::StageCost::Ptr
std::shared_ptr< StageCost > Ptr
Definition: stage_functions.h:155
corbo::MinTimeQuadraticStates::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: hybrid_cost.h:437
corbo::QuadraticFormCost::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_cost.cpp:208
corbo::MinTimeQuadraticStates::_quad_state_cost
QuadraticStateCost _quad_state_cost
Definition: hybrid_cost.h:496
corbo::QuadraticFormCost::setWeightR
bool setWeightR(const Eigen::Ref< const Eigen::MatrixXd > &R)
Definition: quadratic_cost.cpp:89
corbo::MinTimeQuadratic::getInstance
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Definition: hybrid_cost.h:225
corbo::MinTimeQuadraticStates::computeNonIntegralDtTerm
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:456
corbo::MinTimeQuadratic::_quad_k_min
int _quad_k_min
Definition: hybrid_cost.h:324
corbo::MinTimeQuadraticGainScheduled::_min_time
MinimumTime _min_time
Definition: hybrid_cost.h:223
corbo::MinTimeQuadraticGainScheduled::_gain_to
double _gain_to
Definition: hybrid_cost.h:228
corbo::QuadraticFormCost::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: quadratic_cost.h:100
corbo::QuadraticStateCost::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: quadratic_state_cost.h:92
corbo::MinTimeQuadraticGainScheduled::getNonIntegralStateTermDimension
int getNonIntegralStateTermDimension(int k) const override
Definition: hybrid_cost.h:97
corbo::MinimumTime
Definition: minimum_time.h:57
corbo::MinTimeQuadratic::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: hybrid_cost.h:231
corbo::MinTimeQuadratic::_only_last_n
int _only_last_n
Definition: hybrid_cost.h:322
corbo::MinTimeQuadraticControls::computeNonIntegralDtTerm
void computeNonIntegralDtTerm(int k, double dt, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:370
corbo::QuadraticFormCost::computeNonIntegralControlTerm
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: quadratic_cost.cpp:165
corbo::MinimumTime::isLsqFormNonIntegralDtTerm
bool isLsqFormNonIntegralDtTerm(int k) const override
Definition: minimum_time.h:94
corbo::QuadraticControlCost::setWeightR
bool setWeightR(const Eigen::Ref< const Eigen::MatrixXd > &R)
Definition: quadratic_control_cost.cpp:55
corbo::MinTimeQuadraticGainScheduled::computeNonIntegralControlTerm
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:185
corbo::MinTimeQuadraticGainScheduled::getNonIntegralControlTermDimension
int getNonIntegralControlTermDimension(int k) const override
Definition: hybrid_cost.h:98
corbo::QuadraticFormCost::setIntegralForm
void setIntegralForm(bool integral_form)
Definition: quadratic_cost.h:116
corbo::MinTimeQuadraticControls::getNonIntegralDtTermDimension
int getNonIntegralDtTermDimension(int k) const override
Definition: hybrid_cost.h:349
corbo::MinTimeQuadratic::getNonIntegralControlTermDimension
int getNonIntegralControlTermDimension(int k) const override
Definition: hybrid_cost.h:235
corbo::MinTimeQuadraticStates::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: hybrid_cost.h:466
corbo::MinTimeQuadraticGainScheduled::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: hybrid_cost.h:90
corbo::MinTimeQuadratic::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 *grid) override
Definition: hybrid_cost.h:245
corbo::MinTimeQuadraticControls::_min_time
MinimumTime _min_time
Definition: hybrid_cost.h:409
corbo::QuadraticStateCost::computeNonIntegralStateTerm
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: quadratic_state_cost.cpp:87
corbo::QuadraticControlCost::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: quadratic_control_cost.h:98
corbo::MinTimeQuadratic::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: hybrid_cost.h:285
corbo::MinTimeQuadratic::_min_time
MinimumTime _min_time
Definition: hybrid_cost.h:319
corbo::QuadraticFormCost::isLsqFormNonIntegralStateTerm
bool isLsqFormNonIntegralStateTerm(int k) const override
Definition: quadratic_cost.h:107
corbo::MinTimeQuadraticGainScheduled::getNonIntegralDtTermDimension
int getNonIntegralDtTermDimension(int k) const override
Definition: hybrid_cost.h:96
FACTORY_REGISTER_STAGE_COST
#define FACTORY_REGISTER_STAGE_COST(type)
Definition: stage_functions.h:170
corbo::MinTimeQuadraticControls::isLsqFormNonIntegralDtTerm
bool isLsqFormNonIntegralDtTerm(int k) const override
Definition: hybrid_cost.h:356
corbo::MinTimeQuadraticControls::_quad_control_cost
QuadraticControlCost _quad_control_cost
Definition: hybrid_cost.h:410
quadratic_cost.h
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
corbo::QuadraticStateCost::setIntegralForm
void setIntegralForm(bool integral_form)
Definition: quadratic_state_cost.h:103
corbo::MinTimeQuadraticStates::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: hybrid_cost.h:429
tanh
const EIGEN_DEVICE_FUNC TanhReturnType tanh() const
Definition: ArrayCwiseUnaryOps.h:290
Eigen::Ref
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
corbo::QuadraticFormCost::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_cost.h:125
corbo::MinTimeQuadraticStates::isLsqFormNonIntegralDtTerm
bool isLsqFormNonIntegralDtTerm(int k) const override
Definition: hybrid_cost.h:442
corbo::QuadraticStateCost::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: quadratic_state_cost.h:93
corbo::MinTimeQuadraticGainScheduled::_gain_quadratic
double _gain_quadratic
Definition: hybrid_cost.h:229
corbo::QuadraticFormCost::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: quadratic_cost.h:105
corbo::MinTimeQuadratic::isLsqFormNonIntegralControlTerm
bool isLsqFormNonIntegralControlTerm(int k) const override
Definition: hybrid_cost.h:243
corbo::MinTimeQuadratic::computeNonIntegralControlTerm
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:279
corbo::MinTimeQuadraticStates::isLsqFormNonIntegralStateTerm
bool isLsqFormNonIntegralStateTerm(int k) const override
Definition: hybrid_cost.h:443
corbo::MinimumTime::setLsqForm
void setLsqForm(bool lsq_form)
Definition: minimum_time.h:131
quadratic_state_cost.h
corbo::MinTimeQuadraticGainScheduled::isLsqFormNonIntegralStateTerm
bool isLsqFormNonIntegralStateTerm(int k) const override
Definition: hybrid_cost.h:107
corbo::QuadraticFormCost::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: quadratic_cost.h:101
corbo::MinTimeQuadraticGainScheduled::isLsqFormNonIntegralControlTerm
bool isLsqFormNonIntegralControlTerm(int k) const override
Definition: hybrid_cost.h:108
quadratic_control_cost.h
corbo::MinimumTime::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: minimum_time.h:90
corbo::MinTimeQuadraticStates::getNonIntegralDtTermDimension
int getNonIntegralDtTermDimension(int k) const override
Definition: hybrid_cost.h:435
corbo::MinTimeQuadraticStates::computeNonIntegralStateTerm
void computeNonIntegralStateTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &x_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:461
corbo::MinTimeQuadraticControls::computeNonIntegralControlTerm
void computeNonIntegralControlTerm(int k, const Eigen::Ref< const Eigen::VectorXd > &u_k, Eigen::Ref< Eigen::VectorXd > cost) const override
Definition: hybrid_cost.h:375
minimum_time.h
corbo::QuadraticControlCost::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: quadratic_control_cost.h:101
n
PlainMatrixType mat * n
Definition: eigenvalues.cpp:41
corbo::MinTimeQuadraticStates::getInstance
StageCost::Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Definition: hybrid_cost.h:427
corbo::MinTimeQuadratic::MinTimeQuadratic
MinTimeQuadratic()=default
corbo::QuadraticFormCost::getWeightQ
const Eigen::MatrixXd & getWeightQ() const
Definition: quadratic_cost.h:143
corbo::MinimumTime::getNonIntegralDtTermDimension
int getNonIntegralDtTermDimension(int k) const override
Definition: minimum_time.h:93
corbo::MinTimeQuadraticGainScheduled::_quad_cost
QuadraticFormCost _quad_cost
Definition: hybrid_cost.h:224
corbo::QuadraticFormCost::isLsqFormNonIntegralControlTerm
bool isLsqFormNonIntegralControlTerm(int k) const override
Definition: quadratic_cost.h:108
max
#define max(a, b)
Definition: datatypes.h:20
corbo::MinTimeQuadraticGainScheduled::_gamma
double _gamma
Definition: hybrid_cost.h:226
corbo::QuadraticStateCost::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_state_cost.cpp:130
corbo::MinTimeQuadraticStates::_min_time
MinimumTime _min_time
Definition: hybrid_cost.h:495
corbo::QuadraticControlCost::getNonIntegralControlTermDimension
int getNonIntegralControlTermDimension(int k) const override
Definition: quadratic_control_cost.h:100
corbo::MinTimeQuadratic::hasNonIntegralTerms
bool hasNonIntegralTerms(int k) const override
Definition: hybrid_cost.h:227
corbo::MinTimeQuadratic::isLsqFormNonIntegralDtTerm
bool isLsqFormNonIntegralDtTerm(int k) const override
Definition: hybrid_cost.h:241
corbo::MinTimeQuadraticControls::getNonIntegralControlTermDimension
int getNonIntegralControlTermDimension(int k) const override
Definition: hybrid_cost.h:350
corbo::MinTimeQuadraticControls::hasIntegralTerms
bool hasIntegralTerms(int k) const override
Definition: hybrid_cost.h:347
corbo::QuadraticFormCost::setLsqForm
void setLsqForm(bool lsq_form)
Definition: quadratic_cost.h:115
corbo::MinTimeQuadratic::isLsqFormNonIntegralStateTerm
bool isLsqFormNonIntegralStateTerm(int k) const override
Definition: hybrid_cost.h:242
corbo::MinTimeQuadratic::getIntegralStateControlTermDimension
int getIntegralStateControlTermDimension(int k) const override
Definition: hybrid_cost.h:236
corbo::DiscretizationGridInterface
Generic interface class for discretization grids.
Definition: discretization_grid_interface.h:104


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