10#include <unordered_map>
14#include <SpaceVecAlg/SpaceVecAlg>
17#include <rbdyn/config.hh>
43 std::vector<Joint> joints,
44 std::vector<int> pred,
45 std::vector<int> succ,
46 std::vector<int> parent,
47 std::vector<sva::PTransformd> Xt);
52 return static_cast<int>(bodies_.size());
58 return static_cast<int>(joints_.size());
62 const std::vector<Body> &
bodies()
const
70 bodies_ = std::move(b);
76 return bodies_[
static_cast<std::size_t
>(num)];
82 bodies_[
static_cast<std::size_t
>(num)] = b;
86 const std::vector<Joint> &
joints()
const
94 return joints_[
static_cast<std::size_t
>(num)];
106 return pred_[
static_cast<std::size_t
>(num)];
118 return succ_[
static_cast<std::size_t
>(num)];
130 return parent_[
static_cast<std::size_t
>(num)];
148 return Xt_[
static_cast<std::size_t
>(num)];
154 Xt_[
static_cast<std::size_t
>(num)] = Xt;
160 return bodyNameToInd_.find(name)->second;
166 return jointNameToInd_.find(name)->second;
172 return bodyNameToInd_;
178 return jointNameToInd_;
184 return jointPosInParam_[
static_cast<std::size_t
>(i)];
190 return jointPosInDof_[
static_cast<std::size_t
>(i)];
196 return jointPosInParam_;
202 return jointPosInDof_;
225 joints_[
static_cast<std::size_t
>(index)].setRotorInertia(Ir);
236 joints_[
static_cast<std::size_t
>(index)].setGearRatio(gr);
246 if(b.size() != bodies_.size())
248 std::ostringstream str;
249 str <<
"bodies vector size mismatch: expected size " << bodies_.size() <<
" gived " << b.size();
250 throw std::runtime_error(str.str());
260 return bodies_.at(
static_cast<std::size_t
>(num));
268 bodies_.at(
static_cast<std::size_t
>(num)) = b;
276 return joints_.at(
static_cast<std::size_t
>(num));
284 return pred_.at(
static_cast<std::size_t
>(num));
292 return succ_.at(
static_cast<std::size_t
>(num));
300 return parent_.at(
static_cast<std::size_t
>(num));
308 if(Xt.size() != Xt_.size())
310 std::ostringstream str;
311 str <<
"transform vector size mismatch: expected size " << Xt_.size() <<
" gived " << Xt.size();
312 throw std::runtime_error(str.str());
322 return Xt_.at(
static_cast<std::size_t
>(num));
330 Xt_.at(
static_cast<std::size_t
>(num)) = Xt;
338 return jointPosInParam_.at(
static_cast<std::size_t
>(i));
346 return jointPosInDof_.at(
static_cast<std::size_t
>(i));
355 return bodyNameToInd_.at(name);
364 return jointNameToInd_.at(name);
375 std::vector<sva::PTransformd>
Xt_;
Definition MultiBody.h:30
int sSuccessor(int num) const
Definition MultiBody.h:290
const std::vector< int > & successors() const
Definition MultiBody.h:110
std::vector< sva::PTransformd > Xt_
Transformation from the body base to joint i.
Definition MultiBody.h:375
const Joint & joint(int num) const
Definition MultiBody.h:92
const sva::PTransformd & sTransform(int num) const
Definition MultiBody.h:320
int nrParams() const
Definition MultiBody.h:206
int jointPosInDof(int i) const
Definition MultiBody.h:188
int predecessor(int num) const
Definition MultiBody.h:104
void setJointGearRatio(int index, double gr)
Set Joint Gear Ratio.
Definition MultiBody.h:234
int sPredecessor(int num) const
Definition MultiBody.h:282
void bodies(std::vector< Body > b)
Set bodies of the multibody system.
Definition MultiBody.h:68
int nrDof_
Definition MultiBody.h:386
MultiBody(std::vector< Body > bodies, std::vector< Joint > joints, std::vector< int > pred, std::vector< int > succ, std::vector< int > parent, std::vector< sva::PTransformd > Xt)
const std::unordered_map< std::string, int > & bodyIndexByName() const
Definition MultiBody.h:170
const std::vector< int > & parents() const
Definition MultiBody.h:122
int parent(int num) const
Definition MultiBody.h:128
const std::vector< Body > & bodies() const
Definition MultiBody.h:62
std::vector< int > parent_
Definition MultiBody.h:373
void transform(int num, const sva::PTransformd &Xt)
Set the transformation from the body base to joint num.
Definition MultiBody.h:152
const Joint & sJoint(int num) const
Definition MultiBody.h:274
int sJointPosInDof(int i) const
Definition MultiBody.h:344
const Body & body(int num) const
Definition MultiBody.h:74
const std::vector< int > & jointsPosInDof() const
Definition MultiBody.h:200
std::vector< int > pred_
Definition MultiBody.h:371
void sBody(int num, const Body &b)
Definition MultiBody.h:266
int jointPosInParam(int i) const
Definition MultiBody.h:182
void sTransforms(std::vector< sva::PTransformd > Xt)
Definition MultiBody.h:306
std::vector< int > succ_
Definition MultiBody.h:372
int successor(int num) const
Definition MultiBody.h:116
int jointIndexByName(const std::string &name) const
Definition MultiBody.h:164
void body(int num, const Body &b)
Set the body num in bodies list.
Definition MultiBody.h:80
const std::unordered_map< std::string, int > & jointIndexByName() const
Definition MultiBody.h:176
const std::vector< int > & jointsPosInParam() const
Definition MultiBody.h:194
const std::vector< Joint > & joints() const
Definition MultiBody.h:86
void sBodies(std::vector< Body > b)
Definition MultiBody.h:244
int nrParams_
Definition MultiBody.h:385
int nrDof() const
Definition MultiBody.h:212
const std::vector< sva::PTransformd > & transforms() const
Definition MultiBody.h:134
const std::vector< int > & predecessors() const
Definition MultiBody.h:98
const Body & sBody(int num) const
Definition MultiBody.h:258
int nrBodies() const
Definition MultiBody.h:50
int sJointPosInParam(int i) const
Definition MultiBody.h:336
std::vector< Body > bodies_
Definition MultiBody.h:368
void transforms(std::vector< sva::PTransformd > Xt)
Definition MultiBody.h:140
void setJointRotorInertia(int index, double Ir)
Set Joint Rotor Inertia.
Definition MultiBody.h:223
const sva::PTransformd & transform(int num) const
Definition MultiBody.h:146
std::unordered_map< std::string, int > jointNameToInd_
Definition MultiBody.h:378
int bodyIndexByName(const std::string &name) const
Definition MultiBody.h:158
std::vector< int > jointPosInDof_
Position of joint i in dof vector (velocity, acceleration...).
Definition MultiBody.h:383
std::vector< Joint > joints_
Definition MultiBody.h:369
int sBodyIndexByName(const std::string &name) const
Definition MultiBody.h:353
int sParent(int num) const
Definition MultiBody.h:298
int sJointIndexByName(const std::string &name) const
Definition MultiBody.h:362
int nrJoints() const
Definition MultiBody.h:56
std::vector< int > jointPosInParam_
Position of joint i in parameter vector.
Definition MultiBody.h:381
std::unordered_map< std::string, int > bodyNameToInd_
Definition MultiBody.h:377
void sTransform(int num, const sva::PTransformd &Xt)
Definition MultiBody.h:328