18 #ifndef _SIMBODY_PHYSICS_HH
19 #define _SIMBODY_PHYSICS_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();
57 public:
virtual void Reset();
64 public:
virtual void InitForThread();
67 public:
virtual void UpdateCollision();
70 public:
virtual void UpdatePhysics();
73 public:
virtual void Fini();
76 public:
virtual std::string GetType()
const;
82 public:
virtual CollisionPtr CreateCollision(
const std::string &_type,
86 public:
virtual JointPtr CreateJoint(
const std::string &_type,
90 public:
virtual ShapePtr CreateShape(
const std::string &_shapeType,
94 public: SimTK::MultibodySystem *GetDynamicsWorld()
const;
100 public:
virtual void DebugPrint()
const;
103 public:
virtual void SetSeed(uint32_t _seed);
121 public:
static SimTK::Vec3 Vector3ToVec3(
const math::Vector3 &_v);
126 public:
static math::Vector3 Vec3ToVector3(
const SimTK::Vec3 &_v);
134 public:
static SimTK::Transform Pose2Transform(
const math::Pose &_pose);
140 public:
static math::Pose Transform2Pose(
const SimTK::Transform &_xAB);
145 public:
static SimTK::Transform GetPose(sdf::ElementPtr _element);
151 public:
static std::string GetTypeString(
unsigned int _type);
160 protected:
virtual void OnRequest(ConstRequestPtr &_msg);
163 protected:
virtual void OnPhysicsMsg(ConstPhysicsPtr &_msg);
173 private:
void CreateMultibodyGraph(
186 private:
void InitSimbodySystem();
190 private:
void AddStaticModelToSimbodySystem(
196 private:
void AddDynamicModelToSimbodySystem(
197 const SimTK::MultibodyGraphMaker &_mbgraph,
202 SimTK::MobilizedBody &_mobod, SimTK::ContactCliqueId _modelClique);
205 public: SimTK::SimbodyMatterSubsystem
matter;
206 public: SimTK::GeneralForceSubsystem
forces;
209 public: SimTK::ContactTrackerSubsystem
tracker;
210 public: SimTK::CompliantContactSubsystem
contact;
219 public:
virtual boost::any GetParam(
const std::string &_key)
const;
222 public:
virtual bool SetParam(
const std::string &_key,
223 const boost::any &_value);
226 private:
double contactMaterialStiffness;
229 private:
double contactMaterialDissipation;
233 private:
double contactMaterialPlasticCoefRestitution;
237 private:
double contactMaterialPlasticImpactVelocity;
241 private:
double contactMaterialStaticFriction;
245 private:
double contactMaterialDynamicFriction;
249 private:
double contactMaterialViscousFriction;
253 private:
double contactImpactCaptureVelocity;
257 private:
double contactStictionTransitionVelocity;
259 private: SimTK::MultibodySystem *dynamicsWorld;
263 private:
double stepTimeDouble;
267 private: std::string solverType;
274 private: std::string integratorType;