![]() |
Finite Element Model (a.k.a. More...
#include <SurgSim/Physics/FemRepresentation.h>
Public Member Functions | |
FemRepresentation (const std::string &name) | |
Constructor. More... | |
virtual | ~FemRepresentation () |
Destructor. More... | |
void | setFilename (const std::string &filename) |
Sets the name of the file to be loaded. More... | |
const std::string & | getFilename () const |
Gets the name of the file to be loaded. More... | |
bool | loadFile () |
Loads the file. More... | |
void | addFemElement (const std::shared_ptr< FemElement > element) |
Adds a FemElement. More... | |
size_t | getNumFemElements () const |
Gets the number of FemElement. More... | |
std::shared_ptr< FemElement > | getFemElement (size_t femElementId) |
Retrieves a given FemElement from its id. More... | |
double | getTotalMass () const |
Gets the total mass of the fem. More... | |
double | getRayleighDampingStiffness () const |
Gets the Rayleigh stiffness parameter. More... | |
double | getRayleighDampingMass () const |
Gets the Rayleigh mass parameter. More... | |
void | setRayleighDampingStiffness (double stiffnessCoef) |
Sets the Rayleigh stiffness parameter. More... | |
void | setRayleighDampingMass (double massCoef) |
Sets the Rayleigh mass parameter. More... | |
bool | isValidCoordinate (const SurgSim::DataStructures::IndexedLocalCoordinate &coordinate) const |
Determines whether the associated coordinate is valid. More... | |
virtual void | beforeUpdate (double dt) override |
Preprocessing done before the update call. More... | |
virtual void | afterUpdate (double dt) override |
Postprocessing done after the update call. More... | |
virtual SurgSim::Math::Vector & | computeF (const SurgSim::Math::OdeState &state) override |
Evaluation of the RHS function f(x,v) for a given state. More... | |
virtual const SurgSim::Math::Matrix & | computeM (const SurgSim::Math::OdeState &state) override |
Evaluation of the LHS matrix M(x,v) for a given state. More... | |
virtual const SurgSim::Math::Matrix & | computeD (const SurgSim::Math::OdeState &state) override |
Evaluation of D = -df/dv (x,v) for a given state. More... | |
virtual const SurgSim::Math::Matrix & | computeK (const SurgSim::Math::OdeState &state) override |
Evaluation of K = -df/dx (x,v) for a given state. More... | |
virtual void | computeFMDK (const SurgSim::Math::OdeState &state, SurgSim::Math::Vector **f, SurgSim::Math::Matrix **M, SurgSim::Math::Matrix **D, SurgSim::Math::Matrix **K) override |
Evaluation of f(x,v), M(x,v), D = -df/dv(x,v), K = -df/dx(x,v) When all the terms are needed, this method can perform optimization in evaluating everything together. More... | |
![]() | |
DeformableRepresentation (const std::string &name) | |
Constructor. More... | |
virtual | ~DeformableRepresentation () |
Destructor. More... | |
virtual void | resetState () override |
Reset the representation to its initial/default state. More... | |
virtual void | setInitialState (std::shared_ptr< SurgSim::Math::OdeState > initialState) |
virtual const std::shared_ptr< SurgSim::Math::OdeState > | getCurrentState () const |
virtual const std::shared_ptr< SurgSim::Math::OdeState > | getPreviousState () const |
virtual const std::shared_ptr< SurgSim::Math::OdeState > | getFinalState () const |
size_t | getNumDofPerNode () const |
Gets the number of degrees of freedom per node. More... | |
void | setIntegrationScheme (SurgSim::Math::IntegrationScheme integrationScheme) |
Sets the numerical integration scheme. More... | |
SurgSim::Math::IntegrationScheme | getIntegrationScheme () const |
Gets the numerical integration scheme. More... | |
virtual void | addExternalGeneralizedForce (std::shared_ptr< Localization > localization, SurgSim::Math::Vector &generalizedForce, const SurgSim::Math::Matrix &K=SurgSim::Math::Matrix(), const SurgSim::Math::Matrix &D=SurgSim::Math::Matrix())=0 |
Add an external generalized force applied on a specific localization. More... | |
const SurgSim::Math::Vector & | getExternalGeneralizedForce () const |
const SurgSim::Math::Matrix & | getExternalGeneralizedStiffness () const |
const SurgSim::Math::Matrix & | getExternalGeneralizedDamping () const |
const SurgSim::Math::Matrix & | getComplianceMatrix () const |
Gets the compliance matrix associated with motion. More... | |
virtual void | update (double dt) override |
Update the representation state to the current time step. More... | |
virtual void | applyCorrection (double dt, const Eigen::VectorBlock< SurgSim::Math::Vector > &deltaVelocity) override |
Update the Representation's current position and velocity using a time interval, dt, and change in velocity, deltaVelocity. More... | |
void | deactivateAndReset (void) |
Deactivate and call resetState. More... | |
virtual void | setCollisionRepresentation (std::shared_ptr< SurgSim::Collision::Representation > representation) override |
Set the collision representation for this physics representation, when the collision object is involved in a collision, the collision should be resolved inside the dynamics calculation. More... | |
![]() | |
Representation (const std::string &name) | |
Constructor. More... | |
virtual | ~Representation () |
Destructor. More... | |
virtual RepresentationType | getType () const =0 |
Query the representation type. More... | |
virtual void | resetParameters () |
Reset the representation parameters to their initial/default values. More... | |
size_t | getNumDof () const |
Query the object number of degrees of freedom. More... | |
void | setIsGravityEnabled (bool isGravityEnabled) |
Set the gravity enable flag. More... | |
bool | isGravityEnabled () const |
Get the gravity enable flag. More... | |
void | setIsDrivingSceneElementPose (bool isDrivingSceneElementPose) |
Set whether this Representation is controlling the pose of the SceneElement that it is part of. More... | |
bool | isDrivingSceneElementPose () |
Query if this Representation is controlling the pose of the SceneElement that it is part of. More... | |
virtual std::shared_ptr< Localization > | createLocalization (const SurgSim::DataStructures::Location &location) |
Computes a localized coordinate w.r.t this representation, given a Location object. More... | |
std::shared_ptr< SurgSim::Collision::Representation > | getCollisionRepresentation () const |
![]() | |
Representation (const std::string &name) | |
Constructor. More... | |
virtual void | setLocalPose (const SurgSim::Math::RigidTransform3d &pose) |
Set the pose of the representation with respect to the Scene Element. More... | |
virtual SurgSim::Math::RigidTransform3d | getLocalPose () const |
Get the pose of the representation with respect to the Scene Element. More... | |
virtual SurgSim::Math::RigidTransform3d | getPose () const |
Get the pose of the representation in world coordinates. More... | |
![]() | |
Component (const std::string &name) | |
Constructor. More... | |
virtual | ~Component () |
Destructor. More... | |
std::string | getName () const |
Gets component name. More... | |
void | setName (const std::string &name) |
Sets the name of component. More... | |
boost::uuids::uuid | getUuid () const |
Gets the id of the component. More... | |
bool | isInitialized () const |
bool | initialize (const std::weak_ptr< Runtime > &runtime) |
Initialize this component, this needs to be called before wakeUp() can be called. More... | |
bool | isAwake () const |
bool | wakeUp () |
Wakeup this component, this will be called when the component is inserted into the ComponentManager that is responsible for handling this component. More... | |
void | setScene (std::weak_ptr< Scene > scene) |
Sets the scene. More... | |
std::shared_ptr< Scene > | getScene () |
Gets the scene. More... | |
void | setSceneElement (std::weak_ptr< SceneElement > sceneElement) |
Sets the scene element. More... | |
std::shared_ptr< SceneElement > | getSceneElement () |
Gets the scene element. More... | |
std::shared_ptr< const SceneElement > | getSceneElement () const |
Gets the scene element, constant version. More... | |
std::shared_ptr< Runtime > | getRuntime () const |
Get the runtime which contains this component. More... | |
virtual std::string | getClassName () const |
The class name for this class, this being the base class it should return SurgSim::Framework::Component but this would make missing implemenentations of this hard to catch, therefore this calls SURGSIM_FAILURE. More... | |
std::shared_ptr< Component > | getSharedPtr () |
Gets a shared pointer to this component. More... | |
bool | isActive () const |
virtual void | setLocalActive (bool val) |
Set the component's active state. More... | |
bool | isLocalActive () const |
![]() | |
Accessible () | |
Default Constructor. More... | |
~Accessible () | |
Destructor. More... | |
template<class T > | |
T | getValue (const std::string &name) const |
Retrieves the value with the name by executing the getter if it is found and tries to convert it to the given type. More... | |
boost::any | getValue (const std::string &name) const |
Retrieves the value with the name by executing the getter if it is found. More... | |
template<class T > | |
bool | getValue (const std::string &name, T *value) const |
Retrieves the value with the name by executing the getter if it is found, and converts it to the type of the output parameter. More... | |
void | setValue (const std::string &name, const boost::any &value) |
Sets a value of a property that has setter. More... | |
bool | isReadable (const std::string &name) const |
Check whether a property is readable. More... | |
bool | isWriteable (const std::string &name) const |
Check whether a property is writable. More... | |
void | setGetter (const std::string &name, GetterType func) |
Sets a getter for a given property. More... | |
void | setSetter (const std::string &name, SetterType func) |
Sets a setter for a given property. More... | |
void | setAccessors (const std::string &name, GetterType getter, SetterType setter) |
Sets the accessors getter and setter in one function. More... | |
void | removeAccessors (const std::string &name) |
Removes all the accessors (getter and setter) for a given property. More... | |
void | forwardProperty (const std::string &name, const Accessible &target, const std::string &targetProperty) |
Adds a property with the given name that uses the targets accessors, in effect forwarding the value to the target. More... | |
void | setSerializable (const std::string &name, EncoderType encoder, DecoderType decoder) |
Sets the functions used to convert data from and to a YAML::Node. More... | |
YAML::Node | encode () const |
Encode this Accessible to a YAML::Node. More... | |
void | decode (const YAML::Node &node, const std::vector< std::string > &ignoredProperties=std::vector< std::string >()) |
Decode this Accessible from a YAML::Node, will throw an exception if the data type cannot be converted. More... | |
template<> | |
boost::any | getValue (const std::string &name) const |
![]() | |
virtual | ~OdeEquation () |
Virtual destructor. More... | |
const std::shared_ptr< OdeState > | getInitialState () const |
Retrieves the ode initial conditions (x0, v0) (i.e. More... | |
Protected Member Functions | |
void | addRayleighDampingForce (SurgSim::Math::Vector *f, const SurgSim::Math::OdeState &state, bool useGlobalMassMatrix=false, bool useGlobalStiffnessMatrix=false, double scale=1.0) |
Adds the Rayleigh damping forces. More... | |
void | addFemElementsForce (SurgSim::Math::Vector *f, const SurgSim::Math::OdeState &state, double scale=1.0) |
Adds the FemElements forces to f (given a state) More... | |
void | addGravityForce (SurgSim::Math::Vector *f, const SurgSim::Math::OdeState &state, double scale=1.0) |
Adds the gravity force to f (given a state) More... | |
virtual bool | doInitialize () override |
Interface to be implemented by derived classes. More... | |
![]() | |
virtual bool | doWakeUp () override |
Interface to be implemented by derived classes. More... | |
virtual void | transformState (std::shared_ptr< SurgSim::Math::OdeState > state, const SurgSim::Math::RigidTransform3d &transform)=0 |
Transform a state using a given transformation. More... | |
![]() | |
void | setNumDof (size_t numDof) |
Set the number of degrees of freedom. More... | |
const SurgSim::Math::Vector3d & | getGravity () const |
Get the gravity used by this Representation. More... | |
void | driveSceneElementPose (const SurgSim::Math::RigidTransform3d &pose) |
This conditionally updates that pose for the scenelement to the given pose The update gets exectuded if the representation actually has sceneelement and isDrivingScenElement() is true. More... | |
![]() | |
virtual std::shared_ptr< PoseComponent > | getPoseComponent () |
Get the PoseComponent for this component. More... | |
virtual std::shared_ptr< const PoseComponent > | getPoseComponent () const |
Get the PoseComponent for this component, constant access. More... | |
Protected Attributes | |
std::vector< double > | m_massPerNode |
Useful information per node. More... | |
std::string | m_filename |
Filename for loading the fem representation. More... | |
![]() | |
std::shared_ptr< SurgSim::Math::OdeState > | m_previousState |
The previous state inside the calculation loop, this has no meaning outside of the loop. More... | |
std::shared_ptr< SurgSim::Math::OdeState > | m_currentState |
The currently calculated state inside the physics loop, after the whole calculation is done this will become m_finalState. More... | |
std::shared_ptr< SurgSim::Math::OdeState > | m_newState |
New state is a temporary variable to store the newly computed state. More... | |
std::shared_ptr< SurgSim::Math::OdeState > | m_finalState |
Last valid state (a.k.a final state) More... | |
SurgSim::Math::Vector | m_f |
Force applied on the deformable representation. More... | |
SurgSim::Math::Matrix | m_M |
Mass matrix. More... | |
SurgSim::Math::Matrix | m_D |
Damping matrix. More... | |
SurgSim::Math::Matrix | m_K |
Stiffness matrix. More... | |
size_t | m_numDofPerNode |
Number of degrees of freedom per node (varies per deformable model) More... | |
SurgSim::Math::IntegrationScheme | m_integrationScheme |
Numerical Integration scheme (dynamic explicit/implicit solver) More... | |
bool | m_needToReloadOdeSolver |
Specify if the Ode Solver needs to be (re)loaded (do not exist yet, or integration scheme has changed) More... | |
std::shared_ptr< SurgSim::Math::OdeSolver > | m_odeSolver |
Ode solver (its type depends on the numerical integration scheme) More... | |
SurgSim::Math::Vector | m_externalGeneralizedForce |
External generalized force, stiffness and damping applied on the deformable representation. More... | |
SurgSim::Math::Matrix | m_externalGeneralizedStiffness |
External generalized force, stiffness and damping applied on the deformable representation. More... | |
SurgSim::Math::Matrix | m_externalGeneralizedDamping |
External generalized force, stiffness and damping applied on the deformable representation. More... | |
![]() | |
std::shared_ptr< SurgSim::Collision::Representation > | m_collisionRepresentation |
This entity's collision representation, these are usually very specific to the physics representation. More... | |
![]() | |
std::shared_ptr< OdeState > | m_initialState |
The initial state (which defines the ODE initial conditions (x0, v0)) More... | |
Private Member Functions | |
virtual std::shared_ptr< FemPlyReaderDelegate > | getDelegate ()=0 |
To be implemented by derived classes. More... | |
Private Attributes | |
std::vector< std::shared_ptr< FemElement > > | m_femElements |
FemElements. More... | |
struct { | |
double massCoefficient | |
double stiffnessCoefficient | |
} | m_rayleighDamping |
Rayleigh damping parameters (massCoefficient and stiffnessCoefficient) D = massCoefficient.M + stiffnessCoefficient.K Matrices: D = damping, M = mass, K = stiffness. More... | |
Additional Inherited Members | |
![]() | |
typedef SurgSim::Framework::ObjectFactory1< SurgSim::Framework::Component, std::string > | FactoryType |
![]() | |
typedef std::function< boost::any(void)> | GetterType |
typedef std::function< void(boost::any)> | SetterType |
typedef std::function< YAML::Node(void)> | EncoderType |
typedef std::function< void(const YAML::Node *)> | DecoderType |
![]() | |
static FactoryType & | getFactory () |
Finite Element Model (a.k.a.
fem) is a deformable model (a set of nodes connected by FemElement).
|
explicit |
Constructor.
name | The name of the FemRepresentation |
|
virtual |
Destructor.
void SurgSim::Physics::FemRepresentation::addFemElement | ( | const std::shared_ptr< FemElement > | element | ) |
Adds a FemElement.
element | The FemElement to add to the representation |
|
protected |
Adds the FemElements forces to f (given a state)
[in,out] | f | The force vector to cumulate the FemElements forces into |
state | The state vector containing positions and velocities | |
scale | A scaling factor to scale the FemElements forces with |
|
protected |
Adds the gravity force to f (given a state)
[in,out] | f | The force vector to cumulate the gravity force into |
state | The state vector containing positions and velocities | |
scale | A scaling factor to scale the gravity force with |
|
protected |
Adds the Rayleigh damping forces.
[in,out] | f | The force vector to cumulate the Rayleigh damping force into |
state | The state vector containing positions and velocities | |
useGlobalMassMatrix,useGlobalStiffnessMatrix | True indicates that the global mass and stiffness matrices should be used (F = -c.M.v - d.K.v) | |
scale | A scaling factor to apply on the damping force |
|
overridevirtual |
Postprocessing done after the update call.
dt | The time step (in seconds) |
Reimplemented from SurgSim::Physics::DeformableRepresentation.
|
overridevirtual |
Preprocessing done before the update call.
dt | The time step (in seconds) |
Reimplemented from SurgSim::Physics::Representation.
|
overridevirtual |
Evaluation of D = -df/dv (x,v) for a given state.
state | (x, v) the current position and velocity to evaluate the Jacobian matrix with |
Implements SurgSim::Math::OdeEquation.
|
overridevirtual |
Evaluation of the RHS function f(x,v) for a given state.
state | (x, v) the current position and velocity to evaluate the function f(x,v) with |
Implements SurgSim::Math::OdeEquation.
|
overridevirtual |
Evaluation of f(x,v), M(x,v), D = -df/dv(x,v), K = -df/dx(x,v) When all the terms are needed, this method can perform optimization in evaluating everything together.
state | (x, v) the current position and velocity to evaluate the various terms with | |
[out] | f | The RHS f(x,v) |
[out] | M | The matrix M(x,v) |
[out] | D | The matrix D = -df/dv(x,v) |
[out] | K | The matrix K = -df/dx(x,v) |
Implements SurgSim::Math::OdeEquation.
|
overridevirtual |
Evaluation of K = -df/dx (x,v) for a given state.
state | (x, v) the current position and velocity to evaluate the Jacobian matrix with |
Implements SurgSim::Math::OdeEquation.
|
overridevirtual |
Evaluation of the LHS matrix M(x,v) for a given state.
state | (x, v) the current position and velocity to evaluate the matrix M(x,v) with |
Implements SurgSim::Math::OdeEquation.
|
overrideprotectedvirtual |
Interface to be implemented by derived classes.
Reimplemented from SurgSim::Framework::Representation.
|
privatepure virtual |
To be implemented by derived classes.
Implemented in SurgSim::Physics::Fem3DRepresentation, SurgSim::Physics::Fem1DRepresentation, and SurgSim::Physics::Fem2DRepresentation.
std::shared_ptr< FemElement > SurgSim::Physics::FemRepresentation::getFemElement | ( | size_t | femElementId | ) |
Retrieves a given FemElement from its id.
femElementId | The FemElement id for which the FemElement is requested |
const std::string & SurgSim::Physics::FemRepresentation::getFilename | ( | ) | const |
Gets the name of the file to be loaded.
size_t SurgSim::Physics::FemRepresentation::getNumFemElements | ( | ) | const |
Gets the number of FemElement.
double SurgSim::Physics::FemRepresentation::getRayleighDampingMass | ( | ) | const |
Gets the Rayleigh mass parameter.
double SurgSim::Physics::FemRepresentation::getRayleighDampingStiffness | ( | ) | const |
Gets the Rayleigh stiffness parameter.
double SurgSim::Physics::FemRepresentation::getTotalMass | ( | ) | const |
Gets the total mass of the fem.
bool SurgSim::Physics::FemRepresentation::isValidCoordinate | ( | const SurgSim::DataStructures::IndexedLocalCoordinate & | coordinate | ) | const |
Determines whether the associated coordinate is valid.
coordinate | Coordinate to check |
bool SurgSim::Physics::FemRepresentation::loadFile | ( | ) |
Loads the file.
void SurgSim::Physics::FemRepresentation::setFilename | ( | const std::string & | filename | ) |
Sets the name of the file to be loaded.
filename | The name of the file to be loaded |
void SurgSim::Physics::FemRepresentation::setRayleighDampingMass | ( | double | massCoef | ) |
Sets the Rayleigh mass parameter.
massCoef | The Rayleigh mass parameter |
void SurgSim::Physics::FemRepresentation::setRayleighDampingStiffness | ( | double | stiffnessCoef | ) |
Sets the Rayleigh stiffness parameter.
stiffnessCoef | The Rayleigh stiffness parameter |
|
private |
FemElements.
|
protected |
Filename for loading the fem representation.
|
protected |
Useful information per node.
struct { ... } SurgSim::Physics::FemRepresentation::m_rayleighDamping |
Rayleigh damping parameters (massCoefficient and stiffnessCoefficient) D = massCoefficient.M + stiffnessCoefficient.K Matrices: D = damping, M = mass, K = stiffness.
double SurgSim::Physics::FemRepresentation::massCoefficient |
double SurgSim::Physics::FemRepresentation::stiffnessCoefficient |