KLGImageProvider.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package VisionX::ArmarXObjects::KLGImageProvider
17  * @author Markus Grotz ( markus dot grotz at kit dot edu )
18  * @date 2018
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 
26 #include <Eigen/Core>
27 
28 #include <opencv2/opencv.hpp>
29 
31 #include <ArmarXCore/interface/observers/ObserverInterface.h>
32 
33 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
34 
36 #include <VisionX/interface/components/RGBDImageProvider.h>
39 
40 namespace armarx
41 {
42  /**
43  * @class KLGImageProviderPropertyDefinitions
44  * @brief
45  */
48  {
49  public:
52  {
53  defineOptionalProperty<std::string>("DebugObserverName",
54  "DebugObserver",
55  "Name of the topic the DebugObserver listens on");
56  defineOptionalProperty<std::string>(
57  "DebugDrawerTopicName", "DebugDrawerUpdates", "Name of the DebugDrawerTopic");
58 
59  defineOptionalProperty<std::string>(
60  "FileName", "VisionX/examples/point_clouds/", "path to the klg log file");
61  defineOptionalProperty<bool>("Rewind", true, "loop through the point clouds");
62 
63  defineOptionalProperty<Eigen::Vector2i>("Dimensions", Eigen::Vector2i(640, 480), "")
64  .map("320x240", Eigen::Vector2i(320, 240))
65  .map("640x480", Eigen::Vector2i(640, 480))
66  .map("320x240", Eigen::Vector2i(320, 240))
67  .map("640x480", Eigen::Vector2i(640, 480))
68  .map("800x600", Eigen::Vector2i(800, 600))
69  .map("768x576", Eigen::Vector2i(768, 576))
70  .map("1024x768", Eigen::Vector2i(1024, 768))
71  .map("1024x1024", Eigen::Vector2i(1024, 1024))
72  .map("1280x960", Eigen::Vector2i(1280, 960))
73  .map("1600x1200", Eigen::Vector2i(1600, 1200));
74 
75 
76  defineOptionalProperty<std::string>(
77  "ReferenceFrameName", "DepthCamera", "Optional reference frame name.");
78  }
79  };
80 
81  /**
82  * @defgroup Component-KLGImageProvider KLGImageProvider
83  * @ingroup VisionX-Components
84  * A description of the component KLGImageProvider.
85  *
86  * @class KLGImageProvider
87  * @ingroup Component-KLGImageProvider
88  * @brief Brief description of class KLGImageProvider.
89  *
90  * Adds support for the klg format used by ElasticFusion
91  */
93  virtual public visionx::CapturingImageProvider,
94  virtual public visionx::RGBDCapturingImageProviderInterface
95  {
96  public:
97  /**
98  * @see armarx::ManagedIceObject::getDefaultName()
99  */
100  std::string
101  getDefaultName() const override
102  {
103  return "KLGImageProvider";
104  }
105 
106  visionx::StereoCalibration
107  getStereoCalibration(const Ice::Current& c = Ice::emptyCurrent) override
108  {
109  visionx::StereoCalibration stereoCalibration;
110 
111  Eigen::Vector2i dimensions = getProperty<Eigen::Vector2i>("Dimensions");
112 
113  visionx::CameraParameters RGBCameraIntrinsics;
114  RGBCameraIntrinsics.distortion = {0, 0, 0};
115  RGBCameraIntrinsics.focalLength = {525.0, 525.0};
116  RGBCameraIntrinsics.height = dimensions(1);
117  RGBCameraIntrinsics.principalPoint = {dimensions(0) / 2.0f, dimensions(1) / 2.0f};
118  RGBCameraIntrinsics.rotation =
120  RGBCameraIntrinsics.translation =
121  visionx::tools::convertEigenVecToVisionX(Eigen::Vector3f::Zero());
122  RGBCameraIntrinsics.width = dimensions(0);
123 
124  visionx::CameraParameters DepthCameraIntrinsics;
125  DepthCameraIntrinsics.distortion = {0, 0, 0};
126  DepthCameraIntrinsics.focalLength = {525.0, 525.0};
127  DepthCameraIntrinsics.height = dimensions(1);
128  DepthCameraIntrinsics.principalPoint = {dimensions(0) / 2.0f, dimensions(1) / 2.0f};
129  DepthCameraIntrinsics.rotation =
131  DepthCameraIntrinsics.translation = {0.075, 0, 0};
132  DepthCameraIntrinsics.width = dimensions(0);
133 
134 
135  stereoCalibration.calibrationLeft = visionx::tools::createDefaultMonocularCalibration();
136  stereoCalibration.calibrationRight =
138  stereoCalibration.calibrationLeft.cameraParam = RGBCameraIntrinsics;
139  stereoCalibration.calibrationRight.cameraParam = DepthCameraIntrinsics;
140  stereoCalibration.rectificationHomographyLeft =
141  visionx::tools::convertEigenMatToVisionX(Eigen::Matrix3f::Zero());
142  stereoCalibration.rectificationHomographyRight =
143  visionx::tools::convertEigenMatToVisionX(Eigen::Matrix3f::Zero());
144 
145 
146  return stereoCalibration;
147  }
148 
149  bool
150  getImagesAreUndistorted(const Ice::Current& c = Ice::emptyCurrent) override
151  {
152  return true;
153  }
154 
155  std::string
156  getReferenceFrame(const Ice::Current& c = Ice::emptyCurrent) override
157  {
158  return getProperty<std::string>("ReferenceFrameName");
159  }
160 
161  protected:
162  void onInitCapturingImageProvider() override;
163 
164  void onExitCapturingImageProvider() override;
165 
166  void onStartCapture(float frameRate) override;
167 
168  void onStopCapture() override;
169 
170  bool capture(void** ppImageBuffers) override;
171 
172 
173  /**
174  * @see PropertyUser::createPropertyDefinitions()
175  */
177 
178  private:
179  DebugDrawerInterfacePrx debugDrawer;
180  DebugObserverInterfacePrx debugObserver;
181 
182  CByteImage** rgbImages;
183 
184  int32_t currentFrame;
185  int32_t totalFrames;
186  FILE* fp;
187  bool doRewind;
188 
189  cv::Mat depthBuffer;
190  };
191 } // namespace armarx
visionx
ArmarX headers.
Definition: OpenPoseStressTest.h:38
visionx::CapturingImageProvider::frameRate
float frameRate
Required frame rate.
Definition: CapturingImageProvider.h:201
armarx::KLGImageProvider::onInitCapturingImageProvider
void onInitCapturingImageProvider() override
This is called when the Component::onInitComponent() is called.
Definition: KLGImageProvider.cpp:39
armarx::PropertyDefinitionContainer::prefix
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
Definition: PropertyDefinitionContainer.h:345
armarx::KLGImageProvider
Brief description of class KLGImageProvider.
Definition: KLGImageProvider.h:92
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::KLGImageProvider::onStartCapture
void onStartCapture(float frameRate) override
This is called when the image provider capturing has been started.
Definition: KLGImageProvider.cpp:83
armarx::KLGImageProvider::getReferenceFrame
std::string getReferenceFrame(const Ice::Current &c=Ice::emptyCurrent) override
Definition: KLGImageProvider.h:156
armarx::KLGImageProvider::onExitCapturingImageProvider
void onExitCapturingImageProvider() override
This is called when the Component::onExitComponent() setup is called.
Definition: KLGImageProvider.cpp:189
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
visionx::tools::convertEigenVecToVisionX
visionx::types::Vec convertEigenVecToVisionX(Eigen::VectorXf v)
Definition: TypeMapping.cpp:662
armarx::KLGImageProvider::createPropertyDefinitions
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: KLGImageProvider.cpp:202
armarx::KLGImageProviderPropertyDefinitions
Definition: KLGImageProvider.h:46
visionx::CapturingImageProvider::capture
virtual void capture()
Definition: CapturingImageProvider.cpp:109
visionx::CapturingImageProvider
The CapturingImageProvider provides a callback function to trigger the capturing of images with diffe...
Definition: CapturingImageProvider.h:52
armarx::KLGImageProvider::getDefaultName
std::string getDefaultName() const override
Definition: KLGImageProvider.h:101
Component.h
armarx::KLGImageProvider::getImagesAreUndistorted
bool getImagesAreUndistorted(const Ice::Current &c=Ice::emptyCurrent) override
Definition: KLGImageProvider.h:150
CapturingImageProvider.h
armarx::KLGImageProvider::onStopCapture
void onStopCapture() override
This is called when the image provider capturing has been stopped.
Definition: KLGImageProvider.cpp:98
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::KLGImageProviderPropertyDefinitions::KLGImageProviderPropertyDefinitions
KLGImageProviderPropertyDefinitions(std::string prefix)
Definition: KLGImageProvider.h:50
visionx::tools::convertEigenMatToVisionX
visionx::types::Mat convertEigenMatToVisionX(Eigen::MatrixXf m)
Definition: TypeMapping.cpp:686
IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface >
visionx::CapturingImageProviderPropertyDefinitions
Definition: CapturingImageProvider.h:37
ImageUtil.h
armarx::KLGImageProvider::getStereoCalibration
visionx::StereoCalibration getStereoCalibration(const Ice::Current &c=Ice::emptyCurrent) override
Definition: KLGImageProvider.h:107
TypeMapping.h
visionx::tools::createDefaultMonocularCalibration
MonocularCalibration createDefaultMonocularCalibration()
Creates a MonocularCalibration with all parameters set to a neutral value.
Definition: ImageUtil.cpp:265
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
visionx::CapturingImageProviderPropertyDefinitions::CapturingImageProviderPropertyDefinitions
CapturingImageProviderPropertyDefinitions(std::string prefix)
Definition: CapturingImageProvider.h:40