horizon_manager.hpp
Go to the documentation of this file.
1 #ifndef SOBEC_HORIZON_MANAGER
2 #define SOBEC_HORIZON_MANAGER
3 
4 #include <Eigen/Dense>
5 #include <string>
6 #include <vector>
7 
8 #include "sobec/fwd.hpp"
11 
12 namespace sobec {
14  public:
15  std::string leftFootName = "left_sole_link";
16  std::string rightFootName = "right_sole_link";
17 };
18 
20  private:
21  HorizonManagerSettings settings_;
22  DDP ddp_;
23 
24  // prealocated memory:
25  boost::shared_ptr<crocoddyl::CostModelResidual> cone_;
26  boost::shared_ptr<crocoddyl::CostModelResidual> force_cost_;
27  pinocchio::Force force_;
28  std::vector<Eigen::VectorXd> warm_xs_;
29  std::vector<Eigen::VectorXd> warm_us_;
30  Eigen::VectorXd new_ref_;
31  unsigned long size_;
32  Eigen::VectorXd command_torque_;
33  Eigen::VectorXd tr_error_;
34  Eigen::VectorXd K_tr_error_;
35  eVector3 foot_torque_, foot_force_;
36  pinocchio::SE3 pose_;
37  int support_size_;
38  std::set<std::string> active_contacts_;
39 
40  public:
42 
43  HorizonManager(const HorizonManagerSettings &horizonSettings,
44  const Eigen::VectorXd &x0,
45  const std::vector<AMA> &runningModels,
46  const AMA &terminalModel);
47 
48  void initialize(const HorizonManagerSettings &horizonSettings,
49  const Eigen::VectorXd &x0,
50  const std::vector<AMA> &runningModels,
51  const AMA &terminalModel);
52  bool initialized_ = false;
53 
54  AMA ama(const unsigned long time);
55  IAM iam(const unsigned long time);
56  IAM terminaliam();
57  DAM dam(const unsigned long time);
58  DAM terminaldam();
59  ADA ada(const unsigned long time);
60  IAD iad(const unsigned long time);
61  DAD dad(const unsigned long time);
62  pinocchio::Data pinData(const unsigned long time);
63  Cost costs(const unsigned long time);
65  Contact contacts(const unsigned long time);
66  boost::shared_ptr<crocoddyl::StateMultibody> state(const unsigned long time);
67  boost::shared_ptr<crocoddyl::ActuationModelFloatingBase> actuation(
68  const unsigned long time);
69 
70  void setActuationReference(const unsigned long time,
71  const std::string &nameCostActuation,
72  const Eigen::VectorXd &reference);
73  Eigen::VectorXd getActuationReference(const unsigned long time,
74  const std::string &nameCostActuation);
75  void setBalancingTorque(const unsigned long time,
76  const std::string &nameCostActuation,
77  const Eigen::VectorXd &x);
78  void setBalancingTorque(const unsigned long time,
79  const std::string &nameCostActuation,
80  const std::string &nameCostState);
81  void setPoseReference(const unsigned long time, const std::string &nameCost,
82  const pinocchio::SE3 &ref_placement);
83  void setRotationReference(const unsigned long time,
84  const std::string &nameCost,
85  const Eigen::Matrix3d &ref_rotation);
86  void setTerminalRotationReference(const std::string &nameCost,
87  const Eigen::Matrix3d &ref_rotation);
88  void setTranslationReference(const unsigned long time,
89  const std::string &nameCost,
90  const eVector3 &ref_translation);
91  void setTerminalPoseReference(const std::string &nameCost,
92  const pinocchio::SE3 &ref_placement);
93  void setTerminalTranslationReference(const std::string &nameCost,
94  const eVector3 &ref_translation);
95  const pinocchio::SE3 &getFootPoseReference(
96  const unsigned long time, const std::string &nameCostFootPose);
97  const pinocchio::SE3 &getTerminalFootPoseReference(
98  const std::string &nameCostFootPose);
99  void setVelocityRefCOM(const unsigned long time, const std::string &nameCost,
100  const eVector3 &ref_placement);
101  void setVelocityRefFeet(const unsigned long time, const std::string &nameCost,
102  const pinocchio::Motion &ref_velocity);
103  void activateContactLF(const unsigned long time,
104  const std::string &nameContacttLF);
105  void activateContactRF(const unsigned long time,
106  const std::string &nameContactRF);
107  void removeContactLF(const unsigned long time,
108  const std::string &nameContactLF);
109  void removeContactRF(const unsigned long time,
110  const std::string &nameContactRF);
111  void setForceReference(const unsigned long time, const std::string &nameCost,
112  const eVector6 &reference);
113  void setWrenchReference(const unsigned long time, const std::string &nameCost,
114  const eVector6 &reference);
115  void setTerminalPoseCoM(const std::string &nameCost,
116  const eVector3 &ref_placement);
117  void setTerminalDCMReference(const std::string &nameCost,
118  const eVector3 &ref_translation);
119  void setSwingingLF(const unsigned long time, const std::string &nameContactLF,
120  const std::string &nameContactRF,
121  const std::string &nameForceContactLF);
122  void setSwingingRF(const unsigned long time, const std::string &nameContactLF,
123  const std::string &nameContactRF,
124  const std::string &nameForceContactRF);
125  void setDoubleSupport(const unsigned long time,
126  const std::string &nameContactLF,
127  const std::string &nameContactRF);
128  void setSurfaceInequality(const unsigned long time,
129  const std::string &nameCost, const eVector2 &XYpose,
130  const double &orientation);
131 
132  const eVector3 &getFootForce(const unsigned long time,
133  const std::string &nameFootForceCost);
134  const eVector3 &getFootTorque(const unsigned long time,
135  const std::string &nameFootForceCost);
136 
137  const std::set<std::string> &get_contacts(const unsigned long time);
138 
139  void recede(const AMA &new_model, const ADA &new_data);
140  void recede(const AMA &new_model);
141  void recede();
142 
143  int supportSize(const unsigned long time);
144  unsigned long size();
145 
146  void solve(const Eigen::VectorXd &measured_x, const std::size_t ddpIteration,
147  const bool is_feasible = false);
148  const Eigen::VectorXd &currentTorques(const Eigen::VectorXd &measured_x);
149 
150  DDP get_ddp() { return ddp_; }
151  void set_ddp(const DDP &ddp) { ddp_ = ddp; }
152 };
153 } // namespace sobec
154 #endif // SOBEC_HORIZON_MANAGER
sobec::IAD
boost::shared_ptr< crocoddyl::IntegratedActionDataEuler > IAD
Definition: fwd.hpp:146
sobec::HorizonManager::initialize
void initialize(const HorizonManagerSettings &horizonSettings, const Eigen::VectorXd &x0, const std::vector< AMA > &runningModels, const AMA &terminalModel)
Definition: horizon_manager.cpp:18
sobec::HorizonManager::terminaliam
IAM terminaliam()
Definition: horizon_manager.cpp:45
sobec::HorizonManager::setActuationReference
void setActuationReference(const unsigned long time, const std::string &nameCostActuation, const Eigen::VectorXd &reference)
Definition: horizon_manager.cpp:143
sobec::HorizonManager::setDoubleSupport
void setDoubleSupport(const unsigned long time, const std::string &nameContactLF, const std::string &nameContactRF)
Definition: horizon_manager.cpp:309
sobec::eVector2
Eigen::Vector2d eVector2
Definition: fwd.hpp:144
sobec::HorizonManager::iad
IAD iad(const unsigned long time)
Definition: horizon_manager.cpp:76
sobec::HorizonManager::costs
Cost costs(const unsigned long time)
Definition: horizon_manager.cpp:62
sobec::HorizonManager::setTerminalPoseReference
void setTerminalPoseReference(const std::string &nameCost, const pinocchio::SE3 &ref_placement)
Definition: horizon_manager.cpp:192
sobec::HorizonManagerSettings::leftFootName
std::string leftFootName
Definition: horizon_manager.hpp:15
fwd.hpp
sobec::DDP
boost::shared_ptr< crocoddyl::SolverFDDP > DDP
Definition: fwd.hpp:155
sobec::HorizonManager::HorizonManager
HorizonManager()
Definition: horizon_manager.cpp:9
sobec::HorizonManager::solve
void solve(const Eigen::VectorXd &measured_x, const std::size_t ddpIteration, const bool is_feasible=false)
Definition: horizon_manager.cpp:374
sobec::HorizonManager::actuation
boost::shared_ptr< crocoddyl::ActuationModelFloatingBase > actuation(const unsigned long time)
Definition: horizon_manager.cpp:98
designer.hpp
sobec::HorizonManager::contacts
Contact contacts(const unsigned long time)
Definition: horizon_manager.cpp:68
sobec::HorizonManager::state
boost::shared_ptr< crocoddyl::StateMultibody > state(const unsigned long time)
Definition: horizon_manager.cpp:91
sobec::HorizonManager::setTerminalTranslationReference
void setTerminalTranslationReference(const std::string &nameCost, const eVector3 &ref_translation)
Definition: horizon_manager.cpp:206
sobec::HorizonManager::setRotationReference
void setRotationReference(const unsigned long time, const std::string &nameCost, const Eigen::Matrix3d &ref_rotation)
Definition: horizon_manager.cpp:169
sobec::HorizonManagerSettings
Definition: horizon_manager.hpp:13
sobec::HorizonManager::setPoseReference
void setPoseReference(const unsigned long time, const std::string &nameCost, const pinocchio::SE3 &ref_placement)
Definition: horizon_manager.cpp:161
sobec::HorizonManager::pinData
pinocchio::Data pinData(const unsigned long time)
Definition: horizon_manager.cpp:87
sobec::HorizonManager::get_contacts
const std::set< std::string > & get_contacts(const unsigned long time)
Definition: horizon_manager.cpp:368
sobec::HorizonManager::getActuationReference
Eigen::VectorXd getActuationReference(const unsigned long time, const std::string &nameCostActuation)
Definition: horizon_manager.cpp:151
sobec::Contact
boost::shared_ptr< crocoddyl::ContactModelMultiple > Contact
Definition: fwd.hpp:154
sobec::DAM
boost::shared_ptr< crocoddyl::DifferentialActionModelContactFwdDynamics > DAM
Definition: fwd.hpp:150
sobec::HorizonManager::activateContactRF
void activateContactRF(const unsigned long time, const std::string &nameContactRF)
Definition: horizon_manager.cpp:108
sobec::HorizonManager::setForceReference
void setForceReference(const unsigned long time, const std::string &nameCost, const eVector6 &reference)
Definition: horizon_manager.cpp:265
sobec::HorizonManager
Definition: horizon_manager.hpp:19
sobec::HorizonManager::ama
AMA ama(const unsigned long time)
Definition: horizon_manager.cpp:36
sobec::AMA
boost::shared_ptr< crocoddyl::ActionModelAbstract > AMA
Definition: fwd.hpp:147
sobec::HorizonManager::terminaldam
DAM terminaldam()
Definition: horizon_manager.cpp:56
sobec
Definition: activation-quad-ref.hpp:19
sobec::HorizonManager::setTerminalDCMReference
void setTerminalDCMReference(const std::string &nameCost, const eVector3 &ref_translation)
Definition: horizon_manager.cpp:199
sobec::HorizonManager::removeContactLF
void removeContactLF(const unsigned long time, const std::string &nameContactLF)
Definition: horizon_manager.cpp:113
sobec::Cost
boost::shared_ptr< crocoddyl::CostModelSum > Cost
Definition: fwd.hpp:153
sobec::HorizonManager::setTranslationReference
void setTranslationReference(const unsigned long time, const std::string &nameCost, const eVector3 &ref_translation)
Definition: horizon_manager.cpp:184
sobec::HorizonManager::getFootTorque
const eVector3 & getFootTorque(const unsigned long time, const std::string &nameFootForceCost)
Definition: horizon_manager.cpp:328
sobec::HorizonManager::getFootPoseReference
const pinocchio::SE3 & getFootPoseReference(const unsigned long time, const std::string &nameCostFootPose)
Definition: horizon_manager.cpp:220
sobec::HorizonManager::supportSize
int supportSize(const unsigned long time)
Definition: horizon_manager.cpp:358
sobec::HorizonManager::activateContactLF
void activateContactLF(const unsigned long time, const std::string &nameContacttLF)
Definition: horizon_manager.cpp:103
sobec::HorizonManager::setBalancingTorque
void setBalancingTorque(const unsigned long time, const std::string &nameCostActuation, const Eigen::VectorXd &x)
Definition: horizon_manager.cpp:123
sobec::HorizonManager::setTerminalPoseCoM
void setTerminalPoseCoM(const std::string &nameCost, const eVector3 &ref_placement)
Definition: horizon_manager.cpp:213
sobec::HorizonManager::set_ddp
void set_ddp(const DDP &ddp)
Definition: horizon_manager.hpp:151
sobec::newcontacts::x
@ x
Definition: contact1d.hpp:26
sobec::HorizonManager::removeContactRF
void removeContactRF(const unsigned long time, const std::string &nameContactRF)
Definition: horizon_manager.cpp:118
sobec::HorizonManager::setVelocityRefCOM
void setVelocityRefCOM(const unsigned long time, const std::string &nameCost, const eVector3 &ref_placement)
Definition: horizon_manager.cpp:240
sobec::HorizonManager::setSwingingLF
void setSwingingLF(const unsigned long time, const std::string &nameContactLF, const std::string &nameContactRF, const std::string &nameForceContactLF)
Definition: horizon_manager.cpp:291
sobec::HorizonManager::initialized_
bool initialized_
Definition: horizon_manager.hpp:52
sobec::HorizonManager::terminalCosts
Cost terminalCosts()
Definition: horizon_manager.cpp:66
sobec::HorizonManager::ada
ADA ada(const unsigned long time)
Definition: horizon_manager.cpp:72
sobec::ADA
boost::shared_ptr< crocoddyl::ActionDataAbstract > ADA
Definition: fwd.hpp:148
sobec::HorizonManager::getTerminalFootPoseReference
const pinocchio::SE3 & getTerminalFootPoseReference(const std::string &nameCostFootPose)
Definition: horizon_manager.cpp:229
sobec::HorizonManager::setSurfaceInequality
void setSurfaceInequality(const unsigned long time, const std::string &nameCost, const eVector2 &XYpose, const double &orientation)
Definition: horizon_manager.cpp:256
sobec::eVector6
Eigen::Matrix< double, 6, 1 > eVector6
Definition: fwd.hpp:141
sobec::HorizonManager::setSwingingRF
void setSwingingRF(const unsigned long time, const std::string &nameContactLF, const std::string &nameContactRF, const std::string &nameForceContactRF)
Definition: horizon_manager.cpp:300
sobec::HorizonManager::setTerminalRotationReference
void setTerminalRotationReference(const std::string &nameCost, const Eigen::Matrix3d &ref_rotation)
Definition: horizon_manager.cpp:177
model_factory.hpp
sobec::HorizonManager::dad
DAD dad(const unsigned long time)
Definition: horizon_manager.cpp:81
sobec::HorizonManager::setWrenchReference
void setWrenchReference(const unsigned long time, const std::string &nameCost, const eVector6 &reference)
Definition: horizon_manager.cpp:276
sobec::HorizonManagerSettings::rightFootName
std::string rightFootName
Definition: horizon_manager.hpp:16
sobec::HorizonManager::recede
void recede()
Definition: horizon_manager.cpp:349
sobec::IAM
boost::shared_ptr< crocoddyl::IntegratedActionModelEuler > IAM
Definition: fwd.hpp:145
sobec::HorizonManager::size
unsigned long size()
Definition: horizon_manager.cpp:353
sobec::HorizonManager::setVelocityRefFeet
void setVelocityRefFeet(const unsigned long time, const std::string &nameCost, const pinocchio::Motion &ref_velocity)
Definition: horizon_manager.cpp:248
sobec::HorizonManager::getFootForce
const eVector3 & getFootForce(const unsigned long time, const std::string &nameFootForceCost)
Definition: horizon_manager.cpp:316
sobec::HorizonManager::get_ddp
DDP get_ddp()
Definition: horizon_manager.hpp:150
sobec::HorizonManager::currentTorques
const Eigen::VectorXd & currentTorques(const Eigen::VectorXd &measured_x)
Definition: horizon_manager.cpp:393
sobec::eVector3
Eigen::Vector3d eVector3
Definition: fwd.hpp:143
sobec::HorizonManager::dam
DAM dam(const unsigned long time)
Definition: horizon_manager.cpp:50
sobec::DAD
boost::shared_ptr< crocoddyl::DifferentialActionDataContactFwdDynamics > DAD
Definition: fwd.hpp:152
sobec::HorizonManager::iam
IAM iam(const unsigned long time)
Definition: horizon_manager.cpp:40