Warning: include(php/utility.php): Failed to open stream: No such file or directory in /home/argos/argos3/doc/api/embedded/a00832_source.php on line 2

Warning: include(): Failed opening 'php/utility.php' for inclusion (include_path='.:/usr/lib64/php') in /home/argos/argos3/doc/api/embedded/a00832_source.php on line 2
The ARGoS Website

dynamics3d_model.h
Go to the documentation of this file.
1 
7 #ifndef DYNAMICS3D_MODEL_H
8 #define DYNAMICS3D_MODEL_H
9 
10 namespace argos {
11  class CDynamics3DEngine;
12 }
13 
14 #include <argos3/core/simulator/physics_engine/physics_model.h>
15 #include <argos3/core/simulator/entity/composable_entity.h>
16 #include <argos3/core/utility/math/vector3.h>
17 #include <argos3/core/utility/math/quaternion.h>
18 #include <argos3/plugins/simulator/physics_engines/dynamics3d/bullet/btBulletCollisionCommon.h>
19 #include <argos3/plugins/simulator/physics_engines/dynamics3d/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h>
20 
21 namespace argos {
22 
23  /****************************************/
24  /****************************************/
25 
27 
28  public:
29 
30  typedef std::map<std::string, CDynamics3DModel*> TMap;
31 
32  public:
33 
34  class CAbstractBody {
35 
36  public:
37 
38  using TVector = std::vector<CAbstractBody*>;
39 
40  using TVectorIterator = std::vector<CAbstractBody*>::iterator;
41 
42  struct SData {
43  /* Constructor */
44  SData(const btTransform& c_start_transform,
45  const btTransform& c_center_of_mass_offset,
46  const btVector3& c_inertia,
47  btScalar f_mass,
48  btScalar f_friction);
49  /* Data */
50  btTransform StartTransform;
51  btTransform InverseStartTransform;
52  btTransform CenterOfMassOffset;
54  btVector3 Inertia;
55  btScalar Mass;
56  btScalar Friction;
57  };
58 
59  public:
60 
62  SAnchor& s_anchor,
63  std::shared_ptr<btCollisionShape>& ptr_shape,
64  const SData& s_data);
65 
66  virtual ~CAbstractBody() {}
67 
69 
70  SAnchor& GetAnchor();
71 
72  btCollisionShape& GetShape();
73 
74  const SData& GetData();
75 
76  virtual void Reset() = 0;
77 
78  virtual void AddToWorld(btMultiBodyDynamicsWorld& c_world) = 0;
79 
80  virtual void RemoveFromWorld(btMultiBodyDynamicsWorld& c_world) = 0;
81 
82  virtual void ApplyForce(const btVector3& c_force) = 0;
83 
84  virtual void ApplyForce(const btVector3& c_force, const btVector3& c_offset) = 0;
85 
86  virtual void ApplyTorque(const btVector3& c_torque) = 0;
87 
88  virtual btTransform& GetTransform() = 0;
89 
90  void UpdateAnchor();
91 
92  protected:
93  /* Link to the model */
95  /* Link to the anchor */
97  /* Link to the collision shape */
98  std::shared_ptr<btCollisionShape> m_ptrShape;
99  /* Data for setting up the body */
101  };
102 
103  public:
104 
106  CComposableEntity& c_entity);
107 
108  virtual ~CDynamics3DModel();
109 
110  virtual void Reset() = 0;
111 
113  return m_cEngine;
114  }
115 
116  inline const CDynamics3DEngine& GetEngine() const {
117  return m_cEngine;
118  }
119 
121  return m_cComposableEntity;
122  }
123 
124  inline const CComposableEntity& GetComposableEntity() const {
125  return m_cComposableEntity;
126  }
127 
128  virtual bool IsCollidingWithSomething() const;
129 
130  virtual void UpdateEntityStatus();
131 
132  virtual void UpdateFromEntityStatus() {}
133 
134  std::vector<CAbstractBody*>& GetBodies() {
135  return m_vecBodies;
136  }
137 
138  virtual void AddToWorld(btMultiBodyDynamicsWorld& c_world) = 0;
139 
140  virtual void RemoveFromWorld(btMultiBodyDynamicsWorld& c_world) = 0;
141 
142  protected:
143 
144  std::vector<CAbstractBody*> m_vecBodies;
145 
146  private:
147 
148  CDynamics3DEngine& m_cEngine;
149  CComposableEntity& m_cComposableEntity;
150 
151  };
152 
153  /****************************************/
154  /****************************************/
155 
156 }
157 
158 #endif
virtual void RemoveFromWorld(btMultiBodyDynamicsWorld &c_world)=0
const CDynamics3DEngine & GetEngine() const
virtual void AddToWorld(btMultiBodyDynamicsWorld &c_world)=0
virtual btTransform & GetTransform()=0
CDynamics3DEngine & GetEngine()
std::shared_ptr< btCollisionShape > m_ptrShape
virtual void RemoveFromWorld(btMultiBodyDynamicsWorld &c_world)=0
CAbstractBody(CDynamics3DModel &c_model, SAnchor &s_anchor, std::shared_ptr< btCollisionShape > &ptr_shape, const SData &s_data)
virtual void ApplyForce(const btVector3 &c_force)=0
std::map< std::string, CDynamics3DModel * > TMap
std::vector< CAbstractBody * > m_vecBodies
virtual bool IsCollidingWithSomething() const
Returns true if this model is colliding with another model.
virtual void ApplyTorque(const btVector3 &c_torque)=0
std::vector< CAbstractBody * >::iterator TVectorIterator
Basic class for an entity that contains other entities.
An anchor related to the body of an entity.
Definition: physics_model.h:38
CComposableEntity & GetComposableEntity()
virtual void AddToWorld(btMultiBodyDynamicsWorld &c_world)=0
virtual void Reset()=0
virtual void UpdateFromEntityStatus()
Updates the state of this model from the status of the associated entity.
SData(const btTransform &c_start_transform, const btTransform &c_center_of_mass_offset, const btVector3 &c_inertia, btScalar f_mass, btScalar f_friction)
CDynamics3DModel(CDynamics3DEngine &c_engine, CComposableEntity &c_entity)
std::vector< CAbstractBody * > & GetBodies()
virtual void UpdateEntityStatus()
Updates the status of the associated entity.
The namespace containing all the ARGoS related code.
Definition: ci_actuator.h:12
const CComposableEntity & GetComposableEntity() const
std::vector< CAbstractBody * > TVector