Simbody physics engine. More...
#include <SimbodyPhysics.hh>
Inherits PhysicsEngine.
Public Member Functions | |
SimbodyPhysics (WorldPtr _world) | |
Constructor. More... | |
virtual | ~SimbodyPhysics () |
Destructor. More... | |
virtual CollisionPtr | CreateCollision (const std::string &_type, LinkPtr _body) |
Create a collision. More... | |
CollisionPtr | CreateCollision (const std::string &_shapeType, const std::string &_linkName) |
Create a collision. More... | |
virtual JointPtr | CreateJoint (const std::string &_type, ModelPtr _parent) |
Create a new joint. More... | |
virtual LinkPtr | CreateLink (ModelPtr _parent) |
Create a new body. More... | |
virtual ModelPtr | CreateModel (BasePtr _parent) |
Create a new model. More... | |
virtual ShapePtr | CreateShape (const std::string &_shapeType, CollisionPtr _collision) |
Create a physics::Shape object. More... | |
virtual void | DebugPrint () const |
Debug print out of the physic engine state. More... | |
virtual void | Fini () |
Finilize the physics engine. More... | |
virtual bool | GetAutoDisableFlag () |
: Remove this function, and replace it with a more generic property map More... | |
ContactManager * | GetContactManager () const |
Get a pointer to the contact manger. More... | |
SimTK::MultibodySystem * | GetDynamicsWorld () const |
Register a joint with the dynamics world. More... | |
double | GetMaxStepSize () const |
Get max step size. More... | |
virtual boost::any | GetParam (const std::string &_key) const |
Get an parameter of the physics engine. More... | |
virtual bool | GetParam (const std::string &_key, boost::any &_value) const |
Get a parameter from the physics engine with a boolean to indicate success or failure. More... | |
boost::recursive_mutex * | GetPhysicsUpdateMutex () const |
returns a pointer to the PhysicsEngine::physicsUpdateMutex. More... | |
double | GetRealTimeUpdateRate () const |
Get real time update rate. More... | |
sdf::ElementPtr | GetSDF () const |
Get a pointer to the SDF element for this physics engine. More... | |
double | GetTargetRealTimeFactor () const |
Get target real time factor. More... | |
virtual std::string | GetType () const |
Return the physics engine type (ode|bullet|dart|simbody). More... | |
double | GetUpdatePeriod () |
Get the simulation update period. More... | |
virtual void | Init () |
Initialize the physics engine. More... | |
virtual void | InitForThread () |
Init the engine for threads. More... | |
void | InitModel (const physics::ModelPtr _model) |
Add a Model to the Simbody system. More... | |
virtual void | Load (sdf::ElementPtr _sdf) |
Load the physics engine. More... | |
virtual void | Reset () |
Rest the physics engine. More... | |
virtual void | SetAutoDisableFlag (bool _autoDisable) |
: Remove this function, and replace it with a more generic property map More... | |
virtual void | SetGravity (const ignition::math::Vector3d &_gravity) |
Set the gravity vector. More... | |
virtual void | SetMaxContacts (unsigned int _maxContacts) |
: Remove this function, and replace it with a more generic property map More... | |
void | SetMaxStepSize (double _stepSize) |
Set max step size. More... | |
virtual bool | SetParam (const std::string &_key, const boost::any &_value) |
Set a parameter of the physics engine. More... | |
void | SetRealTimeUpdateRate (double _rate) |
Set real time update rate. More... | |
virtual void | SetSeed (uint32_t _seed) |
Set the random number seed for the physics engine. More... | |
void | SetTargetRealTimeFactor (double _factor) |
Set target real time factor. More... | |
virtual void | UpdateCollision () |
Update the physics engine collision. More... | |
virtual void | UpdatePhysics () |
Update the physics engine. More... | |
WorldPtr | World () const |
Get a pointer to the world. More... | |
Static Public Member Functions | |
template<typename T > | |
static T | any_cast (const boost::any &_value) |
Helper function for performing any_cast operations in SetParam. More... | |
static SimTK::Transform | GetPose (sdf::ElementPtr _element) |
If the given element contains a <pose> element, return it as a Transform. More... | |
static std::string | GetTypeString (unsigned int _type) |
Convert Base::GetType() to string, this is needed by the MultibodyGraphMaker. More... | |
static std::string | GetTypeString (physics::Base::EntityType _type) |
Convert Base::GetType() to string, this is needed by the MultibodyGraphMaker. More... | |
static SimTK::Transform | Pose2Transform (const ignition::math::Pose3d &_pose) |
Convert the given pose in x,y,z,thetax,thetay,thetaz format to a Simbody Transform. More... | |
static SimTK::Quaternion | QuadToQuad (const ignition::math::Quaterniond &_q) |
Convert ignition::math::Quaterniond to SimTK::Quaternion. More... | |
static ignition::math::Quaterniond | QuadToQuadIgn (const SimTK::Quaternion &_q) |
Convert SimTK::Quaternion to ignition::math::Quaterniond. More... | |
static ignition::math::Pose3d | Transform2PoseIgn (const SimTK::Transform &_xAB) |
Convert a Simbody transform to a pose in x,y,z, thetax,thetay,thetaz format. More... | |
static ignition::math::Vector3d | Vec3ToVector3Ign (const SimTK::Vec3 &_v) |
Convert SimTK::Vec3 to ignition::math::Vector3d. More... | |
static SimTK::Vec3 | Vector3ToVec3 (const ignition::math::Vector3d &_v) |
Convert ignition::math::Vector3d to SimTK::Vec3. More... | |
Public Attributes | |
SimTK::CompliantContactSubsystem | contact |
SimTK::Force::DiscreteForces | discreteForces |
SimTK::GeneralForceSubsystem | forces |
SimTK::Force::Gravity | gravity |
SimTK::Integrator * | integ |
SimTK::SimbodyMatterSubsystem | matter |
bool | simbodyPhysicsInitialized |
true if initialized More... | |
bool | simbodyPhysicsStepped |
SimTK::MultibodySystem | system |
SimTK::ContactTrackerSubsystem | tracker |
Protected Member Functions | |
virtual void | OnPhysicsMsg (ConstPhysicsPtr &_msg) |
virtual callback for gztopic "~/physics". More... | |
virtual void | OnRequest (ConstRequestPtr &_msg) |
virtual callback for gztopic "~/request". More... | |
Protected Attributes | |
ContactManager * | contactManager |
Class that handles all contacts generated by the physics engine. More... | |
double | maxStepSize |
Real time update rate. More... | |
transport::NodePtr | node |
Node for communication. More... | |
ignition::transport::Node | nodeIgn |
Ignition node for communication. More... | |
transport::SubscriberPtr | physicsSub |
Subscribe to the physics topic. More... | |
boost::recursive_mutex * | physicsUpdateMutex |
Mutex to protect the update cycle. More... | |
double | realTimeUpdateRate |
Real time update rate. More... | |
transport::SubscriberPtr | requestSub |
Subscribe to the request topic. More... | |
transport::PublisherPtr | responsePub |
Response publisher. More... | |
ignition::transport::Node::Publisher | responsePubIgn |
Response publisher. More... | |
sdf::ElementPtr | sdf |
Our SDF values. More... | |
double | targetRealTimeFactor |
Target real time factor. More... | |
WorldPtr | world |
Pointer to the world. More... | |
Simbody physics engine.
|
explicit |
Constructor.
|
virtual |
Destructor.
|
inlinestaticinherited |
Helper function for performing any_cast operations in SetParam.
This is useful because the PresetManager stores the output of sdf::Element::GetAny as boost::any values in its parameterMap and calls SetParam with these values. Prior to libsdformat8, the GetAny function returned boost::any, but it now returns std::any. This helper is used in SetParam to first check if a boost::any value contains a std::any, and if so, perform a std::any_cast<T>. Otherwise, it returns boost::any_cast<T>.
[in] | _value | Value to cast to type T. |
References PhysicsEngine::OnPhysicsMsg(), and PhysicsEngine::OnRequest().
|
virtual |
Create a collision.
[in] | _shapeType | Type of collision to create. |
[in] | _link | Parent link. |
Implements PhysicsEngine.
|
inherited |
Create a collision.
[in] | _shapeType | Type of collision to create. |
[in] | _linkName | Name of the parent link. |
Create a new joint.
[in] | _type | Type of joint to create. |
[in] | _parent | Model parent. |
Implements PhysicsEngine.
Create a new model.
[in] | _base | Boost shared pointer to a new model. |
Reimplemented from PhysicsEngine.
|
virtual |
Create a physics::Shape object.
[in] | _shapeType | Type of shape to create. |
[in] | _collision | Collision parent. |
Implements PhysicsEngine.
|
virtual |
Debug print out of the physic engine state.
Implements PhysicsEngine.
|
virtual |
Finilize the physics engine.
Reimplemented from PhysicsEngine.
|
inlinevirtualinherited |
: Remove this function, and replace it with a more generic property map
access functions to set ODE parameters..
References PhysicsEngine::DebugPrint(), PhysicsEngine::GetContactManager(), PhysicsEngine::GetParam(), PhysicsEngine::SetParam(), and PhysicsEngine::World().
|
inherited |
Get a pointer to the contact manger.
Referenced by PhysicsEngine::GetAutoDisableFlag().
SimTK::MultibodySystem* GetDynamicsWorld | ( | ) | const |
Register a joint with the dynamics world.
|
inherited |
|
virtual |
Get an parameter of the physics engine.
[in] | _attr | String key |
Reimplemented from PhysicsEngine.
|
virtual |
Get a parameter from the physics engine with a boolean to indicate success or failure.
[in] | _key | Key of the accessed param |
[out] | _value | Value of the accessed param |
Reimplemented from PhysicsEngine.
|
inlineinherited |
returns a pointer to the PhysicsEngine::physicsUpdateMutex.
References PhysicsEngine::GetSDF(), and PhysicsEngine::physicsUpdateMutex.
|
static |
If the given element contains a <pose> element, return it as a Transform.
Otherwise return the identity Transform. If there is more than one <pose> element, only the first one is processed.
|
inherited |
|
inherited |
Get a pointer to the SDF element for this physics engine.
Referenced by PhysicsEngine::GetPhysicsUpdateMutex().
|
inherited |
|
virtual |
Return the physics engine type (ode|bullet|dart|simbody).
Implements PhysicsEngine.
|
static |
Convert Base::GetType() to string, this is needed by the MultibodyGraphMaker.
[in] | _type | Joint type returned by Joint::GetType(). |
|
static |
Convert Base::GetType() to string, this is needed by the MultibodyGraphMaker.
[in] | _type | Joint type returned by Joint::GetType(). |
|
inherited |
Get the simulation update period.
Referenced by PhysicsEngine::Reset().
|
virtual |
Initialize the physics engine.
Implements PhysicsEngine.
|
virtual |
Init the engine for threads.
Implements PhysicsEngine.
void InitModel | ( | const physics::ModelPtr | _model | ) |
Add a Model to the Simbody system.
[in] | _model | Pointer to the model to add into Simbody. |
|
virtual |
Load the physics engine.
[in] | _sdf | Pointer to the SDF parameters. |
Reimplemented from PhysicsEngine.
|
protectedvirtual |
virtual callback for gztopic "~/physics".
[in] | _msg | Physics message. |
Reimplemented from PhysicsEngine.
|
protectedvirtual |
virtual callback for gztopic "~/request".
[in] | _msg | Request message. |
Reimplemented from PhysicsEngine.
|
static |
Convert the given pose in x,y,z,thetax,thetay,thetaz format to a Simbody Transform.
The rotation angles are interpreted as a body-fixed sequence, meaning we rotation about x, then about the new y, then about the now twice-rotated z.
[in] | _pose | Ignition math Pose3d object |
|
static |
Convert ignition::math::Quaterniond to SimTK::Quaternion.
[in] | _q | Ignition::math::Quaterniond object |
|
static |
Convert SimTK::Quaternion to ignition::math::Quaterniond.
[in] | _q | Simbody's SimTK::Quaternion object |
|
virtual |
Rest the physics engine.
Reimplemented from PhysicsEngine.
|
virtualinherited |
: Remove this function, and replace it with a more generic property map
Access functions to set ODE parameters.
[in] | _autoDisable | True to enable auto disabling of bodies. |
Referenced by PhysicsEngine::UpdatePhysics().
|
virtual |
|
virtualinherited |
: Remove this function, and replace it with a more generic property map
access functions to set ODE parameters
[in] | _maxContacts | Maximum number of contacts. |
Reimplemented in ODEPhysics.
Referenced by PhysicsEngine::UpdatePhysics().
|
inherited |
|
virtual |
Set a parameter of the physics engine.
See SetParam documentation for descriptions of duplicate parameters.
[in] | _key | String key Below is a list of _key parameter definitions:
|
[in] | _value | The value to set to |
Reimplemented from PhysicsEngine.
|
inherited |
|
virtual |
Set the random number seed for the physics engine.
[in] | _seed | The random number seed. |
Implements PhysicsEngine.
|
inherited |
Set target real time factor.
[in] | _factor | Target real time factor |
Referenced by PhysicsEngine::Reset().
|
static |
Convert a Simbody transform to a pose in x,y,z, thetax,thetay,thetaz format.
[in] | _xAB | Simbody's SimTK::Transform object |
|
virtual |
Update the physics engine collision.
This function works in tandem with PhysicsEngine::UpdatePhysics() to update the world. This function will be called even if the physics is disabled (when World::PhysicsEnabled()) returns false). Which updates are done in which of the two functions PhysicsEngine::UpdateCollision() and PhysicsEngine::UpdatePhysics() is to some extent left to the implementing physics engine. The intention is that PhysicsEngine::UpdateCollision() will update the collision states of the world, including contact information, and PhysicsEngine::UpdatePhysics() will update the dynamics of the world, i.e. advance the world and react to the collision state. However for some physics engines, both is done in one step, or providing the contact information separately in UpdateCollision() would mean double work, as it can't be avoided to be done again in PhysicsEngine::UpdatePhysics() - in this case it is better that PhysicsEngine::UpdateCollision does not actually update collision and contact information, and instead leaves it to UpdatePhysics(). There should be one exception however when it still does make this update: If World::PhysicsEnabled() returns false, and therefore PhysicsEngine::UpdatePhysics() will not be called in the update step, then PhysicsEngine::UpdateCollision will need to ensure that collision and contact information will still be updated.
Implements PhysicsEngine.
|
virtual |
Update the physics engine.
Will only be called if the physics are enabled, which is the case when World::PhysicsEnabled() returns true.
Reimplemented from PhysicsEngine.
|
static |
Convert SimTK::Vec3 to ignition::math::Vector3d.
[in] | _v | Simbody's SimTK::Vec3 object |
|
static |
Convert ignition::math::Vector3d to SimTK::Vec3.
[in] | _v | Ignition math Vector3d object |
Get a pointer to the world.
Referenced by PhysicsEngine::GetAutoDisableFlag().
SimTK::CompliantContactSubsystem contact |
|
protectedinherited |
Class that handles all contacts generated by the physics engine.
SimTK::Force::DiscreteForces discreteForces |
SimTK::GeneralForceSubsystem forces |
SimTK::Force::Gravity gravity |
SimTK:: Integrator* integ |
SimTK::SimbodyMatterSubsystem matter |
|
protectedinherited |
Real time update rate.
|
protectedinherited |
Node for communication.
|
protectedinherited |
Ignition node for communication.
|
protectedinherited |
Subscribe to the physics topic.
|
protectedinherited |
Mutex to protect the update cycle.
Referenced by PhysicsEngine::GetPhysicsUpdateMutex().
|
protectedinherited |
Real time update rate.
|
protectedinherited |
Subscribe to the request topic.
|
protectedinherited |
Response publisher.
|
protectedinherited |
Response publisher.
|
protectedinherited |
Our SDF values.
bool simbodyPhysicsInitialized |
true if initialized
bool simbodyPhysicsStepped |
SimTK::MultibodySystem system |
|
protectedinherited |
Target real time factor.
SimTK::ContactTrackerSubsystem tracker |
|
protectedinherited |
Pointer to the world.