49 #ifndef RBD_rigidBodyModel_H
50 #define RBD_rigidBodyModel_H
67 Ostream&
operator<<(Ostream&,
const rigidBodyModel&);
69 class rigidBodyModelState;
83 void initialiseRootBody();
89 void makeComposite(
const label bodyID);
198 const label parentID,
246 inline const vector&
g()
const;
268 const label parentID,
281 const label parentID,
293 const label parentID,
An STL-conforming hash table.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
This class represents the linear and angular inertia of a rigid body by the mass, centre of mass and ...
Holds the motion state of rigid-body model.
Basic rigid-body model representing a system of rigid-bodies connected by 1-6 DoF joints.
DynamicList< spatialTransform > X0_
Transform for external forces to the bodies reference frame.
DynamicList< spatialTransform > XT_
Transform from the parent body frame to the joint frame.
const spatialVector & v(const label i) const
Return the spatial velocity of the bodies.
rigidBodyModel()
Null-constructor which adds the single root-body at the origin.
label nBodies() const
Return the number of bodies in the model (bodies().size())
DynamicList< spatialVector > a_
The spatial acceleration of the bodies.
DynamicList< vector > u_
Sub-expression tau - S^T.pA in the forward-dynamics algorithm.
label mergedBodyID(const label mergedBodyIndex) const
Return the merged body ID for the given merged body index.
DynamicList< spatialVector > pA_
Articulated body bias force.
wordList movingBodyNames() const
Return the names of the moving bodies.
bool unitQuaternions() const
Return true if any of the joints using quaternions.
virtual void write(Ostream &) const
Write.
label master(label bodyID) const
Return the ID of the master body for a sub-body otherwise.
label nDoF_
The number of degrees of freedom of the model.
DynamicList< compactSpatialTensor > S_
Motion subspace for joints with 3 degrees of freedom.
DynamicList< spatialVector > U1_
Sub-expression IA.S1 in the forward-dynamics algorithm.
vector masterPoint(const label bodyID, const vector &p) const
DynamicList< tensor > Dinv_
Sub-expression (S^T.U)^-1 in the forward-dynamics algorithm.
DynamicList< spatialTensor > IA_
Velocity-product acceleration.
spatialVector a(const label bodyID, const vector &p) const
Return the acceleration of the given point on the given body.
PtrList< subBody > mergedBodies_
Bodies may be merged into existing bodies, the inertia of which is.
const subBody & mergedBody(label mergedBodyID) const
Return the merged body for the given body ID.
HashTable< label, word > bodyIndices_
Lookup-table of the IDs of the bodies.
vector p(const label bodyID, const vector &p) const
Return the current position of the given point on the given body.
void forwardDynamicsCorrection(const rigidBodyModelState &state) const
Correct the velocity and acceleration of the bodies in the model.
TypeName("rigidBodyModel")
Runtime type information.
PtrList< rigidBody > bodies_
List of the bodies.
friend Ostream & operator<<(Ostream &, const rigidBodyModel &)
DynamicList< spatialVector > c_
The velocity dependent spatial acceleration of the joints.
label merge(const label parentID, const spatialTransform &X, autoPtr< rigidBody > bodyPtr)
Merge the given body with transform X into the parent with ID.
bool read(const dictionary &dict)
Read coefficients dictionary and update system parameters,.
bool unitQuaternions_
True if any of the joints using quaternions.
void applyRestraints(scalarField &tau, Field< spatialVector > &fx, const rigidBodyModelState &state) const
Apply the restraints and accumulate the internal joint forces.
const vector & g() const
Return the acceleration due to gravity.
vector g_
Acceleration due to gravity.
PtrList< restraint > restraints_
Motion restraints.
label nDoF() const
Return the number of degrees of freedom of the model.
PtrList< rigidBody > bodies() const
Return the list of the bodies in the model.
label mergedBodyIndex(const label mergedBodyID) const
Return the index of the merged body in the mergedBody list.
virtual label join(const label parentID, const spatialTransform &XT, autoPtr< joint > jointPtr, autoPtr< rigidBody > bodyPtr)
Join the given body to the parent with ID parentID via the given.
label bodyIndex(const word &name) const
Return the ID of the body with the given name.
const DynamicList< label > & lambda() const
List of indices of the parent of each body.
const word & name(const label bodyID) const
Return the name of body with the given ID.
PtrList< joint > joints_
Each body it attached with a joint which are held on this list.
virtual label join_(const label parentID, const spatialTransform &XT, autoPtr< joint > jointPtr, autoPtr< rigidBody > bodyPtr)
Join the given body to the parent with ID parentID via the given.
DynamicList< spatialVector > S1_
Motion subspace for joints with 1 degrees of freedom.
DynamicList< compactSpatialTensor > U_
Sub-expression IA.S in the forward-dynamics algorithm.
const PtrList< joint > & joints() const
Return the list of joints in the model.
void forwardDynamics(rigidBodyModelState &state, const scalarField &tau, const Field< spatialVector > &fx) const
Calculate the joint acceleration qDdot from the joint state q,.
DynamicList< spatialTransform > Xlambda_
Transform from the parent body to the current body.
virtual ~rigidBodyModel()
Destructor.
DynamicList< spatialVector > v_
The spatial velocity of the bodies.
const rigidBodyInertia & I(const label i) const
Return the inertia of body i.
bool merged(label bodyID) const
Return true if the body with given ID has been merged with a parent.
spatialTransform X0(const label bodyId) const
Return the current transform to the global frame for the given body.
DynamicList< label > lambda_
List of indices of the parent of each body.
This specialised rigidBody holds the original body after it has been merged into a master.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
A list of keyword definitions, which are a keyword followed by any number of values (e....
A class for handling words, derived from string.
Ostream & operator<<(Ostream &, const rigidBody &)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.