Warning: include(php/utility.php): Failed to open stream: No such file or directory in /home/argos/argos3/doc/api/embedded/a00807_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/a00807_source.php on line 2
The ARGoS Website

dynamics2d_engine.h
Go to the documentation of this file.
1 
7 #ifndef DYNAMICS2D_ENGINE_H
8 #define DYNAMICS2D_ENGINE_H
9 
10 namespace argos {
11  class CDynamics2DEngine;
12  class CDynamics2DModel;
13  class CGripperEquippedEntity;
14  class CEmbodiedEntity;
15 }
16 
17 #include <argos3/core/simulator/entity/controllable_entity.h>
18 #include <argos3/core/simulator/physics_engine/physics_engine.h>
19 #include <argos3/plugins/simulator/physics_engines/dynamics2d/chipmunk-physics/include/chipmunk.h>
20 
21 namespace argos {
22 
23  /****************************************/
24  /****************************************/
25 
29  cpVect GripperAnchor;
30  cpConstraint* GripConstraint;
31 
33  CGripperEquippedEntity& c_entity,
34  cpVect t_anchor);
36  void ClearConstraints();
37  };
38 
39  /****************************************/
40  /****************************************/
41 
43 
44  public:
45 
46  enum EShapeType {
50  };
51 
52  enum ELayerType {
54  LAYER_NORMAL = CP_ALL_LAYERS
55  };
56 
58 
59  virtual ~CDynamics2DEngine() {}
60 
61  virtual void Init(TConfigurationNode& t_tree);
62  virtual void Reset();
63  virtual void Update();
64  virtual void Destroy();
65 
66  virtual size_t GetNumPhysicsModels();
67  virtual bool AddEntity(CEntity& c_entity);
68  virtual bool RemoveEntity(CEntity& c_entity);
69 
71  const CRay3& c_ray) const;
72 
73  inline cpFloat GetBoxLinearFriction() const {
74  return m_fBoxLinearFriction;
75  }
76 
77  inline cpFloat GetBoxAngularFriction() const {
78  return m_fBoxAngularFriction;
79  }
80 
81  inline cpFloat GetCylinderLinearFriction() const {
82  return m_fCylinderLinearFriction;
83  }
84 
85  inline cpFloat GetCylinderAngularFriction() const {
86  return m_fCylinderAngularFriction;
87  }
88 
89  inline cpSpace* GetPhysicsSpace() {
90  return m_ptSpace;
91  }
92 
93  inline const cpSpace* GetPhysicsSpace() const {
94  return m_ptSpace;
95  }
96 
97  inline cpBody* GetGroundBody() {
98  return m_ptGroundBody;
99  }
100 
101  inline Real GetElevation() const {
102  return m_fElevation;
103  }
104 
105  inline Real GetDamping() const {
106  return cpSpaceGetDamping(m_ptSpace);
107  }
108 
109  inline void SetDamping(Real f_damping) {
110  cpSpaceSetDamping(m_ptSpace, f_damping);
111  }
112 
113  inline CVector2 GetGravity() const {
114  return CVector2(m_ptSpace->gravity.x, m_ptSpace->gravity.y);
115  }
116 
117  inline void SetGravity(const CVector2& c_gravity) {
118  m_ptSpace->gravity = cpv(c_gravity.GetX(), c_gravity.GetY());
119  }
120 
121  void PositionPhysicsToSpace(CVector3& c_new_pos,
122  const CVector3& c_original_pos,
123  const cpBody* pt_body);
124 
125  void OrientationPhysicsToSpace(CQuaternion& c_new_orient,
126  cpBody* pt_body);
127 
128  void AddPhysicsModel(const std::string& str_id,
129  CDynamics2DModel& c_model);
130  void RemovePhysicsModel(const std::string& str_id);
131 
132  private:
133 
134  cpFloat m_fBoxLinearFriction;
135  cpFloat m_fBoxAngularFriction;
136  cpFloat m_fCylinderLinearFriction;
137  cpFloat m_fCylinderAngularFriction;
138  cpSpace* m_ptSpace;
139  cpBody* m_ptGroundBody;
140  Real m_fElevation;
141 
142  CControllableEntity::TMap m_tControllableEntities;
143  std::map<std::string, CDynamics2DModel*> m_tPhysicsModels;
144 
145  };
146 
147  /****************************************/
148  /****************************************/
149 
150  template <typename ACTION>
151  class CDynamics2DOperation : public CEntityOperation<ACTION, CDynamics2DEngine, SOperationOutcome> {
152  public:
154  };
155 
156  class CDynamics2DOperationAddEntity : public CDynamics2DOperation<CDynamics2DOperationAddEntity> {
157  public:
159  };
160 
161  class CDynamics2DOperationRemoveEntity : public CDynamics2DOperation<CDynamics2DOperationRemoveEntity> {
162  public:
164  };
165 
166 #define REGISTER_DYNAMICS2D_OPERATION(ACTION, OPERATION, ENTITY) \
167  REGISTER_ENTITY_OPERATION(ACTION, CDynamics2DEngine, OPERATION, SOperationOutcome, ENTITY);
168 
169 #define REGISTER_STANDARD_DYNAMICS2D_OPERATION_ADD_ENTITY(SPACE_ENTITY, DYN2D_MODEL) \
170  class CDynamics2DOperationAdd ## SPACE_ENTITY : public CDynamics2DOperationAddEntity { \
171  public: \
172  CDynamics2DOperationAdd ## SPACE_ENTITY() {} \
173  virtual ~CDynamics2DOperationAdd ## SPACE_ENTITY() {} \
174  SOperationOutcome ApplyTo(CDynamics2DEngine& c_engine, \
175  SPACE_ENTITY& c_entity) { \
176  DYN2D_MODEL* pcPhysModel = new DYN2D_MODEL(c_engine, \
177  c_entity); \
178  c_engine.AddPhysicsModel(c_entity.GetId(), \
179  *pcPhysModel); \
180  c_entity. \
181  GetComponent<CEmbodiedEntity>("body"). \
182  AddPhysicsModel(c_engine.GetId(), *pcPhysModel); \
183  return SOperationOutcome(true); \
184  } \
185  }; \
186  REGISTER_DYNAMICS2D_OPERATION(CDynamics2DOperationAddEntity, \
187  CDynamics2DOperationAdd ## SPACE_ENTITY, \
188  SPACE_ENTITY);
189 
190 #define REGISTER_STANDARD_DYNAMICS2D_OPERATION_REMOVE_ENTITY(SPACE_ENTITY) \
191  class CDynamics2DOperationRemove ## SPACE_ENTITY : public CDynamics2DOperationRemoveEntity { \
192  public: \
193  CDynamics2DOperationRemove ## SPACE_ENTITY() {} \
194  virtual ~CDynamics2DOperationRemove ## SPACE_ENTITY() {} \
195  SOperationOutcome ApplyTo(CDynamics2DEngine& c_engine, \
196  SPACE_ENTITY& c_entity) { \
197  c_engine.RemovePhysicsModel(c_entity.GetId()); \
198  c_entity. \
199  GetComponent<CEmbodiedEntity>("body"). \
200  RemovePhysicsModel(c_engine.GetId()); \
201  return SOperationOutcome(true); \
202  } \
203  }; \
204  REGISTER_DYNAMICS2D_OPERATION(CDynamics2DOperationRemoveEntity, \
205  CDynamics2DOperationRemove ## SPACE_ENTITY, \
206  SPACE_ENTITY);
207 
208 #define REGISTER_STANDARD_DYNAMICS2D_OPERATIONS_ON_ENTITY(SPACE_ENTITY, DYN2D_ENTITY) \
209  REGISTER_STANDARD_DYNAMICS2D_OPERATION_ADD_ENTITY(SPACE_ENTITY, DYN2D_ENTITY) \
210  REGISTER_STANDARD_DYNAMICS2D_OPERATION_REMOVE_ENTITY(SPACE_ENTITY)
211 
212  /****************************************/
213  /****************************************/
214 
215 }
216 
217 #endif
A 3D vector class.
Definition: vector3.h:29
CGripperEquippedEntity & GripperEntity
float Real
Collects all ARGoS code.
Definition: datatypes.h:39
Real GetX() const
Returns the x coordinate of this vector.
Definition: vector2.h:78
virtual void CheckIntersectionWithRay(TEmbodiedEntityIntersectionData &t_data, const CRay3 &c_ray) const
Check which objects in this engine intersect the given ray.
The basic entity type.
Definition: entity.h:89
ticpp::Element TConfigurationNode
The ARGoS configuration XML node.
cpFloat GetBoxLinearFriction() const
Real GetY() const
Returns the y coordinate of this vector.
Definition: vector2.h:94
cpFloat GetCylinderAngularFriction() const
virtual void Destroy()
Undoes whatever was done by Init().
std::vector< SEmbodiedEntityIntersectionItem > TEmbodiedEntityIntersectionData
virtual size_t GetNumPhysicsModels()
CVector2 GetGravity() const
A 2D vector class.
Definition: vector2.h:25
void SetDamping(Real f_damping)
cpFloat GetCylinderLinearFriction() const
void RemovePhysicsModel(const std::string &str_id)
The base class for models in the dynamics 2D engine.
const cpSpace * GetPhysicsSpace() const
void OrientationPhysicsToSpace(CQuaternion &c_new_orient, cpBody *pt_body)
SDynamics2DEngineGripperData(CDynamics2DEngine &c_engine, CGripperEquippedEntity &c_entity, cpVect t_anchor)
The basic operation to be stored in the vtable.
Definition: entity.h:331
virtual void Reset()
Resets the resource.
void SetGravity(const CVector2 &c_gravity)
virtual bool RemoveEntity(CEntity &c_entity)
Removes an entity from the physics engine.
The namespace containing all the ARGoS related code.
Definition: ci_actuator.h:12
std::map< std::string, CControllableEntity * > TMap
A map of controllable entities, indexed by id.
virtual void Init(TConfigurationNode &t_tree)
Initializes the resource.
cpFloat GetBoxAngularFriction() const
void AddPhysicsModel(const std::string &str_id, CDynamics2DModel &c_model)
An entity that stores the state of a robot gripper.
virtual bool AddEntity(CEntity &c_entity)
Adds an entity to the physics engine.
void PositionPhysicsToSpace(CVector3 &c_new_pos, const CVector3 &c_original_pos, const cpBody *pt_body)