ARGoS
3
A parallel, multi-engine simulator for swarm robotics
|
00001 00007 #ifndef PROXIMITY_SENSOR_EQUIPPED_ENTITY_H 00008 #define PROXIMITY_SENSOR_EQUIPPED_ENTITY_H 00009 00010 namespace argos { 00011 class CProximitySensorEquippedEntity; 00012 } 00013 00014 #include <argos3/core/utility/math/vector3.h> 00015 #include <argos3/core/simulator/entity/entity.h> 00016 #include <map> 00017 00018 namespace argos { 00019 00020 class CProximitySensorEquippedEntity : public CEntity { 00021 00022 public: 00023 00024 ENABLE_VTABLE(); 00025 00026 struct SSensor { 00027 CVector3 Offset; 00028 CVector3 Direction; 00029 SSensor(const CVector3& c_offset, 00030 const CVector3& c_direction, 00031 Real f_range) : 00032 Offset(c_offset), 00033 Direction(c_direction) { 00034 Direction.Normalize(); 00035 Direction *= f_range; 00036 } 00037 }; 00038 00039 typedef std::vector<SSensor*> TSensors; 00040 00041 public: 00042 00043 CProximitySensorEquippedEntity(CComposableEntity* pc_parent); 00044 00045 CProximitySensorEquippedEntity(CComposableEntity* pc_parent, 00046 const std::string& str_id); 00047 00048 virtual ~CProximitySensorEquippedEntity(); 00049 00050 virtual void Init(TConfigurationNode& t_tree); 00051 00052 virtual std::string GetTypeDescription() const { 00053 return "proximity_sensors"; 00054 } 00055 00056 inline size_t GetNumSensors() const { 00057 return m_tSensors.size(); 00058 } 00059 00060 inline SSensor& GetSensor(size_t un_idx) { 00061 return *m_tSensors[un_idx]; 00062 } 00063 00064 inline TSensors& GetSensors() { 00065 return m_tSensors; 00066 } 00067 00068 void AddSensor(const CVector3& c_offset, 00069 const CVector3& c_direction, 00070 Real f_range); 00071 00072 void AddSensorRing(const CVector3& c_center, 00073 Real f_radius, 00074 const CRadians& c_start_angle, 00075 Real f_range, 00076 UInt32 un_num_sensors); 00077 00078 protected: 00079 00081 TSensors m_tSensors; 00082 00083 }; 00084 00085 } 00086 00087 #endif