ODEPhysics.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 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 #ifndef _ODEPHYSICS_HH_
18 #define _ODEPHYSICS_HH_
19 
20 #ifndef Q_MOC_RUN
21 #include <tbb/spin_mutex.h>
22 #include <tbb/concurrent_vector.h>
23 #endif
24 #include <string>
25 #include <utility>
26 
27 #include <boost/thread/thread.hpp>
28 
33 #include "gazebo/physics/Shape.hh"
34 #include "gazebo/gazebo_config.h"
35 #include "gazebo/util/system.hh"
36 
37 namespace gazebo
38 {
39  namespace physics
40  {
41  class ODEJointFeedback;
42  class ODEPhysicsPrivate;
43 
48 
50  class GZ_PHYSICS_VISIBLE ODEPhysics : public PhysicsEngine
51  {
54  public: enum ODEParam
55  {
58 
61 
64 
67 
70 
72  SOR,
73 
76 
79 
82 
85 
89 
92 
94  WORLD_SOLVER_TYPE
95  };
96 
99  public: explicit ODEPhysics(WorldPtr _world);
100 
102  public: virtual ~ODEPhysics();
103 
104  // Documentation inherited
105  public: virtual void Load(sdf::ElementPtr _sdf);
106 
107  // Documentation inherited
108  public: virtual void Init();
109 
110  // Documentation inherited
111  public: virtual void Reset();
112 
113  // Documentation inherited
114  public: virtual void InitForThread();
115 
116  // Documentation inherited
117  public: virtual void UpdateCollision();
118 
119  // Documentation inherited
120  public: virtual void UpdatePhysics();
121 
122  // Documentation inherited
123  public: virtual void Fini();
124 
125  // Documentation inherited
126  public: virtual std::string GetType() const
127  { return "ode"; }
128 
129  // Documentation inherited
130  public: virtual LinkPtr CreateLink(ModelPtr _parent);
131 
132  // Documentation inherited
133  public: virtual CollisionPtr CreateCollision(
134  const std::string &_shapeType, LinkPtr _parent);
135 
136  // Documentation inherited
137  public: virtual ShapePtr CreateShape(const std::string &_shapeType,
138  CollisionPtr _collision);
139 
140  // Documentation inherited
141  public: virtual JointPtr CreateJoint(const std::string &_type,
142  ModelPtr _parent);
143 
144  // Documentation inherited
145  public: virtual void SetGravity(const ignition::math::Vector3d &_gravity);
146 
147  // Documentation inherited
148  public: virtual void SetWorldCFM(double cfm);
149 
150  // Documentation inherited
151  public: virtual void SetWorldERP(double erp);
152 
153  // Documentation inherited
154  public: virtual void SetSORPGSPreconIters(unsigned int iters);
155 
156  // Documentation inherited
157  public: virtual void SetSORPGSIters(unsigned int iters);
158 
159  // Documentation inherited
160  public: virtual void SetSORPGSW(double w);
161 
162  // Documentation inherited
163  public: virtual void SetContactMaxCorrectingVel(double vel);
164 
165  // Documentation inherited
166  public: virtual void SetContactSurfaceLayer(double layer_depth);
167 
170  public: virtual void SetFrictionModel(const std::string &_fricModel);
171 
174  public: virtual void
175  SetWorldStepSolverType(const std::string &_worldSolverType);
176 
177  // Documentation inherited
178  public: virtual void SetMaxContacts(unsigned int max_contacts);
179 
180  // Documentation inherited
181  public: virtual double GetWorldCFM();
182 
183  // Documentation inherited
184  public: virtual double GetWorldERP();
185 
186  // Documentation inherited
187  public: virtual int GetSORPGSPreconIters();
188 
189  // Documentation inherited
190  public: virtual int GetSORPGSIters();
191 
192  // Documentation inherited
193  public: virtual double GetSORPGSW();
194 
195  // Documentation inherited
196  public: virtual double GetContactMaxCorrectingVel();
197 
200  public: virtual std::string GetFrictionModel() const;
201 
204  public: virtual std::string GetWorldStepSolverType() const;
205 
206  // Documentation inherited
207  public: virtual double GetContactSurfaceLayer();
208 
209  // Documentation inherited
210  public: virtual unsigned int GetMaxContacts();
211 
212  // Documentation inherited
213  public: virtual void DebugPrint() const;
214 
215  // Documentation inherited
216  public: virtual void SetSeed(uint32_t _seed);
217 
219  public: virtual bool SetParam(const std::string &_key,
220  const boost::any &_value);
221 
223  public: virtual boost::any GetParam(const std::string &_key) const;
224 
226  public: virtual bool GetParam(const std::string &_key,
227  boost::any &_value) const;
228 
231  public: dSpaceID GetSpaceId() const;
232 
235  public: dWorldID GetWorldId();
236 
240  public: static void ConvertMass(InertialPtr _interial, void *_odeMass);
241 
246  public: static void ConvertMass(void *_odeMass, InertialPtr _inertial);
247 
252  public: static Friction_Model
253  ConvertFrictionModel(const std::string &_fricModel);
254 
259  public: static std::string
260  ConvertFrictionModel(const Friction_Model _fricModel);
261 
266  public: static std::string
267  ConvertWorldStepSolverType(const World_Solver_Type _solverType);
268 
273  public: static World_Solver_Type
274  ConvertWorldStepSolverType(const std::string &_solverType);
275 
278  public: virtual std::string GetStepType() const;
279 
282  public: virtual void SetStepType(const std::string &_type);
283 
284 
289  public: void Collide(ODECollision *_collision1, ODECollision *_collision2,
290  dContactGeom *_contactCollisions);
291 
294  public: void ProcessJointFeedback(ODEJointFeedback *_feedback);
295 
296  protected: virtual void OnRequest(ConstRequestPtr &_msg);
297 
298  protected: virtual void OnPhysicsMsg(ConstPhysicsPtr &_msg);
299 
304  private: static void CollisionCallback(void *_data, dGeomID _o1,
305  dGeomID _o2);
306 
307 
311  private: void AddTrimeshCollider(ODECollision *_collision1,
312  ODECollision *_collision2);
313 
317  private: void AddCollider(ODECollision *_collision1,
318  ODECollision *_collision2);
319 
322  private: ODEPhysicsPrivate *dataPtr;
323  };
325  }
326 }
327 #endif
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:109
boost::shared_ptr< World > WorldPtr
Definition: PhysicsTypes.hh:89
Constraint force mixing.
Definition: ODEPhysics.hh:60
Forward declarations for the common classes.
Definition: Animation.hh:26
Minimum step size.
Definition: ODEPhysics.hh:84
Base class for all ODE collisions.
Definition: ODECollision.hh:40
Base class for a physics engine.
Definition: PhysicsEngine.hh:41
Limit ratios of inertias of adjacent links (note that the corresponding SDF tag is "use_dynamic_moi_r...
Definition: ODEPhysics.hh:88
virtual std::string GetType() const
Return the physics engine type (ode|bullet|dart|simbody).
Definition: ODEPhysics.hh:126
boost::shared_ptr< Joint > JointPtr
Definition: PhysicsTypes.hh:117
ODE physics engine.
Definition: ODEPhysics.hh:50
ODEParam
ODE Physics parameter types.
Definition: ODEPhysics.hh:54
Surface layer depth.
Definition: ODEPhysics.hh:78
SOR over-relaxation parameter.
Definition: ODEPhysics.hh:72
Error reduction parameter.
Definition: ODEPhysics.hh:63
friction model
Definition: ODEPhysics.hh:91
Number of iterations.
Definition: ODEPhysics.hh:66
boost::shared_ptr< Inertial > InertialPtr
Definition: PhysicsTypes.hh:157
Number of iterations.
Definition: ODEPhysics.hh:69
ODE wrapper forward declarations and typedefs.
boost::shared_ptr< Shape > ShapePtr
Definition: PhysicsTypes.hh:141
Max correcting velocity.
Definition: ODEPhysics.hh:75
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:93
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
Maximum number of contacts.
Definition: ODEPhysics.hh:81
boost::shared_ptr< Collision > CollisionPtr
Definition: PhysicsTypes.hh:113
Solve type.
Definition: ODEPhysics.hh:57