GpuLaser.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 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 #ifndef _GAZEBO_RENDERING_GPULASER_HH_
18 #define _GAZEBO_RENDERING_GPULASER_HH_
19 
20 #include <memory>
21 #include <string>
22 
23 #include <sdf/sdf.hh>
24 
29 #include "gazebo/util/system.hh"
30 
31 namespace Ogre
32 {
33  class Material;
34  class Renderable;
35  class Pass;
36  class AutoParamDataSource;
37  class Matrix4;
38  class MovableObject;
39 }
40 
41 namespace gazebo
42 {
43  namespace common
44  {
45  class Mesh;
46  }
47 
48  namespace rendering
49  {
50  // Forward declare private data.
51  class GpuLaserPrivate;
52 
55 
58  class GZ_RENDERING_VISIBLE GpuLaser
59  : public Camera, public Ogre::RenderObjectListener
60  {
65  public: GpuLaser(const std::string &_namePrefix,
66  ScenePtr _scene, const bool _autoRender = true);
67 
69  public: virtual ~GpuLaser();
70 
71  // Documentation inherited
72  public: virtual void Load(sdf::ElementPtr _sdf);
73 
74  // Documentation inherited
75  public: virtual void Load();
76 
77  // Documentation inherited
78  public: virtual void Init();
79 
80  // Documentation inherited
81  public: virtual void Fini();
82 
85  public: void CreateLaserTexture(const std::string &_textureName);
86 
87  // Documentation inherited
88  public: virtual void PostRender();
89 
92 
94  public: DataIter LaserDataBegin() const;
95 
97  public: DataIter LaserDataEnd() const;
98 
104  std::function<void (const float *_frame, unsigned int _width,
105  unsigned int _height, unsigned int _depth,
106  const std::string &_format)> _subscriber);
107 
112  public: void SetRangeCount(const unsigned int _w,
113  const unsigned int _h = 1);
114 
117  public: virtual void notifyRenderSingleObject(Ogre::Renderable *_rend,
118  const Ogre::Pass *_p, const Ogre::AutoParamDataSource *_s,
119  const Ogre::LightList *_ll, bool _supp);
120 
123  public: double HorzHalfAngle() const;
124 
127  public: double VertHalfAngle() const;
128 
131  public: void SetHorzHalfAngle(const double _angle);
132 
135  public: void SetVertHalfAngle(const double _angle);
136 
139  public: void SetIsHorizontal(const bool _horizontal);
140 
143  public: bool IsHorizontal() const;
144 
147  public: double HorzFOV() const;
148 
151  public: double CosHorzFOV() const;
152 
155  public: void SetCosHorzFOV(const double _chfov);
156 
159  public: double VertFOV() const;
160 
163  public: double CosVertFOV() const;
164 
167  public: void SetCosVertFOV(const double _cvfov);
168 
171  public: double NearClip() const;
172 
175  public: double FarClip() const;
176 
179  public: void SetNearClip(const double _near);
180 
183  public: void SetFarClip(const double _far);
184 
187  public: void SetHorzFOV(const double _hfov);
188 
191  public: void SetVertFOV(const double _vfov);
192 
195  public: unsigned int CameraCount() const;
196 
200  public: void SetCameraCount(const unsigned int _cameraCount);
201 
204  public: double RayCountRatio() const;
205 
208  public: void SetRayCountRatio(const double _rayCountRatio);
209 
210  // Documentation inherited.
211  private: virtual void RenderImpl();
212 
218  private: void UpdateRenderTarget(Ogre::RenderTarget *_target,
219  Ogre::Material *_material,
220  Ogre::Camera *_cam,
221  const bool _updateTex = false);
222 
224  private: void CreateOrthoCam();
225 
227  private: void CreateMesh();
228 
230  private: void CreateCanvas();
231 
240  private: Ogre::Matrix4 BuildScaledOrthoMatrix(const float _left,
241  const float _right, const float _bottom, const float _top,
242  const float _near, const float _far);
243 
247  private: virtual void Set1stPassTarget(Ogre::RenderTarget *_target,
248  const unsigned int _index);
249 
252  private: virtual void Set2ndPassTarget(Ogre::RenderTarget *_target);
253 
255  protected: double horzHalfAngle;
256 
258  protected: double vertHalfAngle;
259 
261  protected: double rayCountRatio;
262 
264  protected: double hfov;
265 
267  protected: double vfov;
268 
270  protected: double chfov;
271 
273  protected: double cvfov;
274 
276  protected: double nearClip;
277 
279  protected: double farClip;
280 
282  protected: bool isHorizontal;
283 
285  protected: unsigned int cameraCount;
286 
289  private: std::unique_ptr<GpuLaserPrivate> dataPtr;
290  };
292  }
293 }
294 #endif
common
Definition: FuelModelDatabase.hh:37
rendering
Definition: RenderEngine.hh:31
Basic camera sensor.
Definition: Camera.hh:86
const Bidirectional iterator for laser data
Definition: GpuLaserDataIterator.hh:54
GPU based laser distance sensor.
Definition: GpuLaser.hh:60
double FarClip() const
Get far clip.
void SetCameraCount(const unsigned int _cameraCount)
Set the number of cameras required.
double HorzFOV() const
Get the horizontal field of view of the laser sensor.
double HorzHalfAngle() const
Get (horizontal_max_angle + horizontal_min_angle) * 0.5.
event::ConnectionPtr ConnectNewLaserFrame(std::function< void(const float *_frame, unsigned int _width, unsigned int _height, unsigned int _depth, const std::string &_format)> _subscriber)
Connect to a laser frame signal.
double VertFOV() const
Get the vertical field-of-view.
DataIter LaserDataEnd() const
Return an iterator to one past the end of the laser data.
void SetRangeCount(const unsigned int _w, const unsigned int _h=1)
Set the number of samples in the width and height for the first pass texture.
void SetRayCountRatio(const double _rayCountRatio)
Sets the ray count ratio (equivalent to aspect ratio)
virtual void notifyRenderSingleObject(Ogre::Renderable *_rend, const Ogre::Pass *_p, const Ogre::AutoParamDataSource *_s, const Ogre::LightList *_ll, bool _supp)
double hfov
Horizontal field-of-view.
Definition: GpuLaser.hh:264
GpuLaser(const std::string &_namePrefix, ScenePtr _scene, const bool _autoRender=true)
Constructor.
double chfov
Cos horizontal field-of-view.
Definition: GpuLaser.hh:270
virtual void Fini()
Finalize the camera.
double farClip
Far clip plane.
Definition: GpuLaser.hh:279
double CosHorzFOV() const
Get Cos Horz field-of-view.
virtual void Init()
Initialize the camera.
void CreateLaserTexture(const std::string &_textureName)
Create the texture which is used to render laser data.
double vertHalfAngle
Vertical half angle.
Definition: GpuLaser.hh:258
void SetCosVertFOV(const double _cvfov)
Set the Cos Horz FOV.
void SetCosHorzFOV(const double _chfov)
Set the Cos Horz FOV.
virtual ~GpuLaser()
Destructor.
void SetNearClip(const double _near)
Set the near clip distance.
double vfov
Vertical field-of-view.
Definition: GpuLaser.hh:267
void SetHorzFOV(const double _hfov)
Set the horizontal fov.
virtual void Load()
Load the camera with default parameters.
double VertHalfAngle() const
Get (vertical_max_angle + vertical_min_angle) * 0.5.
double RayCountRatio() const
Get the ray count ratio (equivalent to aspect ratio)
void SetIsHorizontal(const bool _horizontal)
Set sensor horizontal or vertical.
double NearClip() const
Get near clip.
double horzHalfAngle
Horizontal half angle.
Definition: GpuLaser.hh:255
unsigned int CameraCount() const
Get the number of cameras required.
double rayCountRatio
Ray count ratio.
Definition: GpuLaser.hh:261
void SetFarClip(const double _far)
Set the far clip distance.
void SetHorzHalfAngle(const double _angle)
Set the horizontal half angle.
unsigned int cameraCount
Number of cameras needed to generate the rays.
Definition: GpuLaser.hh:285
virtual void Load(sdf::ElementPtr _sdf)
Load the camera with a set of parameters.
double CosVertFOV() const
Get Cos Vert field-of-view.
bool IsHorizontal() const
Gets if sensor is horizontal.
double nearClip
Near clip plane.
Definition: GpuLaser.hh:276
DataIter LaserDataBegin() const
Return an iterator to the begining of the laser data.
void SetVertHalfAngle(const double _angle)
Set the vertical half angle.
void SetVertFOV(const double _vfov)
Set the vertical fov.
double cvfov
Cos vertical field-of-view.
Definition: GpuLaser.hh:273
bool isHorizontal
True if the sensor is horizontal only.
Definition: GpuLaser.hh:282
virtual void PostRender()
Post render.
GpuLaserDataIterator< GpuLaser > DataIter
Constant iterator to access laser data.
Definition: GpuLaser.hh:91
Definition: JointMaker.hh:40
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:134
boost::shared_ptr< Scene > ScenePtr
Definition: RenderTypes.hh:82
Forward declarations for the common classes.
Definition: Animation.hh:27