solver_lqr
FiniteDifferences.hpp
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <cmath>
12 #include <vector>
14 
15 namespace solverlqr {
16 
18  {
19  public:
20  FiniteDifferences() : h_devs_(std::pow(2.,-17)), is_initialized_(false) {}
22 
23  void initialize(OcpBase* ocp_description,
24  bool compute_objective_first_derivatives = false, bool compute_dynamics_first_derivatives = false,
25  bool compute_objective_second_derivatives = false, bool compute_dynamics_second_derivatives = false);
26  const OcpBase* getOcpDescription() const { return ocp_; }
27  void computeDerivatives();
28 
29  Eigen::MatrixXd& fx(int time_id) { return fx_seq_[time_id]; }
30  Eigen::MatrixXd& fu(int time_id) { return fu_seq_[time_id]; }
31  const Eigen::MatrixXd& fx(int time_id) const { return fx_seq_[time_id]; }
32  const Eigen::MatrixXd& fu(int time_id) const { return fu_seq_[time_id]; }
33  std::vector<Eigen::MatrixXd>& fxx(int time_id) { return fxx_seq_[time_id]; }
34  std::vector<Eigen::MatrixXd>& fxu(int time_id) { return fxu_seq_[time_id]; }
35  std::vector<Eigen::MatrixXd>& fuu(int time_id) { return fuu_seq_[time_id]; }
36  const std::vector<Eigen::MatrixXd>& fxx(int time_id) const { return fxx_seq_[time_id]; }
37  const std::vector<Eigen::MatrixXd>& fxu(int time_id) const { return fxu_seq_[time_id]; }
38  const std::vector<Eigen::MatrixXd>& fuu(int time_id) const { return fuu_seq_[time_id]; }
39 
40  Eigen::VectorXd& cx(int time_id) { return cx_seq_[time_id]; }
41  Eigen::VectorXd& cu(int time_id) { return cu_seq_[time_id]; }
42  Eigen::MatrixXd& cxx(int time_id) { return cxx_seq_[time_id]; }
43  Eigen::MatrixXd& cxu(int time_id) { return cxu_seq_[time_id]; }
44  Eigen::MatrixXd& cuu(int time_id) { return cuu_seq_[time_id]; }
45  const Eigen::VectorXd& cx(int time_id) const { return cx_seq_[time_id]; }
46  const Eigen::VectorXd& cu(int time_id) const { return cu_seq_[time_id]; }
47  const Eigen::MatrixXd& cxx(int time_id) const { return cxx_seq_[time_id]; }
48  const Eigen::MatrixXd& cxu(int time_id) const { return cxu_seq_[time_id]; }
49  const Eigen::MatrixXd& cuu(int time_id) const { return cuu_seq_[time_id]; }
50 
51  private:
52  void computeDynamicsFirstDerivatives();
53  void computeDynamicsSecondDerivatives();
54  void computeObjectiveFirstDerivatives();
55  void computeObjectiveSecondDerivatives();
56 
57  private:
58  std::vector<Eigen::VectorXd> cx_seq_; // nx * 1 * horizon+1
59  std::vector<Eigen::VectorXd> cu_seq_; // nu * 1 * horizon+1
60  std::vector<Eigen::MatrixXd> cxx_seq_; // nx * nx * horizon+1
61  std::vector<Eigen::MatrixXd> cxu_seq_; // nx * nu * horizon+1
62  std::vector<Eigen::MatrixXd> cuu_seq_; // nu * nu * horizon+1
63 
64  std::vector<Eigen::MatrixXd> fx_seq_; // nx * nx * horizon
65  std::vector<Eigen::MatrixXd> fu_seq_; // nx * nu * horizon
66  std::vector<std::vector<Eigen::MatrixXd>> fxx_seq_; // nx * nx * nx * horizon
67  std::vector<std::vector<Eigen::MatrixXd>> fxu_seq_; // nx * nx * nu * horizon
68  std::vector<std::vector<Eigen::MatrixXd>> fuu_seq_; // nx * nu * nu * horizon
69 
70  OcpBase* ocp_;
71  double h_devs_;
72  int tdim_, xdim_, udim_;
73  bool is_initialized_, compute_objective_first_derivatives_, compute_dynamics_first_derivatives_,
74  compute_objective_second_derivatives_, compute_dynamics_second_derivatives_;
75  };
76 
77 }
Definition: FiniteDifferences.hpp:17
Definition: BackwardPass.hpp:15
Optimal Control Problem Description Class.
Definition: OcpDescription.hpp:115