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);
102 public:
virtual void Load();
111 public:
void UpdateCameraIntrinsics(
112 const double _cameraIntrinsicsFx,
const double _cameraIntrinsicsFy,
113 const double _cameraIntrinsicsCx,
const double _cameraIntrinsicsCy,
114 const double _cameraIntrinsicsS);
117 private:
virtual void LoadCameraIntrinsics();
131 public:
static ignition::math::Matrix4d BuildNDCMatrix(
132 const double _left,
const double _right,
133 const double _bottom,
const double _top,
134 const double _near,
const double _far);
150 public:
static ignition::math::Matrix4d BuildPerspectiveMatrix(
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);
175 public:
static ignition::math::Matrix4d BuildProjectionMatrix(
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);
202 public:
static ignition::math::Matrix4d BuildProjectiveMatrix(
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);
210 public:
virtual void Init();
214 public:
void SetRenderRate(
const double _hz);
218 public:
double RenderRate()
const;
225 public:
virtual void Render(
const bool _force =
false);
230 public:
virtual void PostRender();
237 public:
virtual void Update();
242 public:
virtual void Fini();
246 public:
bool Initialized()
const;
251 public:
void SetWindowId(
unsigned int _windowId);
255 public:
unsigned int WindowId()
const;
259 public:
void SetScene(
ScenePtr _scene);
263 public: ignition::math::Vector3d WorldPosition()
const;
267 public: ignition::math::Quaterniond WorldRotation()
const;
271 public:
virtual void SetWorldPose(
const ignition::math::Pose3d &_pose);
275 public: ignition::math::Pose3d WorldPose()
const;
279 public:
void SetWorldPosition(
const ignition::math::Vector3d &_pos);
283 public:
void SetWorldRotation(
const ignition::math::Quaterniond &_quat);
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);
334 public:
void SetImageWidth(
const unsigned int _w);
338 public:
void SetImageHeight(
const unsigned int _h);
342 public:
virtual unsigned int ImageWidth()
const;
346 public:
unsigned int ImageMemorySize()
const;
350 public:
unsigned int TextureWidth()
const;
354 public:
virtual unsigned int ImageHeight()
const;
358 public:
unsigned int ImageDepth()
const;
362 public: std::string ImageFormat()
const;
366 public:
unsigned int TextureHeight()
const;
370 public:
size_t ImageByteSize()
const;
377 public:
static size_t ImageByteSize(
const unsigned int _width,
378 const unsigned int _height,
379 const std::string &_format);
386 public:
double ZValue(
const int _x,
const int _y);
390 public:
double NearClip()
const;
394 public:
double FarClip()
const;
398 public:
void EnableSaveFrame(
const bool _enable);
402 public:
bool CaptureData()
const;
406 public:
void SetSaveFramePathname(
const std::string &_pathname);
411 public:
bool SaveFrame(
const std::string &_filename);
415 public: Ogre::Camera *OgreCamera()
const;
419 public: Ogre::Viewport *OgreViewport()
const;
423 public:
unsigned int ViewportWidth()
const;
427 public:
unsigned int ViewportHeight()
const;
431 public: ignition::math::Vector3d Up()
const;
435 public: ignition::math::Vector3d Right()
const;
439 public:
virtual float AvgFPS()
const;
443 public:
virtual unsigned int TriangleCount()
const;
447 public:
void SetAspectRatio(
float _ratio);
451 public:
float AspectRatio()
const;
455 public:
void SetSceneNode(Ogre::SceneNode *_node);
459 public: Ogre::SceneNode *SceneNode()
const;
466 public:
virtual const unsigned char *ImageData(
const unsigned int i = 0)
471 public: std::string Name()
const;
475 public: std::string ScopedName()
const;
479 public:
void SetName(
const std::string &_name);
482 public:
void ToggleShowWireframe();
486 public:
void ShowWireframe(
const bool _s);
490 public:
void SetCaptureData(
const bool _value);
493 public:
void SetCaptureDataOnce();
508 public:
bool StartVideo(
const std::string &_format,
509 const std::string &_filename =
"");
515 public:
bool StopVideo();
522 public:
bool SaveVideo(
const std::string &_filename);
530 public:
bool ResetVideo();
534 public:
void CreateRenderTexture(
const std::string &_textureName);
546 public:
bool WorldPointOnPlane(
const int _x,
const int _y,
547 const ignition::math::Planed &_plane,
548 ignition::math::Vector3d &_result);
557 public:
virtual void CameraToViewportRay(
const int _screenx,
559 ignition::math::Vector3d &_origin,
560 ignition::math::Vector3d &_dir)
const;
564 public:
virtual void SetRenderTarget(Ogre::RenderTarget *_target);
574 public:
void AttachToVisual(
const std::string &_visualName,
575 const bool _inheritOrientation,
576 const double _minDist = 0.0,
const double _maxDist = 0.0);
586 public:
void AttachToVisual(uint32_t _id,
587 const bool _inheritOrientation,
588 const double _minDist = 0.0,
const double _maxDist = 0.0);
592 public:
void TrackVisual(
const std::string &_visualName);
596 public: Ogre::Texture *RenderTexture()
const;
600 public: ignition::math::Vector3d Direction()
const;
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);
631 public:
bool IsVisible(
VisualPtr _visual);
637 public:
bool IsVisible(
const std::string &_visualName);
640 public:
bool IsAnimating()
const;
646 public:
virtual bool MoveToPosition(
const ignition::math::Pose3d &_pose,
656 public:
bool MoveToPositions(
657 const std::vector<ignition::math::Pose3d> &_pts,
659 std::function<
void()> _onComplete =
NULL);
663 public: std::string ScreenshotPath()
const;
674 public:
virtual bool SetProjectionType(
const std::string &_type);
679 public: std::string ProjectionType()
const;
684 public:
virtual bool SetBackgroundColor(
685 const ignition::math::Color &_color);
689 public: ignition::math::Matrix4d ProjectionMatrix()
const;
694 public:
virtual ignition::math::Vector2i Project(
695 const ignition::math::Vector3d &_pt)
const;
704 public:
bool TrackIsStatic()
const;
710 public:
void SetTrackIsStatic(
const bool _isStatic);
716 public:
bool TrackUseModelFrame()
const;
723 public:
void SetTrackUseModelFrame(
const bool _useModelFrame);
728 public: ignition::math::Vector3d TrackPosition()
const;
733 public:
void SetTrackPosition(
const ignition::math::Vector3d &_pos);
738 public:
double TrackMinDistance()
const;
743 public:
double TrackMaxDistance()
const;
749 public:
void SetTrackMinDistance(
const double _dist);
755 public:
void SetTrackMaxDistance(
const double _dist);
762 public:
bool TrackInheritYaw()
const;
769 public:
void SetTrackInheritYaw(
const bool _inheritYaw);
772 protected:
virtual void RenderImpl();
775 protected:
void ReadPixelBuffer();
780 protected:
bool TrackVisualImpl(
const std::string &_visualName);
785 protected:
virtual bool TrackVisualImpl(
VisualPtr _visual);
796 protected:
virtual bool AttachToVisualImpl(
const std::string &_name,
797 const bool _inheritOrientation,
798 const double _minDist = 0,
const double _maxDist = 0);
809 protected:
virtual bool AttachToVisualImpl(uint32_t _id,
810 const bool _inheritOrientation,
811 const double _minDist = 0,
const double _maxDist = 0);
822 protected:
virtual bool AttachToVisualImpl(
VisualPtr _visual,
823 const bool _inheritOrientation,
824 const double _minDist = 0,
const double _maxDist = 0);
828 protected: std::string FrameFilename();
832 protected:
virtual void AnimationComplete();
835 protected:
virtual void UpdateFOV();
838 protected:
virtual void SetClipDist();
844 protected:
static double LimitFOV(
const double _fov);
852 protected:
virtual void SetFixedYawAxis(
const bool _useFixed,
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;
Basic camera sensor.
Definition: Camera.hh:84
common::Time lastRenderWallTime
Time the last frame was rendered.
Definition: Camera.hh:955
ReferenceFrame
Frame of reference.
Definition: RenderTypes.hh:244
bool initialized
True if initialized.
Definition: Camera.hh:972
bool cameraUsingIntrinsics
Flag for signaling the usage of camera intrinsics within OGRE.
Definition: Camera.hh:907
Ogre::Texture * renderTexture
Texture that receives results from rendering.
Definition: Camera.hh:943
Forward declarations for the common classes.
Definition: Animation.hh:26
boost::shared_ptr< Distortion > DistortionPtr
Definition: RenderTypes.hh:198
std::string scopedUniqueName
Scene scoped name of the camera with a unique ID.
Definition: Camera.hh:886
ignition::math::Matrix4d cameraProjectiveMatrix
Camera projective matrix.
Definition: Camera.hh:904
unsigned char * saveFrameBuffer
Buffer for a single image frame.
Definition: Camera.hh:919
unsigned char * bayerFrameBuffer
Buffer for a bayer image frame.
Definition: Camera.hh:922
std::string screenshotPath
Path to saved screenshots.
Definition: Camera.hh:928
bool captureDataOnce
True to capture a frame once and save to disk.
Definition: Camera.hh:949
bool captureData
True to capture frames into an image buffer.
Definition: Camera.hh:946
sdf::ElementPtr sdf
Camera's SDF values.
Definition: Camera.hh:889
rendering
Definition: RenderEngine.hh:31
Ogre::RenderTarget * renderTarget
Target that renders frames.
Definition: Camera.hh:940
Ogre::SceneNode * sceneNode
Scene node that controls camera position and orientation.
Definition: Camera.hh:916
Local frame.
Definition: RenderTypes.hh:247
std::vector< event::ConnectionPtr > connections
The camera's event connections.
Definition: Camera.hh:966
Ogre::Viewport * viewport
Viewport the ogre camera uses.
Definition: Camera.hh:910
boost::shared_ptr< Scene > ScenePtr
Definition: RenderTypes.hh:82
int imageWidth
Save image width.
Definition: Camera.hh:934
bool newData
True if new data is available.
Definition: Camera.hh:952
unsigned int windowId
ID of the window that the camera is attached to.
Definition: Camera.hh:892
common::Time prevAnimTime
Previous time the camera animation was updated.
Definition: Camera.hh:978
std::string scopedName
Scene scoped name of the camera.
Definition: Camera.hh:883
ScenePtr scene
Pointer to the scene.
Definition: Camera.hh:958
unsigned int saveCount
Number of saved frames.
Definition: Camera.hh:925
std::list< msgs::Request > requests
List of requests.
Definition: Camera.hh:969
unsigned int textureHeight
Height of the render texture.
Definition: Camera.hh:898
int imageHeight
Save image height.
Definition: Camera.hh:937
World frame.
Definition: RenderTypes.hh:253
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:134
std::function< void()> onAnimationComplete
User callback for when an animation completes.
Definition: Camera.hh:981
#define NULL
Definition: CommonTypes.hh:31
Definition: JointMaker.hh:39
int imageFormat
Format for saving images.
Definition: Camera.hh:931
unsigned int textureWidth
Width of the render texture.
Definition: Camera.hh:895
std::shared_ptr< Visual > VisualPtr
Definition: RenderTypes.hh:114
std::string name
Name of the camera.
Definition: Camera.hh:880
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
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
A class for event processing.
Definition: Event.hh:97
Ogre::AnimationState * animState
Animation state, used to animate the camera.
Definition: Camera.hh:975
A Time class, can be used to hold wall- or sim-time.
Definition: Time.hh:47
Ogre::Camera * camera
The OGRE camera.
Definition: Camera.hh:901