centroidal_control_collection
LinearMpcZmp.h
Go to the documentation of this file.
1 /* Author: Masaki Murooka */
2 
3 #pragma once
4 
5 #include <functional>
6 
7 #include <qp_solver_collection/QpSolverCollection.h>
8 
9 #include <CCC/CommonModels.h>
11 
12 namespace CCC
13 {
21 {
22  friend class LinearMpcZmp;
23 
24 public:
26  struct RefData
27  {
29  std::array<double, 2> zmp_limits;
30  };
31 
36  using InitialParam = Eigen::Vector3d;
37 
38 public:
45  LinearMpcZmp1d(double com_height,
46  double horizon_duration,
47  double horizon_dt,
48  QpSolverCollection::QpSolverType qp_solver_type = QpSolverCollection::QpSolverType::Any);
49 
57  double planOnce(const std::function<RefData(double)> & ref_data_func,
58  const InitialParam & initial_param,
59  double current_time,
60  double control_dt = -1);
61 
62 protected:
64  double procOnce(const std::vector<RefData> & ref_data_seq,
65  const InitialParam & initial_param,
66  double current_time,
67  double control_dt);
68 
69 protected:
71  double horizon_dt_ = 0;
72 
74  int horizon_steps_ = -1;
75 
77  std::shared_ptr<ComZmpModelJerkInput> model_;
78 
80  std::shared_ptr<InvariantSequentialExtension<3, 1, 1>> seq_ext_;
81 
83  std::shared_ptr<QpSolverCollection::QpSolver> qp_solver_;
84 
86  QpSolverCollection::QpCoeff qp_coeff_;
87 };
88 
96 {
97 public:
104  struct RefData
105  {
106  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
107 
109  std::array<Eigen::Vector2d, 2> zmp_limits;
110  };
111 
114  {
115  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
116 
118  Eigen::Vector2d pos = Eigen::Vector2d::Zero();
119 
121  Eigen::Vector2d vel = Eigen::Vector2d::Zero();
122 
124  Eigen::Vector2d acc = Eigen::Vector2d::Zero();
125  };
126 
127 public:
134  LinearMpcZmp(double com_height,
135  double horizon_duration,
136  double horizon_dt,
137  QpSolverCollection::QpSolverType qp_solver_type = QpSolverCollection::QpSolverType::Any)
138  : mpc_1d_(std::make_shared<LinearMpcZmp1d>(com_height, horizon_duration, horizon_dt, qp_solver_type))
139  {
140  ref_data_seq_x_.resize(mpc_1d_->horizon_steps_);
141  ref_data_seq_y_.resize(mpc_1d_->horizon_steps_);
142  }
143 
151  Eigen::Vector2d planOnce(const std::function<RefData(double)> & ref_data_func,
152  const InitialParam & initial_param,
153  double current_time,
154  double control_dt = -1);
155 
156 protected:
158  std::shared_ptr<LinearMpcZmp1d> mpc_1d_;
159 
161  std::vector<LinearMpcZmp1d::RefData> ref_data_seq_x_;
162 
164  std::vector<LinearMpcZmp1d::RefData> ref_data_seq_y_;
165 };
166 } // namespace CCC
CCC::LinearMpcZmp1d::planOnce
double planOnce(const std::function< RefData(double)> &ref_data_func, const InitialParam &initial_param, double current_time, double control_dt=-1)
Plan one step.
CCC::LinearMpcZmp1d::model_
std::shared_ptr< ComZmpModelJerkInput > model_
State-space model.
Definition: LinearMpcZmp.h:77
CCC::LinearMpcZmp1d::horizon_steps_
int horizon_steps_
Number of steps in horizon.
Definition: LinearMpcZmp.h:74
CCC::LinearMpcZmp1d::seq_ext_
std::shared_ptr< InvariantSequentialExtension< 3, 1, 1 > > seq_ext_
Sequential extension of state-space model.
Definition: LinearMpcZmp.h:80
CCC::LinearMpcZmp
QP-based linear MPC for CoM-ZMP model.
Definition: LinearMpcZmp.h:95
CCC::LinearMpcZmp::LinearMpcZmp
LinearMpcZmp(double com_height, double horizon_duration, double horizon_dt, QpSolverCollection::QpSolverType qp_solver_type=QpSolverCollection::QpSolverType::Any)
Constructor.
Definition: LinearMpcZmp.h:134
CCC::LinearMpcZmp1d::qp_solver_
std::shared_ptr< QpSolverCollection::QpSolver > qp_solver_
QP solver.
Definition: LinearMpcZmp.h:83
CCC::LinearMpcZmp::mpc_1d_
std::shared_ptr< LinearMpcZmp1d > mpc_1d_
One-dimensional linear MPC.
Definition: LinearMpcZmp.h:158
CCC::LinearMpcZmp1d::procOnce
double procOnce(const std::vector< RefData > &ref_data_seq, const InitialParam &initial_param, double current_time, double control_dt)
Process one step.
CCC::LinearMpcZmp::ref_data_seq_x_
std::vector< LinearMpcZmp1d::RefData > ref_data_seq_x_
Reference data sequence of x.
Definition: LinearMpcZmp.h:161
CCC::LinearMpcZmp::ref_data_seq_y_
std::vector< LinearMpcZmp1d::RefData > ref_data_seq_y_
Reference data sequence of y.
Definition: LinearMpcZmp.h:164
CCC::LinearMpcZmp::RefData::zmp_limits
EIGEN_MAKE_ALIGNED_OPERATOR_NEW std::array< Eigen::Vector2d, 2 > zmp_limits
Min/max limits of ZMP [m].
Definition: LinearMpcZmp.h:109
CCC::LinearMpcZmp1d::RefData::zmp_limits
std::array< double, 2 > zmp_limits
Min/max limits of ZMP [m].
Definition: LinearMpcZmp.h:29
CCC::LinearMpcZmp::planOnce
Eigen::Vector2d planOnce(const std::function< RefData(double)> &ref_data_func, const InitialParam &initial_param, double current_time, double control_dt=-1)
Plan one step.
CCC::LinearMpcZmp1d::horizon_dt_
double horizon_dt_
Discretization timestep in horizon [sec].
Definition: LinearMpcZmp.h:71
CCC::LinearMpcZmp1d::qp_coeff_
QpSolverCollection::QpCoeff qp_coeff_
QP coefficients.
Definition: LinearMpcZmp.h:86
CCC::LinearMpcZmp::InitialParam::pos
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Vector2d pos
CoM position [m].
Definition: LinearMpcZmp.h:118
CCC
Definition: CommonModels.h:7
CCC::LinearMpcZmp1d::RefData
Reference data.
Definition: LinearMpcZmp.h:26
CCC::LinearMpcZmp1d::InitialParam
Eigen::Vector3d InitialParam
Initial parameter.
Definition: LinearMpcZmp.h:36
InvariantSequentialExtension.h
CCC::LinearMpcZmp1d
QP-based linear MPC for one-dimensional CoM-ZMP model.
Definition: LinearMpcZmp.h:20
CCC::LinearMpcZmp::InitialParam
Initial parameter.
Definition: LinearMpcZmp.h:113
CommonModels.h
CCC::LinearMpcZmp::RefData
Reference data.
Definition: LinearMpcZmp.h:104
CCC::LinearMpcZmp::InitialParam::acc
Eigen::Vector2d acc
CoM acceleration [m/s^2].
Definition: LinearMpcZmp.h:124
CCC::LinearMpcZmp1d::LinearMpcZmp1d
LinearMpcZmp1d(double com_height, double horizon_duration, double horizon_dt, QpSolverCollection::QpSolverType qp_solver_type=QpSolverCollection::QpSolverType::Any)
Constructor.
CCC::LinearMpcZmp::InitialParam::vel
Eigen::Vector2d vel
CoM velocity [m/s].
Definition: LinearMpcZmp.h:121