ARGoS
3
A parallel, multi-engine simulator for swarm robotics
|
00001 #ifndef CI_COLORED_BLOB_OMNIDIRECTIONAL_CAMERA_SENSOR_H 00002 #define CI_COLORED_BLOB_OMNIDIRECTIONAL_CAMERA_SENSOR_H 00003 00004 namespace argos { 00005 class CCI_ColoredBlobOmnidirectionalCameraSensor; 00006 } 00007 00008 #include <argos3/core/control_interface/ci_sensor.h> 00009 #include <argos3/core/utility/math/angles.h> 00010 #include <argos3/core/utility/datatypes/color.h> 00011 #include <vector> 00012 00013 namespace argos { 00014 00024 class CCI_ColoredBlobOmnidirectionalCameraSensor: virtual public CCI_Sensor { 00025 00026 public: 00027 00038 struct SBlob { 00039 /* Color */ 00040 CColor Color; 00041 /* Angle */ 00042 CRadians Angle; 00043 /* Distance in cms */ 00044 Real Distance; 00048 SBlob() : 00049 Color(CColor::BLACK), 00050 Distance(0.0f) { 00051 } 00060 SBlob(const CColor& c_color, 00061 const CRadians& c_angle, 00062 Real f_distance) : 00063 Color(c_color), 00064 Angle(c_angle), 00065 Distance(f_distance) { 00066 } 00067 00068 friend std::ostream& operator<<(std::ostream& c_os, const SBlob& s_blob) { 00069 c_os << "(Color = " << s_blob.Color << "," << "Angle = " << ToDegrees(s_blob.Angle) << "," 00070 << "Distance = " << s_blob.Distance << ")"; 00071 return c_os; 00072 } 00073 }; 00074 00078 typedef std::vector<SBlob*> TBlobList; 00079 00085 struct SReadings { 00086 TBlobList BlobList; 00087 UInt64 Counter; 00088 00089 SReadings() : 00090 Counter(0) { 00091 } 00092 00093 friend std::ostream& operator<<(std::ostream& c_os, const SReadings& s_reading) { 00094 c_os << "Counter: " << s_reading.Counter << std::endl; 00095 for (size_t i = 0; i < s_reading.BlobList.size(); i++) { 00096 c_os << "Blob[" << i << "]: " << s_reading.BlobList[i] << std::endl; 00097 } 00098 return c_os; 00099 } 00100 }; 00101 00102 public: 00103 00107 CCI_ColoredBlobOmnidirectionalCameraSensor() { 00108 } 00109 00113 virtual ~CCI_ColoredBlobOmnidirectionalCameraSensor() { 00114 } 00115 00120 inline const SReadings& GetReadings() const { 00121 return m_sReadings; 00122 } 00123 00127 virtual void Enable() = 0; 00128 00132 virtual void Disable() = 0; 00133 00134 #ifdef ARGOS_WITH_LUA 00135 virtual void CreateLuaState(lua_State* pt_lua_state); 00136 00137 virtual void ReadingsToLuaState(lua_State* pt_lua_state); 00138 #endif 00139 00140 protected: 00141 00142 SReadings m_sReadings; 00143 00144 }; 00145 00146 } 00147 00148 #endif