model_factory.hpp
Go to the documentation of this file.
1 #ifndef SOBEC_MODEL_FACTORY
2 #define SOBEC_MODEL_FACTORY
3 
4 #include <pinocchio/fwd.hpp>
5 // include pinocchio first
6 #include <Eigen/Dense>
7 #include <string>
8 #include <vector>
9 
16 #include "sobec/fwd.hpp"
18 
19 namespace sobec {
20 
21 enum Support { LEFT, RIGHT, DOUBLE };
23 
25  public:
26  // Timing
27  double timeStep = 0.01;
28 
29  // physics
30  eVector3 gravity = eVector3(0, 0, -9.81);
31 
32  // geometry
33  double footSize = 0.05; //[m]
34 
35  double mu = 0.3;
36  eVector2 coneBox = eVector2(0.1, 0.05); // half lenght and width
37  double minNforce = 200.0;
38  double maxNforce = 1200;
39 
40  double comHeight = 0.87;
41  double omega = -comHeight / gravity(2);
42  double height = 0;
43  double dist = 0;
44  double width = 0;
45 
46  // Croco configuration
47  double wFootPlacement = 0; // 1000;
48  double wStateReg = 0; // 100;
49  double wControlReg = 0; // 0.001;
50  double wLimit = 0; // 1e3;
51  double wWrenchCone = 0; // 0.05;
52  double wForceTask = 0; // 0.05
53  double wCoP = 0; // 1;
54  double wDCM = 0;
55  double wBaseRot = 0;
56  double wVCoM = 0; // 0;
57  double wFootRot = 0; // 100;
58  double wPCoM = 0;
59  double wFlyHigh = 0;
60  double wVelFoot = 0;
61  double wColFeet = 0;
62  double wGripperPos = 0;
63  double wGripperRot = 0;
64  double wGripperVel = 0;
65 
66  double flyHighSlope = 2;
67  double footMinimalDistance = 0.2;
68 
69  Eigen::VectorXd stateWeights;
70  Eigen::VectorXd controlWeights;
71  Eigen::VectorXd forceWeights;
72 
73  Eigen::VectorXd lowKinematicLimits;
74  Eigen::VectorXd highKinematicLimits;
75 
76  double th_stop = 1e-6; // threshold for stopping criterion
77  double th_grad = 1e-9; // threshold for zero gradient.
78 };
79 class ModelMaker {
80  protected:
83 
84  boost::shared_ptr<crocoddyl::StateMultibody> state_;
85  boost::shared_ptr<crocoddyl::ActuationModelFloatingBase> actuation_;
86  Eigen::VectorXd x0_;
87 
88  public:
89  ModelMaker();
90  ModelMaker(const ModelMakerSettings &settings, const RobotDesigner &design);
91  void initialize(const ModelMakerSettings &settings,
92  const RobotDesigner &design);
93  bool initialized_ = false;
94 
97  AMA formulateWWT(const Support &support = Support::DOUBLE,
98  const bool &stairs = false);
100  const bool &stairs = false);
102 
103  std::vector<AMA> formulateHorizon(const std::vector<Support> &supports,
104  const Experiment &experiment);
105  std::vector<AMA> formulateHorizon(const int &T);
107 
108  // formulation parts:
109  void defineFeetForceTask(Cost &costCollector,
110  const Support &support = Support::DOUBLE);
111  void defineFeetContact(Contact &contactCollector,
112  const Support &support = Support::DOUBLE);
113  void defineFeetWrenchCost(Cost &costCollector,
114  const Support &support = Support::DOUBLE);
115  void defineFeetTracking(Cost &costCollector,
116  const Support &support = Support::DOUBLE);
117  void defineFeetTranslation(Cost &costCollector,
118  const Support &support = Support::DOUBLE,
119  const bool &stairs = false);
120  void definePostureTask(Cost &costCollector);
121  void defineRotationBase(Cost &costCollector);
122  void defineActuationTask(Cost &costCollector);
123  void defineJointLimits(Cost &costCollector);
124  void defineCoPTask(Cost &costCollector,
125  const Support &support = Support::DOUBLE);
126  void defineDCMTask(Cost &costCollector,
127  const Support &support = Support::DOUBLE);
128  void defineVelFootTask(Cost &costCollector,
129  const Support &support = Support::DOUBLE);
130  void defineFeetRotation(Cost &costCollector);
131  void defineFeetZRotation(Cost &costCollector);
132  void defineFootCollisionTask(Cost &costCollector);
133  void defineFlyHighTask(Cost &costCollector,
134  const Support &support = Support::DOUBLE);
135 
136  void defineCoMPosition(Cost &costCollector);
137  void defineCoMVelocity(Cost &costCollector);
138  void defineGripperPlacement(Cost &costCollector);
139  void defineGripperVelocity(Cost &costCollector);
140 
141  boost::shared_ptr<crocoddyl::StateMultibody> getState() { return state_; }
142  void setState(const boost::shared_ptr<crocoddyl::StateMultibody> &new_state) {
143  state_ = new_state;
144  }
145  boost::shared_ptr<crocoddyl::ActuationModelFloatingBase> getActuation() {
146  return actuation_;
147  }
149  const boost::shared_ptr<crocoddyl::ActuationModelFloatingBase>
150  &new_actuation) {
151  actuation_ = new_actuation;
152  }
153 };
154 
155 } // namespace sobec
156 #endif // SOBEC_MODEL_FACTORY
sobec::ModelMaker::designer_
RobotDesigner designer_
Definition: model_factory.hpp:82
sobec::ModelMakerSettings::mu
double mu
Definition: model_factory.hpp:35
sobec::ModelMakerSettings::width
double width
Definition: model_factory.hpp:44
sobec::ModelMakerSettings::highKinematicLimits
Eigen::VectorXd highKinematicLimits
Definition: model_factory.hpp:74
sobec::ModelMakerSettings::wCoP
double wCoP
Definition: model_factory.hpp:53
sobec::ModelMakerSettings::wPCoM
double wPCoM
Definition: model_factory.hpp:58
sobec::ModelMakerSettings::wWrenchCone
double wWrenchCone
Definition: model_factory.hpp:51
sobec::ModelMakerSettings::dist
double dist
Definition: model_factory.hpp:43
sobec::ModelMakerSettings::timeStep
double timeStep
Definition: model_factory.hpp:27
sobec::ModelMakerSettings
Definition: model_factory.hpp:24
sobec::eVector2
Eigen::Vector2d eVector2
Definition: fwd.hpp:144
sobec::WWT_STAIRS
@ WWT_STAIRS
Definition: model_factory.hpp:22
sobec::ModelMaker::formulateTerminalWWT
AMA formulateTerminalWWT(const Support &support=Support::DOUBLE, const bool &stairs=false)
Definition: model_factory.cpp:685
sobec::ModelMaker::formulateTerminalStepTracker
AMA formulateTerminalStepTracker(const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:635
sobec::ModelMaker::defineDCMTask
void defineDCMTask(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:333
fwd.hpp
sobec::ModelMakerSettings::coneBox
eVector2 coneBox
Definition: model_factory.hpp:36
sobec::ModelMaker::defineFeetContact
void defineFeetContact(Contact &contactCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:43
sobec::ModelMakerSettings::height
double height
Definition: model_factory.hpp:42
sobec::ModelMakerSettings::wGripperVel
double wGripperVel
Definition: model_factory.hpp:64
designer.hpp
sobec::ModelMakerSettings::wVCoM
double wVCoM
Definition: model_factory.hpp:56
residual-feet-collision.hpp
sobec::ModelMaker::defineFeetZRotation
void defineFeetZRotation(Cost &costCollector)
Definition: model_factory.cpp:424
sobec::ModelMaker::state_
boost::shared_ptr< crocoddyl::StateMultibody > state_
Definition: model_factory.hpp:84
sobec::LEFT
@ LEFT
Definition: model_factory.hpp:21
sobec::ModelMakerSettings::omega
double omega
Definition: model_factory.hpp:41
sobec::Experiment
Experiment
Definition: model_factory.hpp:22
sobec::ModelMakerSettings::stateWeights
Eigen::VectorXd stateWeights
Definition: model_factory.hpp:69
sobec::ModelMakerSettings::wFootPlacement
double wFootPlacement
Definition: model_factory.hpp:47
sobec::Contact
boost::shared_ptr< crocoddyl::ContactModelMultiple > Contact
Definition: fwd.hpp:154
sobec::RobotDesigner
Definition: designer.hpp:28
sobec::ModelMaker::formulateHorizon
std::vector< AMA > formulateHorizon(const std::vector< Support > &supports, const Experiment &experiment)
Definition: model_factory.cpp:739
sobec::ModelMaker::initialize
void initialize(const ModelMakerSettings &settings, const RobotDesigner &design)
Definition: model_factory.cpp:17
sobec::ModelMakerSettings::wForceTask
double wForceTask
Definition: model_factory.hpp:52
sobec::ModelMakerSettings::maxNforce
double maxNforce
Definition: model_factory.hpp:38
sobec::ModelMaker::defineJointLimits
void defineJointLimits(Cost &costCollector)
Definition: model_factory.cpp:307
sobec::ModelMaker::getActuation
boost::shared_ptr< crocoddyl::ActuationModelFloatingBase > getActuation()
Definition: model_factory.hpp:145
sobec::ModelMaker::settings_
ModelMakerSettings settings_
Definition: model_factory.hpp:81
sobec::AMA
boost::shared_ptr< crocoddyl::ActionModelAbstract > AMA
Definition: fwd.hpp:147
activation-weighted-log.hpp
sobec::ModelMakerSettings::forceWeights
Eigen::VectorXd forceWeights
Definition: model_factory.hpp:71
sobec::ModelMakerSettings::wFlyHigh
double wFlyHigh
Definition: model_factory.hpp:59
sobec::ModelMakerSettings::controlWeights
Eigen::VectorXd controlWeights
Definition: model_factory.hpp:70
sobec
Definition: activation-quad-ref.hpp:19
sobec::ModelMakerSettings::footMinimalDistance
double footMinimalDistance
Definition: model_factory.hpp:67
sobec::Cost
boost::shared_ptr< crocoddyl::CostModelSum > Cost
Definition: fwd.hpp:153
sobec::ModelMakerSettings::comHeight
double comHeight
Definition: model_factory.hpp:40
sobec::ModelMaker::formulateWWT
AMA formulateWWT(const Support &support=Support::DOUBLE, const bool &stairs=false)
Definition: model_factory.cpp:656
sobec::RIGHT
@ RIGHT
Definition: model_factory.hpp:21
sobec::ModelMakerSettings::wStateReg
double wStateReg
Definition: model_factory.hpp:48
sobec::ModelMakerSettings::wGripperPos
double wGripperPos
Definition: model_factory.hpp:62
sobec::ModelMaker::defineCoMVelocity
void defineCoMVelocity(Cost &costCollector)
Definition: model_factory.cpp:466
sobec::ModelMaker::x0_
Eigen::VectorXd x0_
Definition: model_factory.hpp:86
sobec::ModelMakerSettings::wGripperRot
double wGripperRot
Definition: model_factory.hpp:63
sobec::ModelMaker::defineGripperPlacement
void defineGripperPlacement(Cost &costCollector)
Definition: model_factory.cpp:572
sobec::ModelMaker::defineFootCollisionTask
void defineFootCollisionTask(Cost &costCollector)
Definition: model_factory.cpp:541
sobec::ModelMaker::defineFeetRotation
void defineFeetRotation(Cost &costCollector)
Definition: model_factory.cpp:390
sobec::ModelMakerSettings::wDCM
double wDCM
Definition: model_factory.hpp:54
residual-dcm-position.hpp
sobec::ModelMaker::defineActuationTask
void defineActuationTask(Cost &costCollector)
Definition: model_factory.cpp:290
sobec::ModelMaker::ModelMaker
ModelMaker()
Definition: model_factory.cpp:10
sobec::ModelMaker::setState
void setState(const boost::shared_ptr< crocoddyl::StateMultibody > &new_state)
Definition: model_factory.hpp:142
sobec::ModelMaker::defineVelFootTask
void defineVelFootTask(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:507
sobec::ModelMakerSettings::wBaseRot
double wBaseRot
Definition: model_factory.hpp:55
residual-fly-high.hpp
sobec::ModelMakerSettings::th_stop
double th_stop
Definition: model_factory.hpp:76
sobec::ModelMaker::formulateStepTracker
AMA formulateStepTracker(const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:610
sobec::ModelMakerSettings::flyHighSlope
double flyHighSlope
Definition: model_factory.hpp:66
sobec::ModelMaker::defineFeetTracking
void defineFeetTracking(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:128
sobec::WALK
@ WALK
Definition: model_factory.hpp:22
sobec::ModelMaker::defineFlyHighTask
void defineFlyHighTask(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:477
sobec::ModelMaker::defineRotationBase
void defineRotationBase(Cost &costCollector)
Definition: model_factory.cpp:276
sobec::ModelMaker::defineGripperVelocity
void defineGripperVelocity(Cost &costCollector)
Definition: model_factory.cpp:598
sobec::ModelMakerSettings::wVelFoot
double wVelFoot
Definition: model_factory.hpp:60
sobec::ModelMakerSettings::gravity
eVector3 gravity
Definition: model_factory.hpp:30
sobec::ModelMaker::defineFeetForceTask
void defineFeetForceTask(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:213
sobec::ModelMaker::formulatePointingTask
AMA formulatePointingTask()
Definition: model_factory.cpp:714
sobec::ModelMakerSettings::wControlReg
double wControlReg
Definition: model_factory.hpp:49
sobec::WWT
@ WWT
Definition: model_factory.hpp:22
sobec::ModelMaker::get_settings
ModelMakerSettings & get_settings()
Definition: model_factory.hpp:106
sobec::ModelMaker
Definition: model_factory.hpp:79
sobec::ModelMaker::defineCoMPosition
void defineCoMPosition(Cost &costCollector)
Definition: model_factory.cpp:455
sobec::ModelMakerSettings::wLimit
double wLimit
Definition: model_factory.hpp:50
sobec::ModelMakerSettings::lowKinematicLimits
Eigen::VectorXd lowKinematicLimits
Definition: model_factory.hpp:73
sobec::ModelMaker::getState
boost::shared_ptr< crocoddyl::StateMultibody > getState()
Definition: model_factory.hpp:141
sobec::ModelMaker::defineFeetTranslation
void defineFeetTranslation(Cost &costCollector, const Support &support=Support::DOUBLE, const bool &stairs=false)
Definition: model_factory.cpp:162
sobec::ModelMaker::initialized_
bool initialized_
Definition: model_factory.hpp:93
sobec::ModelMaker::defineCoPTask
void defineCoPTask(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:356
sobec::ModelMakerSettings::footSize
double footSize
Definition: model_factory.hpp:33
sobec::ModelMakerSettings::wFootRot
double wFootRot
Definition: model_factory.hpp:57
sobec::ModelMakerSettings::wColFeet
double wColFeet
Definition: model_factory.hpp:61
residual-2D-surface.hpp
sobec::Support
Support
Definition: model_factory.hpp:21
sobec::ModelMaker::setActuation
void setActuation(const boost::shared_ptr< crocoddyl::ActuationModelFloatingBase > &new_actuation)
Definition: model_factory.hpp:148
sobec::ModelMakerSettings::minNforce
double minNforce
Definition: model_factory.hpp:37
sobec::DOUBLE
@ DOUBLE
Definition: model_factory.hpp:21
sobec::ModelMakerSettings::th_grad
double th_grad
Definition: model_factory.hpp:77
sobec::eVector3
Eigen::Vector3d eVector3
Definition: fwd.hpp:143
sobec::ModelMaker::defineFeetWrenchCost
void defineFeetWrenchCost(Cost &costCollector, const Support &support=Support::DOUBLE)
Definition: model_factory.cpp:67
residual-fly-angle.hpp
sobec::ModelMaker::definePostureTask
void definePostureTask(Cost &costCollector)
Definition: model_factory.cpp:258
sobec::ModelMaker::actuation_
boost::shared_ptr< crocoddyl::ActuationModelFloatingBase > actuation_
Definition: model_factory.hpp:85