18 #ifndef _GAZEBO_RENDERING_CAMERA_HH_
19 #define _GAZEBO_RENDERING_CAMERA_HH_
21 #include <boost/enable_shared_from_this.hpp>
22 #include <boost/function.hpp>
45 #include "gazebo/msgs/MessageTypes.hh"
80 public boost::enable_shared_from_this<Camera>
87 bool _autoRender =
true);
94 public:
virtual void Load(sdf::ElementPtr _sdf);
97 public:
virtual void Load();
100 public:
virtual void Init();
104 public:
void SetRenderRate(
double _hz);
108 public:
double GetRenderRate()
const;
115 public:
void Render(
bool _force =
false);
120 public:
virtual void PostRender();
127 public:
virtual void Update();
132 public:
virtual void Fini();
136 public:
bool GetInitialized()
const;
141 public:
void SetWindowId(
unsigned int _windowId);
145 public:
unsigned int GetWindowId()
const;
149 public:
void SetScene(
ScenePtr _scene);
161 public:
virtual void SetWorldPose(
const math::Pose &_pose);
185 Ogre::Node::TransformSpace _relativeTo =
186 Ogre::Node::TS_LOCAL);
194 Ogre::Node::TransformSpace _relativeTo =
195 Ogre::Node::TS_LOCAL);
203 Ogre::Node::TransformSpace _relativeTo =
204 Ogre::Node::TS_WORLD);
217 public:
virtual void SetClipDist(
float _near,
float _far);
234 public:
void SetImageSize(
unsigned int _w,
unsigned int _h);
238 public:
void SetImageWidth(
unsigned int _w);
242 public:
void SetImageHeight(
unsigned int _h);
246 public:
virtual unsigned int GetImageWidth()
const;
250 public:
unsigned int GetTextureWidth()
const;
254 public:
virtual unsigned int GetImageHeight()
const;
258 public:
unsigned int GetImageDepth()
const;
262 public: std::string GetImageFormat()
const;
266 public:
unsigned int GetTextureHeight()
const;
270 public:
size_t GetImageByteSize()
const;
277 public:
static size_t GetImageByteSize(
unsigned int _width,
278 unsigned int _height,
279 const std::string &_format);
286 public:
double GetZValue(
int _x,
int _y);
290 public:
double GetNearClip();
294 public:
double GetFarClip();
298 public:
void EnableSaveFrame(
bool _enable);
302 public:
bool GetCaptureData()
const;
306 public:
void SetSaveFramePathname(
const std::string &_pathname);
311 public:
bool SaveFrame(
const std::string &_filename);
315 public: Ogre::Camera *GetOgreCamera()
const;
319 public: Ogre::Viewport *GetViewport()
const;
323 public:
unsigned int GetViewportWidth()
const;
327 public:
unsigned int GetViewportHeight()
const;
339 public:
virtual float GetAvgFPS()
const;
343 public:
virtual unsigned int GetTriangleCount()
const;
347 public:
void SetAspectRatio(
float _ratio);
351 public:
float GetAspectRatio()
const;
355 public:
void SetSceneNode(Ogre::SceneNode *_node);
359 public: Ogre::SceneNode *GetSceneNode()
const;
366 public:
virtual const unsigned char *GetImageData(
unsigned int i = 0);
370 public: std::string GetName()
const;
374 public: std::string GetScopedName()
const;
378 public:
void SetName(
const std::string &_name);
381 public:
void ToggleShowWireframe();
385 public:
void ShowWireframe(
bool _s);
394 public:
void GetCameraToViewportRay(
int _screenx,
int _screeny,
400 public:
void SetCaptureData(
bool _value);
403 public:
void SetCaptureDataOnce();
407 public:
void CreateRenderTexture(
const std::string &_textureName);
419 public:
bool GetWorldPointOnPlane(
int _x,
int _y,
424 public:
virtual void SetRenderTarget(Ogre::RenderTarget *_target);
434 public:
void AttachToVisual(
const std::string &_visualName,
435 bool _inheritOrientation,
436 double _minDist = 0.0,
double _maxDist = 0.0);
446 public:
void AttachToVisual(uint32_t _id,
447 bool _inheritOrientation,
448 double _minDist = 0.0,
double _maxDist = 0.0);
452 public:
void TrackVisual(
const std::string &_visualName);
456 public: Ogre::Texture *GetRenderTexture()
const;
466 public:
template<
typename T>
468 {
return newImageFrame.Connect(_subscriber);}
473 {newImageFrame.Disconnect(_c);}
483 public:
static bool SaveFrame(
const unsigned char *_image,
484 unsigned int _width,
unsigned int _height,
int _depth,
485 const std::string &_format,
486 const std::string &_filename);
497 public:
bool IsVisible(
VisualPtr _visual);
503 public:
bool IsVisible(
const std::string &_visualName);
506 public:
bool IsAnimating()
const;
512 public:
virtual bool MoveToPosition(
const math::Pose &_pose,
522 public:
bool MoveToPositions(
const std::vector<math::Pose> &_pts,
524 boost::function<
void()> _onComplete =
NULL);
528 public: std::string GetScreenshotPath()
const;
539 public:
virtual bool SetProjectionType(
const std::string &_type);
544 public: std::string GetProjectionType()
const;
547 protected:
virtual void RenderImpl();
550 protected:
void ReadPixelBuffer();
555 protected:
bool TrackVisualImpl(
const std::string &_visualName);
560 protected:
virtual bool TrackVisualImpl(
VisualPtr _visual);
571 protected:
virtual bool AttachToVisualImpl(
const std::string &_name,
572 bool _inheritOrientation,
573 double _minDist = 0,
double _maxDist = 0);
584 protected:
virtual bool AttachToVisualImpl(uint32_t _id,
585 bool _inheritOrientation,
586 double _minDist = 0,
double _maxDist = 0);
597 protected:
virtual bool AttachToVisualImpl(
VisualPtr _visual,
598 bool _inheritOrientation,
599 double _minDist = 0,
double _maxDist = 0);
603 protected: std::string GetFrameFilename();
607 protected:
virtual void AnimationComplete();
610 protected:
virtual void UpdateFOV();
619 private:
void ConvertRGBToBAYER(
unsigned char *_dst,
unsigned char *_src,
620 std::string _format,
int _width,
int _height);
623 private:
void SetClipDist();
628 private:
static int GetOgrePixelFormat(
const std::string &_format);
632 private:
void OnCmdMsg(ConstCameraCmdPtr &_msg);
635 private:
void CreateCamera();
647 protected: sdf::ElementPtr
sdf;
711 unsigned int,
unsigned int,
unsigned int,
int imageHeight
Save image height.
Definition: Camera.hh:686
Basic camera sensor.
Definition: Camera.hh:79
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:147
Ogre::Viewport * viewport
Viewport the ogre camera uses.
Definition: Camera.hh:662
unsigned int saveCount
Number of saved frames.
Definition: Camera.hh:674
Forward declarations for the common classes.
Definition: Animation.hh:33
Encapsulates a position and rotation in three space.
Definition: Pose.hh:37
The Vector3 class represents the generic vector containing 3 elements.
Definition: Vector3.hh:39
event::EventT< void(const unsigned char *, unsigned int, unsigned int, unsigned int, const std::string &)> newImageFrame
Event triggered when a new frame is generated.
Definition: Camera.hh:712
bool captureData
True to capture frames into an image buffer.
Definition: Camera.hh:695
#define GAZEBO_DEPRECATED(version)
Definition: CommonTypes.hh:47
void DisconnectNewImageFrame(event::ConnectionPtr &_c)
Disconnect from an image frame.
Definition: Camera.hh:472
boost::shared_ptr< Distortion > DistortionPtr
Definition: RenderTypes.hh:187
Ogre::Texture * renderTexture
Texture that receives results from rendering.
Definition: Camera.hh:692
unsigned char * bayerFrameBuffer
Buffer for a bayer image frame.
Definition: Camera.hh:671
bool initialized
True if initialized.
Definition: Camera.hh:721
Ogre::Camera * camera
The OGRE camera.
Definition: Camera.hh:659
Private data for the Camera class.
Definition: CameraPrivate.hh:37
event::ConnectionPtr ConnectNewImageFrame(T _subscriber)
Connect to the new image signal.
Definition: Camera.hh:467
Ogre::SceneNode * sceneNode
Scene node that controls camera position and orientation.
Definition: Camera.hh:665
std::list< msgs::Request > requests
List of requests.
Definition: Camera.hh:718
ScenePtr scene
Pointer to the scene.
Definition: Camera.hh:707
Ogre::RenderTarget * renderTarget
Target that renders frames.
Definition: Camera.hh:689
boost::function< void()> onAnimationComplete
User callback for when an animation completes.
Definition: Camera.hh:730
common::Time lastRenderWallTime
Time the last frame was rendered.
Definition: Camera.hh:704
#define GZ_RENDERING_VISIBLE
Definition: system.hh:241
unsigned int textureHeight
Height of the render texture.
Definition: Camera.hh:656
unsigned char * saveFrameBuffer
Buffer for a single image frame.
Definition: Camera.hh:668
bool captureDataOnce
True to capture a frame once and save to disk.
Definition: Camera.hh:698
A plane and related functions.
Definition: Plane.hh:35
A quaternion class.
Definition: Quaternion.hh:42
bool newData
True if new data is available.
Definition: Camera.hh:701
std::string screenshotPath
Path to saved screenshots.
Definition: Camera.hh:677
unsigned int windowId
ID of the window that the camera is attached to.
Definition: Camera.hh:650
unsigned int textureWidth
Width of the render texture.
Definition: Camera.hh:653
sdf::ElementPtr sdf
Camera's SDF values.
Definition: Camera.hh:647
#define NULL
Definition: CommonTypes.hh:30
int imageFormat
Format for saving images.
Definition: Camera.hh:680
Definition: JointMaker.hh:36
std::string name
Name of the camera.
Definition: Camera.hh:638
std::string scopedName
Scene scoped name of the camera.
Definition: Camera.hh:641
std::vector< event::ConnectionPtr > connections
The camera's event connections.
Definition: Camera.hh:715
boost::shared_ptr< Scene > ScenePtr
Definition: RenderTypes.hh:79
common::Time prevAnimTime
Previous time the camera animation was updated.
Definition: Camera.hh:727
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
A class for event processing.
Definition: Event.hh:178
boost::shared_ptr< Visual > VisualPtr
Definition: RenderTypes.hh:107
Ogre::AnimationState * animState
Animation state, used to animate the camera.
Definition: Camera.hh:724
An angle and related functions.
Definition: Angle.hh:53
int imageWidth
Save image width.
Definition: Camera.hh:683
std::string scopedUniqueName
Scene scoped name of the camera with a unique ID.
Definition: Camera.hh:644
A Time class, can be used to hold wall- or sim-time.
Definition: Time.hh:39