All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sensor.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2012 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 /* Desc: Base class for all sensors
18  * Author: Nathan Koenig
19  * Date: 25 May 2007
20  */
21 
22 #ifndef _SENSOR_HH_
23 #define _SENSOR_HH_
24 
25 #include <boost/enable_shared_from_this.hpp>
26 #include <vector>
27 #include <string>
28 
29 #include <sdf/sdf.hh>
30 
32 
33 #include "gazebo/msgs/msgs.hh"
34 #include "gazebo/common/Events.hh"
35 #include "gazebo/common/Time.hh"
36 #include "gazebo/math/Pose.hh"
38 
39 namespace gazebo
40 {
41  namespace sensors
42  {
46  {
47  // IMAGE must be the first element, and it must start with 0. Do not
48  // change this! See SensorManager::sensorContainers for reference.
51  IMAGE = 0,
52 
54  RAY = 1,
55 
57  OTHER = 2,
58 
61  };
62 
65 
68  class Sensor : public boost::enable_shared_from_this<Sensor>
69  {
72  public: explicit Sensor(SensorCategory _cat);
73 
75  public: virtual ~Sensor();
76 
80  public: virtual void Load(const std::string &_worldName,
81  sdf::ElementPtr _sdf);
82 
85  public: virtual void Load(const std::string &_worldName);
86 
88  public: virtual void Init();
89 
92  public: virtual void SetParent(const std::string &_name);
93 
97  public: std::string GetParentName() const;
98 
101  public: void Update(bool _force);
102 
108  protected: virtual void UpdateImpl(bool /*_force*/) {}
109 
112  public: double GetUpdateRate();
113 
116  public: void SetUpdateRate(double _hz);
117 
119  public: virtual void Fini();
120 
123  public: std::string GetName() const;
124 
127  public: std::string GetScopedName() const;
128 
131  public: virtual math::Pose GetPose() const;
132 
135  public: virtual void SetActive(bool _value);
136 
139  public: virtual bool IsActive();
140 
143  public: std::string GetType() const;
144 
148 
152 
156  public: bool GetVisualize() const;
157 
160  public: virtual std::string GetTopic() const;
161 
164  public: void FillMsg(msgs::Sensor &_msg);
165 
168  public: std::string GetWorldName() const;
169 
175  public: template<typename T>
177  {return this->updated.Connect(_subscriber);}
178 
183  {this->updated.Disconnect(_c);}
184 
188  public: SensorCategory GetCategory() const;
189 
191  public: void ResetLastUpdateTime();
192 
195  private: void LoadPlugin(sdf::ElementPtr _sdf);
196 
198  protected: bool active;
199 
201  protected: sdf::ElementPtr sdf;
202 
204  protected: math::Pose pose;
205 
207  protected: std::vector<event::ConnectionPtr> connections;
208 
211 
214 
216  protected: std::string parentName;
217 
219  protected: std::vector<SensorPluginPtr> plugins;
220 
223 
227 
230 
234 
236  private: event::EventT<void()> updated;
237 
239  private: transport::SubscriberPtr controlSub;
240 
242  private: transport::PublisherPtr sensorPub;
243 
245  private: SensorCategory category;
246 
248  private: common::Time updateDelay;
249  };
251  }
252 }
253 #endif