TVM  0.9.4
Robot.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <tvm/Clock.h>
6 #include <tvm/Variable.h>
7 #include <tvm/VariableVector.h>
9 
10 #include <RBDyn/FD.h>
11 #include <RBDyn/MultiBody.h>
12 #include <RBDyn/MultiBodyConfig.h>
13 #include <RBDyn/MultiBodyGraph.h>
14 
15 #include <RBDyn/parsers/urdf.h>
16 
17 namespace tvm
18 {
19 
48 class TVM_DLLAPI Robot : public graph::abstract::Node<Robot>
49 {
50 public:
51  SET_OUTPUTS(Robot, FK, FV, FA, NormalAcceleration, tau, CoM, H, C, Geometry, Dynamics)
52  SET_UPDATES(Robot, Time, FK, FV, FA, NormalAcceleration, CoM, H, C)
53 
54 
69  Robot(Clock & clock,
70  const std::string & name,
71  rbd::MultiBodyGraph & mbg,
72  rbd::MultiBody mb,
73  rbd::MultiBodyConfig mbc,
74  const rbd::parsers::Limits & limits = {{}, {}, {}, {}});
75 
77  inline const std::string & name() const { return name_; }
78 
80  inline double mass() const { return mass_; }
81 
83  inline const VariableVector & q() const { return q_; }
85  inline VariableVector & q() { return q_; }
86 
88  inline const VariablePtr & qFreeFlyer() const { return q_ff_; }
90  inline VariablePtr & qFreeFlyer() { return q_ff_; }
91 
93  inline const VariablePtr & qJoints() const { return q_joints_; }
95  inline VariablePtr & qJoints() { return q_joints_; }
96 
98  inline const VariablePtr & tau() const { return tau_; }
100  inline VariablePtr & tau() { return tau_; }
101 
103  inline const rbd::MultiBody & mb() const { return mb_; }
105  inline rbd::MultiBody & mb() { return mb_; }
106 
108  inline const rbd::MultiBodyConfig & mbc() const { return mbc_; }
110  inline rbd::MultiBodyConfig & mbc() { return mbc_; }
111 
113  inline const std::vector<sva::MotionVecd> & normalAccB() const { return normalAccB_; }
115  inline std::vector<sva::MotionVecd> & normalAccB() { return normalAccB_; }
116 
118  inline const Eigen::VectorXd & lQBound() const { return lQBound_; }
120  inline Eigen::VectorXd & lQBound() { return lQBound_; }
121 
123  inline const Eigen::VectorXd & uQBound() const { return uQBound_; }
125  inline Eigen::VectorXd & uQBound() { return uQBound_; }
126 
128  inline const Eigen::VectorXd & lVelBound() const { return lVelBound_; }
130  inline Eigen::VectorXd & lVelBound() { return lVelBound_; }
131 
133  inline const Eigen::VectorXd & uVelBound() const { return uVelBound_; }
135  inline Eigen::VectorXd & uVelBound() { return uVelBound_; }
136 
138  inline const Eigen::VectorXd & lTauBound() const { return lTauBound_; }
140  inline Eigen::VectorXd & lTauBound() { return lTauBound_; }
141 
143  inline const Eigen::VectorXd & uTauBound() const { return uTauBound_; }
145  inline Eigen::VectorXd & uTauBound() { return uTauBound_; }
146 
148  inline const Eigen::MatrixXd & H() const { return fd_.H(); }
151  inline const Eigen::VectorXd & C() const { return fd_.C(); }
152 
154  inline const Eigen::Vector3d & com() const { return com_; }
155 
157  inline const sva::PTransformd & bodyTransform(const std::string & b) const { return bodyTransforms_.at(b); }
158 
159 private:
160  Clock & clock_;
161  uint64_t last_tick_ = 0;
162  std::string name_;
163  double mass_;
164  rbd::MultiBody mb_;
165  rbd::MultiBodyConfig mbc_;
166  std::vector<sva::MotionVecd> normalAccB_;
167  Eigen::VectorXd lQBound_;
168  Eigen::VectorXd uQBound_;
169  Eigen::VectorXd lVelBound_;
170  Eigen::VectorXd uVelBound_;
171  Eigen::VectorXd lTauBound_;
172  Eigen::VectorXd uTauBound_;
173  rbd::ForwardDynamics fd_;
174  std::map<std::string, sva::PTransformd> bodyTransforms_;
175  VariablePtr q_ff_;
176  VariablePtr q_joints_;
177  VariableVector q_;
178  VariableVector dq_;
179  VariableVector ddq_;
180  VariablePtr tau_;
181  Eigen::Vector3d com_;
182 
183 private:
184  void computeNormalAccB();
185 
197  void updateTimeDependency();
198  void updateFK();
199  void updateFV();
200  void updateFA();
201  void updateNormalAcceleration();
202  void updateH();
203  void updateC();
204  void updateCoM();
205 };
206 
207 } // namespace tvm
#define SET_UPDATES(SelfT,...)
Definition: AbstractNode.h:138
#define SET_OUTPUTS(SelfT,...)
Definition: Outputs.h:113
#define TVM_DLLAPI
Definition: api.h:35
Definition: Clock.h:27
Definition: Robot.h:49
rbd::MultiBody & mb()
Definition: Robot.h:105
const Eigen::VectorXd & uVelBound() const
Definition: Robot.h:133
const Eigen::VectorXd & lQBound() const
Definition: Robot.h:118
Eigen::VectorXd & lQBound()
Definition: Robot.h:120
Eigen::VectorXd & lVelBound()
Definition: Robot.h:130
Eigen::VectorXd & lTauBound()
Definition: Robot.h:140
const Eigen::VectorXd & lVelBound() const
Definition: Robot.h:128
rbd::MultiBodyConfig & mbc()
Definition: Robot.h:110
const VariablePtr & tau() const
Definition: Robot.h:98
const Eigen::MatrixXd & H() const
Definition: Robot.h:148
Eigen::VectorXd & uTauBound()
Definition: Robot.h:145
Eigen::VectorXd & uQBound()
Definition: Robot.h:125
VariableVector & q()
Definition: Robot.h:85
const Eigen::VectorXd & uQBound() const
Definition: Robot.h:123
const std::vector< sva::MotionVecd > & normalAccB() const
Definition: Robot.h:113
const Eigen::VectorXd & C() const
Definition: Robot.h:151
const VariablePtr & qJoints() const
Definition: Robot.h:93
const VariablePtr & qFreeFlyer() const
Definition: Robot.h:88
const Eigen::VectorXd & uTauBound() const
Definition: Robot.h:143
VariablePtr & tau()
Definition: Robot.h:100
std::vector< sva::MotionVecd > & normalAccB()
Definition: Robot.h:115
double mass() const
Definition: Robot.h:80
const VariableVector & q() const
Definition: Robot.h:83
const rbd::MultiBody & mb() const
Definition: Robot.h:103
const Eigen::Vector3d & com() const
Definition: Robot.h:154
VariablePtr & qJoints()
Definition: Robot.h:95
const rbd::MultiBodyConfig & mbc() const
Definition: Robot.h:108
Eigen::VectorXd & uVelBound()
Definition: Robot.h:135
const Eigen::VectorXd & lTauBound() const
Definition: Robot.h:138
const std::string & name() const
Definition: Robot.h:77
const sva::PTransformd & bodyTransform(const std::string &b) const
Definition: Robot.h:157
VariablePtr & qFreeFlyer()
Definition: Robot.h:90
Definition: VariableVector.h:41
Definition: Node.h:27
Definition: probe.h:44
Definition: Clock.h:12
std::shared_ptr< Variable > VariablePtr
Definition: defs.h:65