18#ifndef GAZEBO_PHYSICS_SIMBODY_SIMBODYPHYSICS_HH
19#define GAZEBO_PHYSICS_SIMBODY_SIMBODYPHYSICS_HH
22#include <boost/thread/thread.hpp>
23#include <boost/thread/mutex.hpp>
51 public:
virtual void Load(sdf::ElementPtr _sdf);
54 public:
virtual void Init();
73 public:
virtual void Fini();
76 public:
virtual std::string
GetType()
const;
97 public:
virtual void SetGravity(
const ignition::math::Vector3d &_gravity);
112 const ignition::math::Quaterniond &_q);
118 const SimTK::Quaternion &_q);
124 const ignition::math::Vector3d &_v);
130 const SimTK::Vec3 &_v);
139 const ignition::math::Pose3d &_pose);
146 const SimTK::Transform &_xAB);
151 public:
static SimTK::Transform
GetPose(sdf::ElementPtr _element);
166 protected:
virtual void OnRequest(ConstRequestPtr &_msg);
179 private:
void CreateMultibodyGraph(
192 private:
void InitSimbodySystem();
196 private:
void AddStaticModelToSimbodySystem(
202 private:
void AddDynamicModelToSimbodySystem(
203 const SimTK::MultibodyGraphMaker &_mbgraph,
208 SimTK::MobilizedBody &_mobod, SimTK::ContactCliqueId _modelClique);
211 public: SimTK::SimbodyMatterSubsystem
matter;
212 public: SimTK::GeneralForceSubsystem
forces;
215 public: SimTK::ContactTrackerSubsystem
tracker;
216 public: SimTK::CompliantContactSubsystem
contact;
225 public:
virtual boost::any
GetParam(
const std::string &_key)
const;
228 public:
virtual bool GetParam(
const std::string &_key,
229 boost::any &_value)
const;
232 public:
virtual bool SetParam(
const std::string &_key,
233 const boost::any &_value);
236 private:
double contactMaterialStiffness;
239 private:
double contactMaterialDissipation;
243 private:
double contactMaterialPlasticCoefRestitution;
247 private:
double contactMaterialPlasticImpactVelocity;
251 private:
double contactMaterialStaticFriction;
255 private:
double contactMaterialDynamicFriction;
259 private:
double contactMaterialViscousFriction;
263 private:
double contactImpactCaptureVelocity;
267 private:
double contactStictionTransitionVelocity;
269 private: SimTK::MultibodySystem *dynamicsWorld;
273 private:
double stepTimeDouble;
277 private: std::string solverType;
284 private: std::string integratorType;
Simbody wrapper forward declarations and typedefs.
A Time class, can be used to hold wall- or sim-time.
Definition Time.hh:48
EntityType
Unique identifiers for all entity types.
Definition Base.hh:75
Base class for a physics engine.
Definition PhysicsEngine.hh:42
Simbody Link class.
Definition SimbodyLink.hh:39
Simbody physics engine.
Definition SimbodyPhysics.hh:43
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.
static ignition::math::Vector3d Vec3ToVector3Ign(const SimTK::Vec3 &_v)
Convert SimTK::Vec3 to ignition::math::Vector3d.
virtual LinkPtr CreateLink(ModelPtr _parent)
Create a new body.
SimbodyPhysics(WorldPtr _world)
Constructor.
SimTK::ContactTrackerSubsystem tracker
Definition SimbodyPhysics.hh:215
SimTK::MultibodySystem system
Definition SimbodyPhysics.hh:210
SimTK::Force::Gravity gravity
Definition SimbodyPhysics.hh:213
SimTK::SimbodyMatterSubsystem matter
Definition SimbodyPhysics.hh:211
SimTK::GeneralForceSubsystem forces
Definition SimbodyPhysics.hh:212
static SimTK::Quaternion QuadToQuad(const ignition::math::Quaterniond &_q)
Convert ignition::math::Quaterniond to SimTK::Quaternion.
virtual void Fini()
Finilize the physics engine.
static ignition::math::Pose3d Transform2PoseIgn(const SimTK::Transform &_xAB)
Convert a Simbody transform to a pose in x,y,z, thetax,thetay,thetaz format.
virtual void Init()
Initialize the physics engine.
static std::string GetTypeString(physics::Base::EntityType _type)
Convert Base::GetType() to string, this is needed by the MultibodyGraphMaker.
SimTK::Integrator * integ
Definition SimbodyPhysics.hh:217
virtual void Reset()
Rest the physics engine.
virtual void UpdateCollision()
Update the physics engine collision.
virtual void UpdatePhysics()
Update the physics engine.
static ignition::math::Quaterniond QuadToQuadIgn(const SimTK::Quaternion &_q)
Convert SimTK::Quaternion to ignition::math::Quaterniond.
void InitModel(const physics::ModelPtr _model)
Add a Model to the Simbody system.
virtual void OnRequest(ConstRequestPtr &_msg)
virtual callback for gztopic "~/request".
SimTK::Force::DiscreteForces discreteForces
Definition SimbodyPhysics.hh:214
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.
virtual ShapePtr CreateShape(const std::string &_shapeType, CollisionPtr _collision)
Create a physics::Shape object.
virtual void InitForThread()
Init the engine for threads.
static SimTK::Vec3 Vector3ToVec3(const ignition::math::Vector3d &_v)
Convert ignition::math::Vector3d to SimTK::Vec3.
virtual std::string GetType() const
Return the physics engine type (ode|bullet|dart|simbody).
virtual void OnPhysicsMsg(ConstPhysicsPtr &_msg)
virtual callback for gztopic "~/physics".
virtual boost::any GetParam(const std::string &_key) const
Get an parameter of the physics engine.
virtual void SetGravity(const ignition::math::Vector3d &_gravity)
Set the gravity vector.
virtual CollisionPtr CreateCollision(const std::string &_type, LinkPtr _body)
Create a collision.
SimTK::MultibodySystem * GetDynamicsWorld() const
Register a joint with the dynamics world.
virtual void DebugPrint() const
Debug print out of the physic engine state.
virtual void Load(sdf::ElementPtr _sdf)
Load the physics engine.
static SimTK::Transform GetPose(sdf::ElementPtr _element)
If the given element contains a <pose> element, return it as a Transform.
virtual bool SetParam(const std::string &_key, const boost::any &_value)
Set a parameter of the physics engine.
virtual void SetSeed(uint32_t _seed)
Set the random number seed for the physics engine.
SimTK::CompliantContactSubsystem contact
Definition SimbodyPhysics.hh:216
static std::string GetTypeString(unsigned int _type)
Convert Base::GetType() to string, this is needed by the MultibodyGraphMaker.
bool simbodyPhysicsStepped
Definition SimbodyPhysics.hh:222
virtual ~SimbodyPhysics()
Destructor.
virtual JointPtr CreateJoint(const std::string &_type, ModelPtr _parent)
Create a new joint.
bool simbodyPhysicsInitialized
true if initialized
Definition SimbodyPhysics.hh:220
virtual ModelPtr CreateModel(BasePtr _parent)
Create a new model.
boost::shared_ptr< Link > LinkPtr
Definition PhysicsTypes.hh:109
boost::shared_ptr< Collision > CollisionPtr
Definition PhysicsTypes.hh:113
boost::shared_ptr< Base > BasePtr
Definition PhysicsTypes.hh:77
boost::shared_ptr< Shape > ShapePtr
Definition PhysicsTypes.hh:141
boost::shared_ptr< World > WorldPtr
Definition PhysicsTypes.hh:89
boost::shared_ptr< Model > ModelPtr
Definition PhysicsTypes.hh:93
boost::shared_ptr< Joint > JointPtr
Definition PhysicsTypes.hh:117
Forward declarations for the common classes.
Definition Animation.hh:27