17#ifndef GAZEBO_RENDERING_CAMERA_HH_
18#define GAZEBO_RENDERING_CAMERA_HH_
23#include <boost/enable_shared_from_this.hpp>
30#include <ignition/math/Angle.hh>
31#include <ignition/math/Color.hh>
32#include <ignition/math/Matrix4.hh>
33#include <ignition/math/Pose3.hh>
34#include <ignition/math/Quaternion.hh>
35#include <ignition/math/Vector2.hh>
36#include <ignition/math/Vector3.hh>
51#include "gazebo/msgs/MessageTypes.hh"
85 public boost::enable_shared_from_this<Camera>
92 bool _autoRender =
true);
99 public:
virtual void Load(sdf::ElementPtr _sdf);
112 const double _cameraIntrinsicsFx,
const double _cameraIntrinsicsFy,
113 const double _cameraIntrinsicsCx,
const double _cameraIntrinsicsCy,
114 const double _cameraIntrinsicsS);
117 private:
virtual void LoadCameraIntrinsics();
132 const double _left,
const double _right,
133 const double _bottom,
const double _top,
134 const double _near,
const double _far);
151 const double _intrinsicsFx,
const double _intrinsicsFy,
152 const double _intrinsicsCx,
const double _intrinsicsCy,
153 const double _intrinsicsS,
154 const double _clipNear,
const double _clipFar);
176 const double _imageWidth,
const double _imageHeight,
177 const double _intrinsicsFx,
const double _intrinsicsFy,
178 const double _intrinsicsCx,
const double _intrinsicsCy,
179 const double _intrinsicsS,
180 const double _clipNear,
const double _clipFar);
203 const double _imageWidth,
const double _imageHeight,
204 const double _intrinsicsFx,
const double _intrinsicsFy,
205 const double _intrinsicsCx,
const double _intrinsicsCy,
206 const double _intrinsicsS,
207 const double _clipNear,
const double _clipFar);
225 public:
virtual void Render(
const bool _force =
false);
271 public:
virtual void SetWorldPose(
const ignition::math::Pose3d &_pose);
287 public:
void Translate(
const ignition::math::Vector3d &_direction);
293 public:
void Roll(
const ignition::math::Angle &_angle,
300 public:
void Pitch(
const ignition::math::Angle &_angle,
307 public:
void Yaw(
const ignition::math::Angle &_angle,
313 public:
virtual void SetClipDist(
const float _near,
const float _far);
317 public:
void SetHFOV(
const ignition::math::Angle &_angle);
321 public: ignition::math::Angle
HFOV()
const;
325 public: ignition::math::Angle
VFOV()
const;
330 public:
void SetImageSize(
const unsigned int _w,
const unsigned int _h);
378 const unsigned int _height,
379 const std::string &_format);
386 public:
double ZValue(
const int _x,
const int _y);
431 public: ignition::math::Vector3d
Up()
const;
435 public: ignition::math::Vector3d
Right()
const;
466 public:
virtual const unsigned char *
ImageData(
const unsigned int i = 0)
471 public: std::string
Name()
const;
479 public:
void SetName(
const std::string &_name);
509 const std::string &_filename =
"");
547 const ignition::math::Planed &_plane,
548 ignition::math::Vector3d &_result);
559 ignition::math::Vector3d &_origin,
560 ignition::math::Vector3d &_dir)
const;
575 const bool _inheritOrientation,
576 const double _minDist = 0.0,
const double _maxDist = 0.0);
587 const bool _inheritOrientation,
588 const double _minDist = 0.0,
const double _maxDist = 0.0);
607 std::function<
void (
const unsigned char *,
unsigned int,
unsigned int,
608 unsigned int,
const std::string &)> _subscriber);
618 public:
static bool SaveFrame(
const unsigned char *_image,
619 const unsigned int _width,
const unsigned int _height,
620 const int _depth,
const std::string &_format,
621 const std::string &_filename);
657 const std::vector<ignition::math::Pose3d> &_pts,
659 std::function<
void()> _onComplete =
NULL);
685 const ignition::math::Color &_color);
694 public:
virtual ignition::math::Vector2i
Project(
695 const ignition::math::Vector3d &_pt)
const;
797 const bool _inheritOrientation,
798 const double _minDist = 0,
const double _maxDist = 0);
810 const bool _inheritOrientation,
811 const double _minDist = 0,
const double _maxDist = 0);
823 const bool _inheritOrientation,
824 const double _minDist = 0,
const double _maxDist = 0);
844 protected:
static double LimitFOV(
const double _fov);
853 const ignition::math::Vector3d &_fixedAxis =
854 ignition::math::Vector3d::UnitY);
863 private:
void ConvertRGBToBAYER(
unsigned char *_dst,
864 const unsigned char *_src,
const std::string &_format,
865 const int _width,
const int _height);
870 private:
static int OgrePixelFormat(
const std::string &_format);
874 private:
void OnCmdMsg(ConstCameraCmdPtr &_msg);
877 private:
void CreateCamera();
889 protected: sdf::ElementPtr
sdf;
913 protected: Ogre::SceneNode *cameraNode =
nullptr;
962 unsigned int,
unsigned int,
unsigned int,
985 private: std::unique_ptr<CameraPrivate> dataPtr;
#define NULL
Definition CommonTypes.hh:31
rendering
Definition RenderEngine.hh:31
A Time class, can be used to hold wall- or sim-time.
Definition Time.hh:48
A class for event processing.
Definition Event.hh:98
Basic camera sensor.
Definition Camera.hh:86
std::string screenshotPath
Path to saved screenshots.
Definition Camera.hh:928
double TrackMaxDistance() const
Return the maximum distance to the tracked visual.
double FarClip() const
Get the far clip distance.
void SetTrackPosition(const ignition::math::Vector3d &_pos)
Set the position of the camera when tracking a visual.
ignition::math::Vector3d Up() const
Get the viewport up vector.
Ogre::Viewport * viewport
Viewport the ogre camera uses.
Definition Camera.hh:910
std::string ScreenshotPath() const
Get the path to saved screenshots.
virtual void UpdateFOV()
Update the camera's field of view.
std::string ImageFormat() const
Get the string representation of the image format.
double TrackMinDistance() const
Return the minimum distance to the tracked visual.
bool IsAnimating() const
Return true if the camera is moving due to an animation.
bool TrackUseModelFrame() const
Get whether this camera's position is relative to tracked models.
float AspectRatio() const
Get the apect ratio.
void SetName(const std::string &_name)
Set the camera's name.
virtual unsigned int ImageHeight() const
Get the height of the image.
unsigned int TextureWidth() const
Get the width of the off-screen render texture.
Ogre::RenderTarget * renderTarget
Target that renders frames.
Definition Camera.hh:940
unsigned int windowId
ID of the window that the camera is attached to.
Definition Camera.hh:892
void ShowWireframe(const bool _s)
Set whether to view the world in wireframe.
virtual bool AttachToVisualImpl(uint32_t _id, const bool _inheritOrientation, const double _minDist=0, const double _maxDist=0)
Attach the camera to a scene node.
virtual bool TrackVisualImpl(VisualPtr _visual)
Set the camera to track a scene node.
Ogre::Viewport * OgreViewport() const
Get a pointer to the Ogre::Viewport.
bool StopVideo()
Turn off video recording.
common::Time lastRenderWallTime
Time the last frame was rendered.
Definition Camera.hh:955
bool TrackVisualImpl(const std::string &_visualName)
Implementation of the Camera::TrackVisual call.
void SetHFOV(const ignition::math::Angle &_angle)
Set the camera FOV (horizontal)
bool cameraUsingIntrinsics
Flag for signaling the usage of camera intrinsics within OGRE.
Definition Camera.hh:907
bool captureData
True to capture frames into an image buffer.
Definition Camera.hh:946
unsigned int ViewportHeight() const
Get the viewport height in pixels.
unsigned int WindowId() const
Get the ID of the window this camera is rendering into.
Ogre::SceneNode * cameraNode
Scene node that the camera is attached to.
Definition Camera.hh:913
static bool SaveFrame(const unsigned char *_image, const unsigned int _width, const unsigned int _height, const int _depth, const std::string &_format, const std::string &_filename)
Save a frame using an image buffer.
std::string ScopedName() const
Get the camera's scoped name (scene_name::camera_name)
virtual void Fini()
Finalize the camera.
static ignition::math::Matrix4d BuildNDCMatrix(const double _left, const double _right, const double _bottom, const double _top, const double _near, const double _far)
Computes the OpenGL NDC matrix.
virtual unsigned int ImageWidth() const
Get the width of the image.
virtual bool MoveToPosition(const ignition::math::Pose3d &_pose, const double _time)
Move the camera to a position (this is an animated motion).
void AttachToVisual(const std::string &_visualName, const bool _inheritOrientation, const double _minDist=0.0, const double _maxDist=0.0)
Attach the camera to a scene node.
void Translate(const ignition::math::Vector3d &_direction)
Translate the camera.
void ToggleShowWireframe()
Toggle whether to view the world in wireframe.
void CreateRenderTexture(const std::string &_textureName)
Set the render target.
std::vector< event::ConnectionPtr > connections
The camera's event connections.
Definition Camera.hh:966
virtual void SetClipDist(const float _near, const float _far)
Set the clip distances.
common::Time LastRenderWallTime() const
Get the last time the camera was rendered.
void SetTrackMinDistance(const double _dist)
Set the minimum distance between the camera and tracked visual.
void ReadPixelBuffer()
Read image data from pixel buffer.
virtual void Init()
Initialize the camera.
unsigned int ImageMemorySize() const
Get the memory size of this image.
std::string Name() const
Get the camera's unscoped name.
ScenePtr scene
Pointer to the scene.
Definition Camera.hh:958
void Yaw(const ignition::math::Angle &_angle, ReferenceFrame _relativeTo=RF_WORLD)
Rotate the camera around the z-axis.
void SetWindowId(unsigned int _windowId)
virtual void SetClipDist()
Set the clip distance based on stored SDF values.
unsigned int ImageDepth() const
Get the depth of the image in bytes per pixel.
bool SaveVideo(const std::string &_filename)
Save the last encoded video to disk.
virtual void RenderImpl()
Implementation of the render call.
Ogre::Texture * renderTexture
Texture that receives results from rendering.
Definition Camera.hh:943
virtual bool AttachToVisualImpl(const std::string &_name, const bool _inheritOrientation, const double _minDist=0, const double _maxDist=0)
Attach the camera to a scene node.
unsigned char * saveFrameBuffer
Buffer for a single image frame.
Definition Camera.hh:919
Ogre::SceneNode * SceneNode() const
Get the camera's scene node.
virtual void SetWorldPose(const ignition::math::Pose3d &_pose)
Set the global pose of the camera.
event::ConnectionPtr ConnectNewImageFrame(std::function< void(const unsigned char *, unsigned int, unsigned int, unsigned int, const std::string &)> _subscriber)
Connect to the new image signal.
void SetRenderRate(const double _hz)
Set the render Hz rate.
void AttachToVisual(uint32_t _id, const bool _inheritOrientation, const double _minDist=0.0, const double _maxDist=0.0)
Attach the camera to a scene node.
virtual bool SetBackgroundColor(const ignition::math::Color &_color)
Set background color for viewport (if viewport is not null)
void SetScene(ScenePtr _scene)
Set the scene this camera is viewing.
virtual void AnimationComplete()
Internal function used to indicate that an animation has completed.
virtual void Load()
Load the camera with default parameters.
void Roll(const ignition::math::Angle &_angle, ReferenceFrame _relativeTo=RF_LOCAL)
Rotate the camera around the x-axis.
unsigned int textureWidth
Width of the render texture.
Definition Camera.hh:895
void SetTrackMaxDistance(const double _dist)
Set the maximum distance between the camera and tracked visual.
void SetWorldPosition(const ignition::math::Vector3d &_pos)
Set the world position.
ScenePtr GetScene() const
Get the scene this camera is in.
virtual void SetFixedYawAxis(const bool _useFixed, const ignition::math::Vector3d &_fixedAxis=ignition::math::Vector3d::UnitY)
Tell the camera whether to yaw around its own local Y axis or a fixed axis of choice.
int imageFormat
Format for saving images.
Definition Camera.hh:931
bool MoveToPositions(const std::vector< ignition::math::Pose3d > &_pts, const double _time, std::function< void()> _onComplete=NULL)
Move the camera to a series of poses (this is an animated motion).
virtual unsigned int TriangleCount() const
Get the triangle count.
DistortionPtr LensDistortion() const
Get the distortion model of this camera.
void SetImageWidth(const unsigned int _w)
Set the image height.
virtual const unsigned char * ImageData(const unsigned int i=0) const
Get a pointer to the image data.
Ogre::Texture * RenderTexture() const
Get the render texture.
virtual float AvgFPS() const
Get the average FPS.
double NearClip() const
Get the near clip distance.
void SetImageSize(const unsigned int _w, const unsigned int _h)
Set the image size.
bool StartVideo(const std::string &_format, const std::string &_filename="")
Turn on video recording.
unsigned int textureHeight
Height of the render texture.
Definition Camera.hh:898
void SetWorldRotation(const ignition::math::Quaterniond &_quat)
Set the world orientation.
void SetTrackUseModelFrame(const bool _useModelFrame)
Set whether this camera's position is relative to tracked models.
static double LimitFOV(const double _fov)
Limit field of view taking care of using a valid value for an OGRE camera.
Ogre::Camera * OgreCamera() const
Get a pointer to the ogre camera.
unsigned int TextureHeight() const
Get the height of the off-screen render texture.
ignition::math::Vector3d Right() const
Get the viewport right vector.
virtual ~Camera()
Destructor.
ignition::math::Quaterniond WorldRotation() const
Get the camera's orientation in the world.
bool WorldPointOnPlane(const int _x, const int _y, const ignition::math::Planed &_plane, ignition::math::Vector3d &_result)
Get point on a plane.
size_t ImageByteSize() const
Get the image size in bytes.
virtual void SetRenderTarget(Ogre::RenderTarget *_target)
Set the camera's render target.
std::string FrameFilename()
Get the next frame filename based on SDF parameters.
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:963
std::string name
Name of the camera.
Definition Camera.hh:880
sdf::ElementPtr sdf
Camera's SDF values.
Definition Camera.hh:889
ignition::math::Angle HFOV() const
Get the camera FOV (horizontal)
std::list< msgs::Request > requests
List of requests.
Definition Camera.hh:969
void SetTrackInheritYaw(const bool _inheritYaw)
Set whether this camera inherits the yaw rotation of the tracked model.
unsigned char * bayerFrameBuffer
Buffer for a bayer image frame.
Definition Camera.hh:922
void SetAspectRatio(float _ratio)
Set the aspect ratio.
Ogre::Camera * camera
The OGRE camera.
Definition Camera.hh:901
bool CaptureData() const
Return the value of this->captureData.
int imageHeight
Save image height.
Definition Camera.hh:937
void UpdateCameraIntrinsics(const double _cameraIntrinsicsFx, const double _cameraIntrinsicsFy, const double _cameraIntrinsicsCx, const double _cameraIntrinsicsCy, const double _cameraIntrinsicsS)
Updates the camera intrinsics.
void SetSceneNode(Ogre::SceneNode *_node)
Set the camera's scene node.
virtual void CameraToViewportRay(const int _screenx, const int _screeny, ignition::math::Vector3d &_origin, ignition::math::Vector3d &_dir) const
Get a world space ray as cast from the camera through the viewport.
std::function< void()> onAnimationComplete
User callback for when an animation completes.
Definition Camera.hh:981
unsigned int ViewportWidth() const
Get the viewport width in pixels.
unsigned int saveCount
Number of saved frames.
Definition Camera.hh:925
bool TrackInheritYaw() const
Get whether this camera inherits the yaw rotation of the tracked model.
void SetCaptureDataOnce()
Capture data once and save to disk.
bool TrackIsStatic() const
Get whether this camera is static when tracking a model.
ignition::math::Pose3d WorldPose() const
Get the world pose.
void Pitch(const ignition::math::Angle &_angle, ReferenceFrame _relativeTo=RF_LOCAL)
Rotate the camera around the y-axis.
bool IsVisible(VisualPtr _visual)
Return true if the visual is within the camera's view frustum.
std::string scopedUniqueName
Scene scoped name of the camera with a unique ID.
Definition Camera.hh:886
void SetImageHeight(const unsigned int _h)
Set the image height.
double ZValue(const int _x, const int _y)
Get the Z-buffer value at the given image coordinate.
Ogre::SceneNode * sceneNode
Scene node that controls camera position and orientation.
Definition Camera.hh:916
ignition::math::Matrix4d ProjectionMatrix() const
Return the projection matrix of this camera.
virtual bool SetProjectionType(const std::string &_type)
Set the type of projection used by the camera.
void SetCaptureData(const bool _value)
Set whether to capture data.
common::Time prevAnimTime
Previous time the camera animation was updated.
Definition Camera.hh:978
virtual void Load(sdf::ElementPtr _sdf)
Load the camera with a set of parameters.
Camera(const std::string &_namePrefix, ScenePtr _scene, bool _autoRender=true)
Constructor.
void SetTrackIsStatic(const bool _isStatic)
Set whether this camera is static when tracking a model.
static size_t ImageByteSize(const unsigned int _width, const unsigned int _height, const std::string &_format)
Calculate image byte size base on a few parameters.
ignition::math::Matrix4d cameraProjectiveMatrix
Camera projective matrix.
Definition Camera.hh:904
ignition::math::Angle VFOV() const
Get the camera FOV (vertical)
static ignition::math::Matrix4d BuildProjectiveMatrix(const double _imageWidth, const double _imageHeight, const double _intrinsicsFx, const double _intrinsicsFy, const double _intrinsicsCx, const double _intrinsicsCy, const double _intrinsicsS, const double _clipNear, const double _clipFar)
Computes the OpenGL projective matrix by multiplying the OpenGL Normalized Device Coordinates matrix ...
void EnableSaveFrame(const bool _enable)
Enable or disable saving.
VisualPtr TrackedVisual() const
Get the visual tracked by this camera.
Ogre::AnimationState * animState
Animation state, used to animate the camera.
Definition Camera.hh:975
ignition::math::Vector3d Direction() const
Get the camera's direction vector.
static ignition::math::Matrix4d BuildPerspectiveMatrix(const double _intrinsicsFx, const double _intrinsicsFy, const double _intrinsicsCx, const double _intrinsicsCy, const double _intrinsicsS, const double _clipNear, const double _clipFar)
Computes the OpenGL perspective matrix.
bool ResetVideo()
Reset video recording.
bool Initialized() const
Return true if the camera has been initialized.
void SetSaveFramePathname(const std::string &_pathname)
Set the save frame pathname.
bool SaveFrame(const std::string &_filename)
Save the last frame to disk.
static ignition::math::Matrix4d BuildProjectionMatrix(const double _imageWidth, const double _imageHeight, const double _intrinsicsFx, const double _intrinsicsFy, const double _intrinsicsCx, const double _intrinsicsCy, const double _intrinsicsS, const double _clipNear, const double _clipFar)
Computes the OpenGL projection matrix by multiplying the OpenGL Normalized Device Coordinates matrix ...
std::string scopedName
Scene scoped name of the camera.
Definition Camera.hh:883
bool newData
True if new data is available.
Definition Camera.hh:952
virtual ignition::math::Vector2i Project(const ignition::math::Vector3d &_pt) const
Project 3D world coordinates to 2D screen coordinates.
ignition::math::Vector3d TrackPosition() const
Return the position of the camera when tracking a model.
bool captureDataOnce
True to capture a frame once and save to disk.
Definition Camera.hh:949
bool initialized
True if initialized.
Definition Camera.hh:972
virtual void PostRender()
Post render.
virtual void Render(const bool _force=false)
Render the camera.
int imageWidth
Save image width.
Definition Camera.hh:934
double RenderRate() const
Get the render Hz rate.
std::string ProjectionType() const
Return the projection type as a string.
void TrackVisual(const std::string &_visualName)
Set the camera to track a scene node.
ignition::math::Vector3d WorldPosition() const
Get the camera position in the world.
bool IsVisible(const std::string &_visualName)
Return true if the visual is within the camera's view frustum.
virtual bool AttachToVisualImpl(VisualPtr _visual, const bool _inheritOrientation, const double _minDist=0, const double _maxDist=0)
Attach the camera to a visual.
Definition JointMaker.hh:40
boost::shared_ptr< Connection > ConnectionPtr
Definition CommonTypes.hh:134
std::shared_ptr< Visual > VisualPtr
Definition RenderTypes.hh:114
boost::shared_ptr< Distortion > DistortionPtr
Definition RenderTypes.hh:198
ReferenceFrame
Frame of reference.
Definition RenderTypes.hh:245
@ RF_WORLD
World frame.
Definition RenderTypes.hh:253
@ RF_LOCAL
Local frame.
Definition RenderTypes.hh:247
boost::shared_ptr< Scene > ScenePtr
Definition RenderTypes.hh:82
Forward declarations for the common classes.
Definition Animation.hh:27