tsid  1.8.0
Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio
inverse-dynamics-formulation-acc-force.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2017 CNRS, NYU, MPI Tübingen, UNITN
3 //
4 // This file is part of tsid
5 // tsid is free software: you can redistribute it
6 // and/or modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation, either version
8 // 3 of the License, or (at your option) any later version.
9 // tsid is distributed in the hope that it will be
10 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
11 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Lesser Public License for more details. You should have
13 // received a copy of the GNU Lesser General Public License along with
14 // tsid If not, see
15 // <http://www.gnu.org/licenses/>.
16 //
17 
18 #ifndef __invdyn_inverse_dynamics_formulation_acc_force_hpp__
19 #define __invdyn_inverse_dynamics_formulation_acc_force_hpp__
20 
21 #include <vector>
22 
26 
27 namespace tsid {
28 
30  public:
31  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
32 
33  double time_start;
34  double time_end;
35  double fMax_start;
36  double fMax_end;
37  std::shared_ptr<ContactLevel> contactLevel;
38 };
39 
42  public:
43  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
44 
55 
56  InverseDynamicsFormulationAccForce(const std::string& name,
57  RobotWrapper& robot, bool verbose = false);
58 
59  Data& data() override;
60 
61  unsigned int nVar() const override;
62  unsigned int nEq() const override;
63  unsigned int nIn() const override;
64 
65  bool addMotionTask(TaskMotion& task, double weight,
66  unsigned int priorityLevel,
67  double transition_duration = 0.0) override;
68 
69  bool addForceTask(TaskContactForce& task, double weight,
70  unsigned int priorityLevel,
71  double transition_duration = 0.0) override;
72 
73  bool addActuationTask(TaskActuation& task, double weight,
74  unsigned int priorityLevel,
75  double transition_duration = 0.0) override;
76 
77  bool updateTaskWeight(const std::string& task_name, double weight) override;
78 
79  bool addRigidContact(ContactBase& contact, double force_regularization_weight,
80  double motion_weight = 1.0,
81  unsigned int motion_priority_level = 0) override;
82 
83  TSID_DEPRECATED bool addRigidContact(ContactBase& contact) override;
84 
85  bool updateRigidContactWeights(const std::string& contact_name,
86  double force_regularization_weight,
87  double motion_weight = -1.0) override;
88 
89  bool addMeasuredForce(MeasuredForceBase& measuredForce) override;
90 
91  bool removeTask(const std::string& taskName,
92  double transition_duration = 0.0) override;
93 
94  bool removeRigidContact(const std::string& contactName,
95  double transition_duration = 0.0) override;
96 
97  bool removeMeasuredForce(const std::string& measuredForceName) override;
98 
99  const HQPData& computeProblemData(double time, ConstRefVector q,
100  ConstRefVector v) override;
101 
102  const Vector& getActuatorForces(const HQPOutput& sol) override;
103  const Vector& getAccelerations(const HQPOutput& sol) override;
104  const Vector& getContactForces(const HQPOutput& sol) override;
105  Vector getContactForces(const std::string& name, const HQPOutput& sol);
106  bool getContactForces(const std::string& name, const HQPOutput& sol,
107  RefVector f) override;
108 
109  public:
110  template <class TaskLevelPointer>
111  void addTask(TaskLevelPointer task, double weight,
112  unsigned int priorityLevel);
113 
114  void resizeHqpData();
115 
116  bool removeFromHqpData(const std::string& name);
117 
118  bool decodeSolution(const HQPOutput& sol);
119 
122  std::vector<std::shared_ptr<TaskLevel>> m_taskMotions;
123  std::vector<std::shared_ptr<TaskLevelForce>> m_taskContactForces;
124  std::vector<std::shared_ptr<TaskLevel>> m_taskActuations;
125  std::vector<std::shared_ptr<ContactLevel>> m_contacts;
126  std::vector<std::shared_ptr<MeasuredForceLevel>> m_measuredForces;
127  double m_t;
128  unsigned int m_k;
129  unsigned int m_v;
130  unsigned int m_u;
131  unsigned int m_eq;
132  unsigned int m_in;
134  std::shared_ptr<math::ConstraintEquality> m_baseDynamics;
135 
140 
142 
143  std::vector<std::shared_ptr<ContactTransitionInfo>> m_contactTransitions;
144 };
145 } // namespace tsid
146 #endif // ifndef __invdyn_inverse_dynamics_formulation_acc_force_hpp__
Definition: inverse-dynamics-formulation-acc-force.hpp:29
EIGEN_MAKE_ALIGNED_OPERATOR_NEW double time_start
Definition: inverse-dynamics-formulation-acc-force.hpp:33
double fMax_start
Definition: inverse-dynamics-formulation-acc-force.hpp:35
double fMax_end
max normal force at time time_start
Definition: inverse-dynamics-formulation-acc-force.hpp:36
std::shared_ptr< ContactLevel > contactLevel
max normal force at time time_end
Definition: inverse-dynamics-formulation-acc-force.hpp:37
double time_end
Definition: inverse-dynamics-formulation-acc-force.hpp:34
Definition: inverse-dynamics-formulation-acc-force.hpp:41
void addTask(TaskLevelPointer task, double weight, unsigned int priorityLevel)
Definition: inverse-dynamics-formulation-acc-force.cpp:74
HQPData m_hqpData
Definition: inverse-dynamics-formulation-acc-force.hpp:121
bool updateTaskWeight(const std::string &task_name, double weight) override
Definition: inverse-dynamics-formulation-acc-force.cpp:162
unsigned int m_u
number of acceleration variables
Definition: inverse-dynamics-formulation-acc-force.hpp:130
std::vector< std::shared_ptr< TaskLevelForce > > m_taskContactForces
Definition: inverse-dynamics-formulation-acc-force.hpp:123
Vector m_tau
Definition: inverse-dynamics-formulation-acc-force.hpp:139
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef pinocchio::Data Data
Definition: inverse-dynamics-formulation-acc-force.hpp:45
unsigned int m_in
number of equality constraints
Definition: inverse-dynamics-formulation-acc-force.hpp:132
tasks::TaskBase TaskBase
Definition: inverse-dynamics-formulation-acc-force.hpp:49
unsigned int m_eq
number of unactuated DoFs
Definition: inverse-dynamics-formulation-acc-force.hpp:131
bool decodeSolution(const HQPOutput &sol)
Definition: inverse-dynamics-formulation-acc-force.cpp:415
void resizeHqpData()
Definition: inverse-dynamics-formulation-acc-force.cpp:63
unsigned int m_k
time
Definition: inverse-dynamics-formulation-acc-force.hpp:128
bool updateRigidContactWeights(const std::string &contact_name, double force_regularization_weight, double motion_weight=-1.0) override
Update the weights associated to the specified contact.
Definition: inverse-dynamics-formulation-acc-force.cpp:221
unsigned int nEq() const override
Definition: inverse-dynamics-formulation-acc-force.cpp:59
math::Matrix Matrix
Definition: inverse-dynamics-formulation-acc-force.hpp:47
const Vector & getActuatorForces(const HQPOutput &sol) override
Definition: inverse-dynamics-formulation-acc-force.cpp:431
std::vector< std::shared_ptr< TaskLevel > > m_taskMotions
Definition: inverse-dynamics-formulation-acc-force.hpp:122
tasks::TaskContactForce TaskContactForce
Definition: inverse-dynamics-formulation-acc-force.hpp:51
const HQPData & computeProblemData(double time, ConstRefVector q, ConstRefVector v) override
Definition: inverse-dynamics-formulation-acc-force.cpp:255
math::Vector Vector
Definition: inverse-dynamics-formulation-acc-force.hpp:46
bool addMeasuredForce(MeasuredForceBase &measuredForce) override
Definition: inverse-dynamics-formulation-acc-force.cpp:247
bool removeMeasuredForce(const std::string &measuredForceName) override
Definition: inverse-dynamics-formulation-acc-force.cpp:577
bool addRigidContact(ContactBase &contact, double force_regularization_weight, double motion_weight=1.0, unsigned int motion_priority_level=0) override
Add a rigid contact constraint to the model, introducing the associated reaction forces as problem va...
Definition: inverse-dynamics-formulation-acc-force.cpp:177
bool removeTask(const std::string &taskName, double transition_duration=0.0) override
Definition: inverse-dynamics-formulation-acc-force.cpp:477
Vector h_fext
Definition: inverse-dynamics-formulation-acc-force.hpp:141
const Vector & getContactForces(const HQPOutput &sol) override
Definition: inverse-dynamics-formulation-acc-force.cpp:443
InverseDynamicsFormulationAccForce(const std::string &name, RobotWrapper &robot, bool verbose=false)
Definition: inverse-dynamics-formulation-acc-force.cpp:32
tasks::TaskMotion TaskMotion
Definition: inverse-dynamics-formulation-acc-force.hpp:50
math::ConstRefVector ConstRefVector
Definition: inverse-dynamics-formulation-acc-force.hpp:48
std::shared_ptr< math::ConstraintEquality > m_baseDynamics
contact force Jacobian
Definition: inverse-dynamics-formulation-acc-force.hpp:134
std::vector< std::shared_ptr< TaskLevel > > m_taskActuations
Definition: inverse-dynamics-formulation-acc-force.hpp:124
Vector m_f
Definition: inverse-dynamics-formulation-acc-force.hpp:138
unsigned int nVar() const override
Definition: inverse-dynamics-formulation-acc-force.cpp:55
bool removeRigidContact(const std::string &contactName, double transition_duration=0.0) override
Definition: inverse-dynamics-formulation-acc-force.cpp:520
bool addForceTask(TaskContactForce &task, double weight, unsigned int priorityLevel, double transition_duration=0.0) override
Definition: inverse-dynamics-formulation-acc-force.cpp:113
Matrix m_Jc
number of inequality constraints
Definition: inverse-dynamics-formulation-acc-force.hpp:133
const Vector & getAccelerations(const HQPOutput &sol) override
Definition: inverse-dynamics-formulation-acc-force.cpp:437
bool m_solutionDecoded
Definition: inverse-dynamics-formulation-acc-force.hpp:136
Data m_data
Definition: inverse-dynamics-formulation-acc-force.hpp:120
bool removeFromHqpData(const std::string &name)
Definition: inverse-dynamics-formulation-acc-force.cpp:588
solvers::HQPOutput HQPOutput
Definition: inverse-dynamics-formulation-acc-force.hpp:54
Data & data() override
Definition: inverse-dynamics-formulation-acc-force.cpp:53
bool addMotionTask(TaskMotion &task, double weight, unsigned int priorityLevel, double transition_duration=0.0) override
Definition: inverse-dynamics-formulation-acc-force.cpp:97
std::vector< std::shared_ptr< ContactLevel > > m_contacts
Definition: inverse-dynamics-formulation-acc-force.hpp:125
Vector m_dv
Definition: inverse-dynamics-formulation-acc-force.hpp:137
unsigned int m_v
number of contact-force variables
Definition: inverse-dynamics-formulation-acc-force.hpp:129
contacts::MeasuredForceBase MeasuredForceBase
Definition: inverse-dynamics-formulation-acc-force.hpp:53
double m_t
Definition: inverse-dynamics-formulation-acc-force.hpp:127
unsigned int nIn() const override
Definition: inverse-dynamics-formulation-acc-force.cpp:61
std::vector< std::shared_ptr< ContactTransitionInfo > > m_contactTransitions
sum of external measured forces
Definition: inverse-dynamics-formulation-acc-force.hpp:143
std::vector< std::shared_ptr< MeasuredForceLevel > > m_measuredForces
Definition: inverse-dynamics-formulation-acc-force.hpp:126
bool addActuationTask(TaskActuation &task, double weight, unsigned int priorityLevel, double transition_duration=0.0) override
Definition: inverse-dynamics-formulation-acc-force.cpp:128
tasks::TaskActuation TaskActuation
Definition: inverse-dynamics-formulation-acc-force.hpp:52
Wrapper for a robot based on pinocchio.
Definition: inverse-dynamics-formulation-base.hpp:66
math::RefVector RefVector
Definition: inverse-dynamics-formulation-base.hpp:72
solvers::HQPData HQPData
Definition: inverse-dynamics-formulation-base.hpp:80
Base template of a Contact.
Definition: contact-base.hpp:31
Definition: measured-force-base.hpp:28
Wrapper for a robot based on pinocchio.
Definition: robot-wrapper.hpp:37
Definition: solver-HQP-output.hpp:29
Definition: task-actuation.hpp:25
Base template of a Task. Each class is defined according to a constant model of a robot.
Definition: task-base.hpp:34
Definition: task-contact-force.hpp:28
Definition: task-motion.hpp:26
#define TSID_DEPRECATED
Definition: deprecated.hh:37
pinocchio::Data Data
Definition: inverse-dynamics-formulation-acc-force.cpp:30
const Eigen::Ref< const Vector > ConstRefVector
Definition: fwd.hpp:48
Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > Vector
Definition: fwd.hpp:35
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > Matrix
Definition: fwd.hpp:36
Definition: constraint-bound.hpp:25