centroidal_control_collection
LinearMpcXY.h
Go to the documentation of this file.
1 /* Author: Masaki Murooka */
2 
3 #pragma once
4 
5 #include <functional>
6 
7 #include <SpaceVecAlg/SpaceVecAlg>
8 
9 #include <qp_solver_collection/QpSolverCollection.h>
10 
12 
13 namespace ForceColl
14 {
15 class Contact;
16 }
17 
18 namespace CCC
19 {
29 {
30 public:
32  static constexpr int state_dim_ = 6;
33 
36 
39 
40 public:
42  struct MotionParam
43  {
44  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
45 
47  double com_z;
48 
50  double total_force_z;
51 
53  std::vector<std::shared_ptr<ForceColl::Contact>> contact_list;
54  };
55 
57  struct InitialParam
58  {
59  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
60 
62  Eigen::Vector2d pos = Eigen::Vector2d::Zero();
63 
65  Eigen::Vector2d vel = Eigen::Vector2d::Zero();
66 
68  Eigen::Vector2d angular_momentum = Eigen::Vector2d::Zero();
69 
73  StateDimVector toState(double mass) const;
74  };
75 
77  struct RefData
78  {
79  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
80 
82  Eigen::Vector2d pos = Eigen::Vector2d::Zero();
83 
85  Eigen::Vector2d vel = Eigen::Vector2d::Zero();
86 
88  Eigen::Vector2d angular_momentum = Eigen::Vector2d::Zero();
89 
91  static constexpr int outputDim()
92  {
93  return 6;
94  }
95 
99  StateDimVector toOutput(double mass) const;
100  };
101 
103  struct WeightParam
104  {
105  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
106 
108  Eigen::Vector2d linear_momentum_integral;
109 
111  Eigen::Vector2d linear_momentum;
112 
114  Eigen::Vector2d angular_momentum;
115 
117  double force;
118 
125  WeightParam(const Eigen::Vector2d & _linear_momentum_integral = Eigen::Vector2d::Constant(1.0),
126  const Eigen::Vector2d & _linear_momentum = Eigen::Vector2d::Constant(0.0),
127  const Eigen::Vector2d & _angular_momentum = Eigen::Vector2d::Constant(1.0),
128  double _force = 1e-5)
129  : linear_momentum_integral(_linear_momentum_integral), linear_momentum(_linear_momentum),
130  angular_momentum(_angular_momentum), force(_force)
131  {
132  }
133 
137  Eigen::VectorXd inputWeight(int total_input_dim) const;
138 
142  Eigen::VectorXd outputWeight(size_t seq_len) const;
143  };
144 
186  class Model : public _StateSpaceModel
187  {
188  public:
194  Model(double mass, const MotionParam & motion_param, int output_dim = 0);
195 
196  public:
199  };
200 
201 public:
202  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
203 
211  LinearMpcXY(double mass,
212  double horizon_dt,
213  int horizon_steps,
214  const WeightParam & weight_param = WeightParam(),
215  QpSolverCollection::QpSolverType qp_solver_type = QpSolverCollection::QpSolverType::Any);
216 
224  Eigen::VectorXd planOnce(const std::function<MotionParam(double)> & motion_param_func,
225  const std::function<RefData(double)> & ref_data_func,
226  const InitialParam & initial_param,
227  double current_time);
228 
229 protected:
231  Eigen::VectorXd procOnce(const std::vector<std::shared_ptr<_StateSpaceModel>> & model_list,
232  const StateDimVector & current_x,
233  const Eigen::VectorXd & ref_output_seq);
234 
235 public:
237  double mass_ = 0;
238 
240  double horizon_dt_ = 0;
241 
243  int horizon_steps_ = 0;
244 
247 
249  std::shared_ptr<QpSolverCollection::QpSolver> qp_solver_;
250 
252  QpSolverCollection::QpCoeff qp_coeff_;
253 
255  std::pair<double, double> force_range_;
256 };
257 } // namespace CCC
CCC::LinearMpcXY::horizon_steps_
int horizon_steps_
Number of steps in horizon.
Definition: LinearMpcXY.h:243
CCC::LinearMpcXY::InitialParam::pos
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Vector2d pos
CoM position [m].
Definition: LinearMpcXY.h:62
CCC::LinearMpcXY::RefData::pos
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Vector2d pos
CoM position [m].
Definition: LinearMpcXY.h:82
VariantSequentialExtension.h
CCC::LinearMpcXY::force_range_
std::pair< double, double > force_range_
Min/max ridge force [N].
Definition: LinearMpcXY.h:255
CCC::LinearMpcXY::Model::Model
Model(double mass, const MotionParam &motion_param, int output_dim=0)
Constructor.
CCC::LinearMpcXY::qp_solver_
std::shared_ptr< QpSolverCollection::QpSolver > qp_solver_
QP solver.
Definition: LinearMpcXY.h:249
CCC::LinearMpcXY::WeightParam::linear_momentum_integral
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Vector2d linear_momentum_integral
Linear momentum integral weight.
Definition: LinearMpcXY.h:108
CCC::LinearMpcXY::RefData::toOutput
StateDimVector toOutput(double mass) const
Get reference output of state-space model.
CCC::LinearMpcXY::procOnce
Eigen::VectorXd procOnce(const std::vector< std::shared_ptr< _StateSpaceModel >> &model_list, const StateDimVector &current_x, const Eigen::VectorXd &ref_output_seq)
Process one step.
CCC::LinearMpcXY::WeightParam::force
double force
Force weight.
Definition: LinearMpcXY.h:117
CCC::LinearMpcXY::InitialParam
Initial parameter.
Definition: LinearMpcXY.h:57
CCC::LinearMpcXY::planOnce
Eigen::VectorXd planOnce(const std::function< MotionParam(double)> &motion_param_func, const std::function< RefData(double)> &ref_data_func, const InitialParam &initial_param, double current_time)
Plan one step.
CCC::LinearMpcXY::state_dim_
static constexpr int state_dim_
State dimension.
Definition: LinearMpcXY.h:32
CCC::LinearMpcXY::RefData::outputDim
static constexpr int outputDim()
Get reference output size.
Definition: LinearMpcXY.h:91
CCC::LinearMpcXY::Model
State-space model.
Definition: LinearMpcXY.h:186
CCC::LinearMpcXY::WeightParam::outputWeight
Eigen::VectorXd outputWeight(size_t seq_len) const
Get output weight vector.
CCC::LinearMpcXY::InitialParam::vel
Eigen::Vector2d vel
CoM linear velocity [m/s].
Definition: LinearMpcXY.h:65
CCC::LinearMpcXY::Model::motion_param_
MotionParam motion_param_
Motion parameter.
Definition: LinearMpcXY.h:198
CCC::LinearMpcXY::StateDimVector
_StateSpaceModel::StateDimVector StateDimVector
Type of state vector.
Definition: LinearMpcXY.h:38
CCC::StateSpaceModel::StateDimVector
Eigen::Matrix< double, StateDim, 1 > StateDimVector
Type of state vector.
Definition: StateSpaceModel.h:25
CCC::LinearMpcXY::horizon_dt_
double horizon_dt_
Discretization timestep in horizon [sec].
Definition: LinearMpcXY.h:240
CCC::LinearMpcXY::weight_param_
WeightParam weight_param_
Objective weight parameter.
Definition: LinearMpcXY.h:246
CCC::StateSpaceModel
State-space model.
Definition: StateSpaceModel.h:21
CCC
Definition: CommonModels.h:7
CCC::LinearMpcXY::MotionParam::com_z
EIGEN_MAKE_ALIGNED_OPERATOR_NEW double com_z
CoM z position [m].
Definition: LinearMpcXY.h:47
CCC::LinearMpcXY::RefData::vel
Eigen::Vector2d vel
CoM linear velocity [m/s].
Definition: LinearMpcXY.h:85
CCC::LinearMpcXY::LinearMpcXY
EIGEN_MAKE_ALIGNED_OPERATOR_NEW LinearMpcXY(double mass, double horizon_dt, int horizon_steps, const WeightParam &weight_param=WeightParam(), QpSolverCollection::QpSolverType qp_solver_type=QpSolverCollection::QpSolverType::Any)
Constructor.
CCC::LinearMpcXY::RefData
Reference data.
Definition: LinearMpcXY.h:77
CCC::LinearMpcXY::InitialParam::angular_momentum
Eigen::Vector2d angular_momentum
Angular momentum [kg m^2/s].
Definition: LinearMpcXY.h:68
ForceColl
Definition: DdpCentroidal.h:7
CCC::LinearMpcXY::mass_
double mass_
Robot mass [kg].
Definition: LinearMpcXY.h:237
CCC::LinearMpcXY::qp_coeff_
QpSolverCollection::QpCoeff qp_coeff_
QP coefficients.
Definition: LinearMpcXY.h:252
CCC::LinearMpcXY::WeightParam::inputWeight
Eigen::VectorXd inputWeight(int total_input_dim) const
Get input weight vector.
CCC::LinearMpcXY::MotionParam::total_force_z
double total_force_z
Total z force [N].
Definition: LinearMpcXY.h:50
CCC::LinearMpcXY
Linear MPC of translational and rotational x,y-component motion considering predefined z-component mo...
Definition: LinearMpcXY.h:28
CCC::LinearMpcXY::MotionParam::contact_list
std::vector< std::shared_ptr< ForceColl::Contact > > contact_list
Contact list.
Definition: LinearMpcXY.h:53
CCC::LinearMpcXY::WeightParam::linear_momentum
Eigen::Vector2d linear_momentum
Linear momentum weight.
Definition: LinearMpcXY.h:111
CCC::LinearMpcXY::MotionParam
Motion parameter.
Definition: LinearMpcXY.h:42
CCC::LinearMpcXY::RefData::angular_momentum
Eigen::Vector2d angular_momentum
Angular momentum [kg m^2/s].
Definition: LinearMpcXY.h:88
CCC::LinearMpcXY::WeightParam::angular_momentum
Eigen::Vector2d angular_momentum
Angular momentum weight.
Definition: LinearMpcXY.h:114
CCC::LinearMpcXY::WeightParam::WeightParam
WeightParam(const Eigen::Vector2d &_linear_momentum_integral=Eigen::Vector2d::Constant(1.0), const Eigen::Vector2d &_linear_momentum=Eigen::Vector2d::Constant(0.0), const Eigen::Vector2d &_angular_momentum=Eigen::Vector2d::Constant(1.0), double _force=1e-5)
Constructor.
Definition: LinearMpcXY.h:125
CCC::LinearMpcXY::InitialParam::toState
StateDimVector toState(double mass) const
Get state of state-space model.
CCC::LinearMpcXY::WeightParam
Weight parameter.
Definition: LinearMpcXY.h:103