ARGoS  3
A parallel, multi-engine simulator for swarm robotics
plugins/robots/generic/control_interface/ci_colored_blob_omnidirectional_camera_sensor.h
Go to the documentation of this file.
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