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;
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;
139 const sva::PTransformd & X_0_j0 = sva::PTransformd::Identity(),
140 const sva::PTransformd & X_b0_j0 = sva::PTransformd::Identity())
const;
152 const sva::PTransformd & X_0_j0 = sva::PTransformd::Identity(),
153 const sva::PTransformd & X_b0_j0 = sva::PTransformd::Identity())
const;
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);
195 const std::string & jointName,
196 const std::map<std::string, std::vector<double>> & jointPosByName);
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);
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_;
Type
Joint type.
Definition Joint.h:40
Definition MultiBodyGraph.h:33
MultiBodyGraph(const MultiBodyGraph &mbg)
std::map< std::string, std::string > predecessorJoint(const std::string &rootBodyName)
MultiBody makeMultiBody(const std::string &rootBodyName, Joint::Type rootJointType, const Eigen::Vector3d &axis, const sva::PTransformd &X_0_j0=sva::PTransformd::Identity(), const sva::PTransformd &X_b0_j0=sva::PTransformd::Identity()) const
void mergeSubBodies(const std::string &rootBodyName, const std::string &jointName, const std::map< std::string, std::vector< double > > &jointPosByName)
std::map< std::string, std::vector< std::string > > successorJoints(const std::string &rootBodyName)
void addBody(const Body &B)
std::vector< std::shared_ptr< Joint > > joints_
Definition MultiBodyGraph.h:290
std::string rootJointName_
Definition MultiBodyGraph.h:288
const std::shared_ptr< Joint > jointByName(const std::string &name) const
void removeJoint(const std::string &rootBodyName, const std::string &jointName)
void addJoint(const Joint &J)
std::size_t nrNodes() const
void linkBodies(const std::string &b1Name, const sva::PTransformd &tB1, const std::string &b2Name, const sva::PTransformd &tB2, const std::string &jointName, bool isB1toB2=true)
std::map< std::string, sva::PTransformd > bodiesBaseTransform(const std::string &rootBodyName, const sva::PTransformd &X_b0_j0=sva::PTransformd::Identity())
std::map< std::string, std::shared_ptr< Joint > > jointNameToJoint_
Definition MultiBodyGraph.h:293
std::size_t nrJoints() const
MultiBodyGraph(const std::string rootName="Root")
std::vector< std::shared_ptr< Node > > nodes_
Definition MultiBodyGraph.h:289
MultiBody makeMultiBody(const std::string &rootBodyName, bool isFixed, const sva::PTransformd &X_0_j0=sva::PTransformd::Identity(), const sva::PTransformd &X_b0_j0=sva::PTransformd::Identity()) const
MultiBodyGraph & operator=(const MultiBodyGraph &mbg)
std::map< std::string, std::shared_ptr< Node > > bodyNameToNode_
Definition MultiBodyGraph.h:292
static MultiBodyGraph fixJoints(const MultiBodyGraph &other, const std::vector< std::string > &jointsToFix, bool fixAllJoints=false)
void removeJoints(const std::string &rootBodyName, const std::vector< std::string > &joints)
MultiBody makeMultiBody(const std::string &rootBodyName, Joint::Type rootJointType, const sva::PTransformd &X_0_j0=sva::PTransformd::Identity(), const sva::PTransformd &X_b0_j0=sva::PTransformd::Identity()) const
const std::shared_ptr< Node > nodeByName(const std::string &name) const
Definition MultiBody.h:30
Definition MultiBodyGraph.h:42
Arc()
Definition MultiBodyGraph.h:43
std::shared_ptr< Node > next
successor node.
Definition MultiBodyGraph.h:52
Arc(sva::PTransformd X0, const Joint &j, bool forward, std::shared_ptr< Node > n)
Definition MultiBodyGraph.h:45
sva::PTransformd X
Position of the joint in body coordinate.
Definition MultiBodyGraph.h:50
Joint joint
Joint with right direction.
Definition MultiBodyGraph.h:51
Definition MultiBodyGraph.h:60
std::vector< Arc > arcs
Outgoing arc.
Definition MultiBodyGraph.h:64
Node(const Body &b)
Definition MultiBodyGraph.h:61
Body body
Definition MultiBodyGraph.h:63