SimbodyPhysics.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012-2016 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 
18 #ifndef _SIMBODY_PHYSICS_HH
19 #define _SIMBODY_PHYSICS_HH
20 #include <string>
21 
22 #include <boost/thread/thread.hpp>
23 #include <boost/thread/mutex.hpp>
24 
27 #include "gazebo/physics/Shape.hh"
29 
31 #include "gazebo/util/system.hh"
32 
33 namespace gazebo
34 {
35  namespace physics
36  {
40 
42  class GZ_PHYSICS_VISIBLE SimbodyPhysics : public PhysicsEngine
43  {
45  public: SimbodyPhysics(WorldPtr _world);
46 
48  public: virtual ~SimbodyPhysics();
49 
50  // Documentation inherited
51  public: virtual void Load(sdf::ElementPtr _sdf);
52 
53  // Documentation inherited
54  public: virtual void Init();
55 
56  // Documentation inherited
57  public: virtual void Reset();
58 
61  public: void InitModel(const physics::ModelPtr _model);
62 
63  // Documentation inherited
64  public: virtual void InitForThread();
65 
66  // Documentation inherited
67  public: virtual void UpdateCollision();
68 
69  // Documentation inherited
70  public: virtual void UpdatePhysics();
71 
72  // Documentation inherited
73  public: virtual void Fini();
74 
75  // Documentation inherited
76  public: virtual std::string GetType() const;
77 
78  // Documentation inherited
79  public: virtual LinkPtr CreateLink(ModelPtr _parent);
80 
81  // Documentation inherited
82  public: virtual CollisionPtr CreateCollision(const std::string &_type,
83  LinkPtr _body);
84 
85  // Documentation inherited
86  public: virtual JointPtr CreateJoint(const std::string &_type,
87  ModelPtr _parent);
88 
89  // Documentation inherited
90  public: virtual ShapePtr CreateShape(const std::string &_shapeType,
91  CollisionPtr _collision);
92 
94  public: SimTK::MultibodySystem *GetDynamicsWorld() const;
95 
96  // Documentation inherited
97  public: virtual void SetGravity(const gazebo::math::Vector3 &_gravity);
98 
99  // Documentation inherited
100  public: virtual void DebugPrint() const;
101 
102  // Documentation inherited
103  public: virtual void SetSeed(uint32_t _seed);
104 
105  // Documentation inherited
106  public: virtual ModelPtr CreateModel(BasePtr _parent);
107 
111  public: static SimTK::Quaternion QuadToQuad(const math::Quaternion &_q);
112 
116  public: static math::Quaternion QuadToQuad(const SimTK::Quaternion &_q);
117 
121  public: static SimTK::Vec3 Vector3ToVec3(const math::Vector3 &_v);
122 
126  public: static math::Vector3 Vec3ToVector3(const SimTK::Vec3 &_v);
127 
134  public: static SimTK::Transform Pose2Transform(const math::Pose &_pose);
135 
140  public: static math::Pose Transform2Pose(const SimTK::Transform &_xAB);
141 
145  public: static SimTK::Transform GetPose(sdf::ElementPtr _element);
146 
151  public: static std::string GetTypeString(unsigned int _type);
152 
157  public: static std::string GetTypeString(physics::Base::EntityType _type);
158 
159  // Documentation inherited
160  protected: virtual void OnRequest(ConstRequestPtr &_msg);
161 
162  // Documentation inherited
163  protected: virtual void OnPhysicsMsg(ConstPhysicsPtr &_msg);
164 
173  private: void CreateMultibodyGraph(
174  SimTK::MultibodyGraphMaker& _mbgraph, const physics::ModelPtr _model);
175 
186  private: void InitSimbodySystem();
187 
190  private: void AddStaticModelToSimbodySystem(
191  const physics::ModelPtr _model);
192 
196  private: void AddDynamicModelToSimbodySystem(
197  const SimTK::MultibodyGraphMaker &_mbgraph,
198  const physics::ModelPtr _model);
199 
201  private: void AddCollisionsToLink(const physics::SimbodyLink *_link,
202  SimTK::MobilizedBody &_mobod, SimTK::ContactCliqueId _modelClique);
203 
204  public: SimTK::MultibodySystem system;
205  public: SimTK::SimbodyMatterSubsystem matter;
206  public: SimTK::GeneralForceSubsystem forces;
207  public: SimTK::Force::Gravity gravity;
208  public: SimTK::Force::DiscreteForces discreteForces;
209  public: SimTK::ContactTrackerSubsystem tracker;
210  public: SimTK::CompliantContactSubsystem contact;
211  public: SimTK:: Integrator *integ;
212 
215 
216  public: bool simbodyPhysicsStepped;
217 
218  // Documentation inherited
219  public: virtual boost::any GetParam(const std::string &_key) const;
220 
221  // Documentation inherited
222  public: virtual bool GetParam(const std::string &_key,
223  boost::any &_value) const;
224 
225  // Documentation inherited
226  public: virtual bool SetParam(const std::string &_key,
227  const boost::any &_value);
228 
230  private: double contactMaterialStiffness;
231 
233  private: double contactMaterialDissipation;
234 
237  private: double contactMaterialPlasticCoefRestitution;
238 
241  private: double contactMaterialPlasticImpactVelocity;
242 
245  private: double contactMaterialStaticFriction;
246 
249  private: double contactMaterialDynamicFriction;
250 
253  private: double contactMaterialViscousFriction;
254 
257  private: double contactImpactCaptureVelocity;
258 
261  private: double contactStictionTransitionVelocity;
262 
263  private: SimTK::MultibodySystem *dynamicsWorld;
264 
265  private: common::Time lastUpdateTime;
266 
267  private: double stepTimeDouble;
268 
271  private: std::string solverType;
272 
278  private: std::string integratorType;
279  };
281  }
282 }
283 #endif
SimTK::Integrator * integ
Definition: SimbodyPhysics.hh:211
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:109
boost::shared_ptr< World > WorldPtr
Definition: PhysicsTypes.hh:89
SimTK::Force::DiscreteForces discreteForces
Definition: SimbodyPhysics.hh:208
Encapsulates a position and rotation in three space.
Definition: Pose.hh:37
SimTK::SimbodyMatterSubsystem matter
Definition: SimbodyPhysics.hh:205
The Vector3 class represents the generic vector containing 3 elements.
Definition: Vector3.hh:39
Base class for a physics engine.
Definition: PhysicsEngine.hh:40
bool simbodyPhysicsStepped
Definition: SimbodyPhysics.hh:216
boost::shared_ptr< Joint > JointPtr
Definition: PhysicsTypes.hh:117
Simbody physics engine.
Definition: SimbodyPhysics.hh:42
A quaternion class.
Definition: Quaternion.hh:42
SimTK::CompliantContactSubsystem contact
Definition: SimbodyPhysics.hh:210
SimTK::MultibodySystem system
Definition: SimbodyPhysics.hh:204
Simbody wrapper forward declarations and typedefs.
SimTK::Force::Gravity gravity
Definition: SimbodyPhysics.hh:207
boost::shared_ptr< Shape > ShapePtr
Definition: PhysicsTypes.hh:141
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:93
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
EntityType
Unique identifiers for all entity types.
Definition: Base.hh:81
SimTK::GeneralForceSubsystem forces
Definition: SimbodyPhysics.hh:206
bool simbodyPhysicsInitialized
true if initialized
Definition: SimbodyPhysics.hh:214
boost::shared_ptr< Collision > CollisionPtr
Definition: PhysicsTypes.hh:113
SimTK::ContactTrackerSubsystem tracker
Definition: SimbodyPhysics.hh:209
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:77
A Time class, can be used to hold wall- or sim-time.
Definition: Time.hh:44