ARGoS
3
A parallel, multi-engine simulator for swarm robotics
|
Go to the documentation of this file.
7 #ifndef DYNAMICS2D_ENGINE_H
8 #define DYNAMICS2D_ENGINE_H
11 class CDynamics2DEngine;
12 class CDynamics2DModel;
13 class CGripperEquippedEntity;
14 class CEmbodiedEntity;
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>
71 const CRay3& c_ray)
const;
82 return m_ptGroundBody;
90 return cpSpaceGetDamping(m_ptSpace);
94 cpSpaceSetDamping(m_ptSpace, f_damping);
98 return CVector2(m_ptSpace->gravity.x, m_ptSpace->gravity.y);
102 m_ptSpace->gravity = cpv(c_gravity.
GetX(), c_gravity.
GetY());
107 const cpBody* pt_body);
118 cpFloat m_fStaticHashCellSize;
119 cpFloat m_fActiveHashCellSize;
120 SInt32 m_nStaticHashCells;
121 SInt32 m_nActiveHashCells;
123 cpBody* m_ptGroundBody;
127 std::map<std::string, CDynamics2DModel*> m_tPhysicsModels;
134 template <
typename ACTION>
150 #define REGISTER_DYNAMICS2D_OPERATION(ACTION, OPERATION, ENTITY) \
151 REGISTER_ENTITY_OPERATION(ACTION, CDynamics2DEngine, OPERATION, SOperationOutcome, ENTITY);
153 #define REGISTER_STANDARD_DYNAMICS2D_OPERATION_ADD_ENTITY(SPACE_ENTITY, DYN2D_MODEL) \
154 class CDynamics2DOperationAdd ## SPACE_ENTITY : public CDynamics2DOperationAddEntity { \
156 CDynamics2DOperationAdd ## SPACE_ENTITY() {} \
157 virtual ~CDynamics2DOperationAdd ## SPACE_ENTITY() {} \
158 SOperationOutcome ApplyTo(CDynamics2DEngine& c_engine, \
159 SPACE_ENTITY& c_entity) { \
160 DYN2D_MODEL* pcPhysModel = new DYN2D_MODEL(c_engine, \
162 c_engine.AddPhysicsModel(c_entity.GetId(), \
165 GetComponent<CEmbodiedEntity>("body"). \
166 AddPhysicsModel(c_engine.GetId(), *pcPhysModel); \
167 return SOperationOutcome(true); \
170 REGISTER_DYNAMICS2D_OPERATION(CDynamics2DOperationAddEntity, \
171 CDynamics2DOperationAdd ## SPACE_ENTITY, \
174 #define REGISTER_STANDARD_DYNAMICS2D_OPERATION_REMOVE_ENTITY(SPACE_ENTITY) \
175 class CDynamics2DOperationRemove ## SPACE_ENTITY : public CDynamics2DOperationRemoveEntity { \
177 CDynamics2DOperationRemove ## SPACE_ENTITY() {} \
178 virtual ~CDynamics2DOperationRemove ## SPACE_ENTITY() {} \
179 SOperationOutcome ApplyTo(CDynamics2DEngine& c_engine, \
180 SPACE_ENTITY& c_entity) { \
181 c_engine.RemovePhysicsModel(c_entity.GetId()); \
183 GetComponent<CEmbodiedEntity>("body"). \
184 RemovePhysicsModel(c_engine.GetId()); \
185 return SOperationOutcome(true); \
188 REGISTER_DYNAMICS2D_OPERATION(CDynamics2DOperationRemoveEntity, \
189 CDynamics2DOperationRemove ## SPACE_ENTITY, \
192 #define REGISTER_STANDARD_DYNAMICS2D_OPERATIONS_ON_ENTITY(SPACE_ENTITY, DYN2D_ENTITY) \
193 REGISTER_STANDARD_DYNAMICS2D_OPERATION_ADD_ENTITY(SPACE_ENTITY, DYN2D_ENTITY) \
194 REGISTER_STANDARD_DYNAMICS2D_OPERATION_REMOVE_ENTITY(SPACE_ENTITY)
CDynamics2DEngine & Engine
SDynamics2DEngineGripperData(CDynamics2DEngine &c_engine, CGripperEquippedEntity &c_entity, cpVect t_anchor)
The basic operation to be stored in the vtable.
The namespace containing all the ARGoS related code.
virtual void Init(TConfigurationNode &t_tree)
Initializes the resource.
~SDynamics2DEngineGripperData()
Real GetElevation() const
virtual size_t GetNumPhysicsModels()
ticpp::Element TConfigurationNode
The ARGoS configuration XML node.
Real GetY() const
Returns the y coordinate of this vector.
An entity that stores the state of a robot gripper.
void AddPhysicsModel(const std::string &str_id, CDynamics2DModel &c_model)
virtual ~CDynamics2DOperationAddEntity()
void SetGravity(const CVector2 &c_gravity)
void OrientationPhysicsToSpace(CQuaternion &c_new_orient, cpBody *pt_body)
virtual bool AddEntity(CEntity &c_entity)
Adds an entity to the physics engine.
cpSpace * GetPhysicsSpace()
Real GetX() const
Returns the x coordinate of this vector.
void RemovePhysicsModel(const std::string &str_id)
signed int SInt32
32-bit signed integer.
The base class for models in the dynamics 2D engine.
virtual void CheckIntersectionWithRay(TEmbodiedEntityIntersectionData &t_data, const CRay3 &c_ray) const
Check which objects in this engine intersect the given ray.
void PositionPhysicsToSpace(CVector3 &c_new_pos, const CVector3 &c_original_pos, const cpBody *pt_body)
virtual ~CDynamics2DOperationRemoveEntity()
CGripperEquippedEntity & GripperEntity
virtual ~CDynamics2DEngine()
virtual void Destroy()
Undoes whatever was done by Init().
virtual ~CDynamics2DOperation()
void SetDamping(Real f_damping)
const cpSpace * GetPhysicsSpace() const
std::vector< SEmbodiedEntityIntersectionItem > TEmbodiedEntityIntersectionData
cpConstraint * GripConstraint
virtual void Reset()
Resets the resource.
float Real
Collects all ARGoS code.
std::map< std::string, CControllableEntity * > TMap
A map of controllable entities, indexed by id.
virtual bool RemoveEntity(CEntity &c_entity)
Removes an entity from the physics engine.
CVector2 GetGravity() const