14 #include <SpaceVecAlg/SpaceVecAlg>
17 #include <rbdyn/config.hh>
45 Arc(sva::PTransformd X0,
const Joint & j,
bool forward, std::shared_ptr<Node> n) : X(X0), joint(j), next(n)
47 joint.forward(forward);
52 std::shared_ptr<Node>
next;
81 void addBody(
const Body & B);
88 void addJoint(
const Joint & J);
102 void linkBodies(
const std::string & b1Name,
103 const sva::PTransformd & tB1,
104 const std::string & b2Name,
105 const sva::PTransformd & tB2,
106 const std::string & jointName,
107 bool isB1toB2 =
true);
114 const std::shared_ptr<Node> nodeByName(
const std::string & name)
const;
121 const std::shared_ptr<Joint> jointByName(
const std::string & name)
const;
124 std::size_t nrNodes()
const;
127 std::size_t nrJoints()
const;
137 MultiBody makeMultiBody(
const std::string & rootBodyName,
139 const sva::PTransformd & X_0_j0 = sva::PTransformd::Identity(),
140 const sva::PTransformd & X_b0_j0 = sva::PTransformd::Identity())
const;
150 MultiBody makeMultiBody(
const std::string & rootBodyName,
152 const sva::PTransformd & X_0_j0 = sva::PTransformd::Identity(),
153 const sva::PTransformd & X_b0_j0 = sva::PTransformd::Identity())
const;
164 MultiBody makeMultiBody(
const std::string & rootBodyName,
166 const Eigen::Vector3d & axis,
167 const sva::PTransformd & X_0_j0 = sva::PTransformd::Identity(),
168 const sva::PTransformd & X_b0_j0 = sva::PTransformd::Identity())
const;
176 void removeJoint(
const std::string & rootBodyName,
const std::string & jointName);
185 void removeJoints(
const std::string & rootBodyName,
const std::vector<std::string> & joints);
194 void mergeSubBodies(
const std::string & rootBodyName,
195 const std::string & jointName,
196 const std::map<std::string, std::vector<double>> & jointPosByName);
206 std::map<std::string, sva::PTransformd> bodiesBaseTransform(
207 const std::string & rootBodyName,
208 const sva::PTransformd & X_b0_j0 = sva::PTransformd::Identity());
216 std::map<std::string, std::vector<std::string>> successorJoints(
const std::string & rootBodyName);
224 std::map<std::string, std::string> predecessorJoint(
const std::string & rootBodyName);
234 const std::vector<std::string> & jointsToFix,
235 bool fixAllJoints =
false);
242 bool rmArc(
Node & node,
const std::string & parentJointName,
const std::string & jointName);
248 void rmArcFromMbg(
const Arc & arc);
254 void rmNodeFromMbg(
const std::string & jointNameFrom,
const std::shared_ptr<Node> & node);
261 bool findMergeSubNodes(
Node & node,
262 const std::string & parentJointName,
263 const std::string & jointName,
264 const std::map<std::string, std::vector<double>> & jointPosByName);
270 sva::RBInertiad mergeSubNodes(
Node & node,
271 const std::string & parentJointName,
272 const std::map<std::string, std::vector<double>> & jointPosByName);
278 sva::RBInertiad mergeInertia(
const sva::RBInertiad & parentInertia,
279 const sva::RBInertiad & childInertia,
281 const sva::PTransformd & X_p_j,
282 const std::map<std::string, std::vector<double>> & jointPosByName);
289 std::vector<std::shared_ptr<Node>>
nodes_;