17 #ifndef _GAZEBO_SENSORMANAGER_HH_
18 #define _GAZEBO_SENSORMANAGER_HH_
20 #include <boost/thread.hpp>
45 class GZ_SENSORS_VISIBLE SimTimeEvent
48 public: common::Time time;
51 public: boost::condition_variable *condition;
56 class GZ_SENSORS_VISIBLE SimTimeEventHandler
59 public: SimTimeEventHandler();
62 public:
virtual ~SimTimeEventHandler();
69 public:
void AddRelativeEvent(
const common::Time &_time,
70 boost::condition_variable *_var);
74 private:
void OnUpdate(
const common::UpdateInfo &_info);
77 private: boost::mutex mutex;
80 private: std::list<SimTimeEvent*> events;
105 public:
void Update(
bool _force =
false);
112 public:
void RunThreads();
122 public:
bool Running()
const;
126 public:
void GetSensorTypes(std::vector<std::string> &_types)
const;
135 public: std::string CreateSensor(sdf::ElementPtr _elem,
136 const std::string &_worldName,
137 const std::string &_parentName,
147 public:
void OnCreateSensor(sdf::ElementPtr _elem,
148 const std::string &_worldName,
149 const std::string &_parentName,
150 const uint32_t _parentId);
155 public:
SensorPtr GetSensor(
const std::string &_name)
const;
159 public:
Sensor_V GetSensors()
const;
163 public:
void RemoveSensor(
const std::string &_name);
166 public:
void RemoveSensors();
170 public:
bool SensorsInitialized();
173 public:
void ResetLastUpdateTimes();
177 private:
void AddSensor(
SensorPtr _sensor);
185 private:
class SensorContainer
188 public: SensorContainer();
191 public:
virtual ~SensorContainer();
207 public:
bool Running()
const;
212 public:
virtual void Update(
bool _force =
false);
216 public:
void AddSensor(
SensorPtr _sensor);
223 public:
SensorPtr GetSensor(
const std::string &_name,
224 bool _useLeafName =
false)
const;
229 public:
bool RemoveSensor(
const std::string &_name);
232 public:
void RemoveSensors();
235 public:
void ResetLastUpdateTimes();
239 private:
void RunLoop();
249 private:
bool initialized;
252 private: boost::thread *runThread;
255 private:
mutable boost::recursive_mutex mutex;
259 private: boost::condition_variable runCondition;
266 private:
class ImageSensorContainer :
public SensorContainer
271 public:
virtual void Update(
bool _force =
false);
277 private:
bool initialized;
280 private:
bool removeAllSensors;
283 private:
mutable boost::recursive_mutex mutex;
289 private: std::vector<std::string> removeSensors;
292 private:
typedef std::vector<SensorContainer*> SensorContainer_V;
295 private: SensorContainer_V sensorContainers;
301 private:
friend class SensorContainer;
304 private: SimTimeEventHandler *simTimeEventHandler;
308 private: std::map<std::string, physics::WorldPtr> worlds;