17 #ifndef _GAZEBO_SENSORMANAGER_HH_
18 #define _GAZEBO_SENSORMANAGER_HH_
20 #include <boost/thread.hpp>
25 #include <condition_variable>
46 class GZ_SENSORS_VISIBLE SimTimeEvent
49 public: common::Time time;
52 public: boost::condition_variable *condition;
57 class GZ_SENSORS_VISIBLE SimTimeEventHandler
60 public: SimTimeEventHandler();
63 public:
virtual ~SimTimeEventHandler();
70 public:
void AddRelativeEvent(
const common::Time &_time,
71 boost::condition_variable *_var);
75 private:
void OnUpdate(
const common::UpdateInfo &_info);
78 private: boost::mutex mutex;
81 private: std::list<SimTimeEvent*> events;
106 public:
void Update(
bool _force =
false);
113 public:
void RunThreads();
123 public:
bool Running()
const;
127 public:
void GetSensorTypes(std::vector<std::string> &_types)
const;
136 public: std::string CreateSensor(sdf::ElementPtr _elem,
137 const std::string &_worldName,
138 const std::string &_parentName,
148 public:
void OnCreateSensor(sdf::ElementPtr _elem,
149 const std::string &_worldName,
150 const std::string &_parentName,
151 const uint32_t _parentId);
156 public:
SensorPtr GetSensor(
const std::string &_name)
const;
160 public:
Sensor_V GetSensors()
const;
164 public:
void RemoveSensor(
const std::string &_name);
167 public:
void RemoveSensors();
171 public:
bool SensorsInitialized();
174 public:
void ResetLastUpdateTimes();
178 private:
void AddSensor(
SensorPtr _sensor);
186 private:
class SensorContainer
189 public: SensorContainer();
192 public:
virtual ~SensorContainer();
208 public:
bool Running()
const;
213 public:
virtual void Update(
bool _force =
false);
217 public:
void AddSensor(
SensorPtr _sensor);
224 public:
SensorPtr GetSensor(
const std::string &_name,
225 bool _useLeafName =
false)
const;
230 public:
bool RemoveSensor(
const std::string &_name);
233 public:
void RemoveSensors();
236 public:
void ResetLastUpdateTimes();
240 private:
void RunLoop();
250 private:
bool initialized;
253 private: boost::thread *runThread;
256 private:
mutable boost::recursive_mutex mutex;
260 private: boost::condition_variable runCondition;
267 private:
class ImageSensorContainer :
public SensorContainer
272 public:
virtual void Update(
bool _force =
false);
275 private: std::condition_variable conditionPrerendered;
281 private:
bool initialized;
284 private:
bool removeAllSensors;
287 private:
mutable boost::recursive_mutex mutex;
293 private: std::vector<std::string> removeSensors;
296 private:
typedef std::vector<SensorContainer*> SensorContainer_V;
299 private: SensorContainer_V sensorContainers;
305 private:
friend class SensorContainer;
308 private: SimTimeEventHandler *simTimeEventHandler;
312 private: std::map<std::string, physics::WorldPtr> worlds;