KinectAndCameraCalibration.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package VisionX::Component
19  * @author David Schiebener (schiebener at kit dot edu)
20  * @date 2014
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 
25 
26 #pragma once
27 
28 #include <string>
29 
30 #include <opencv2/opencv.hpp>
31 
32 // VisionX
34 #include <VisionX/interface/components/KinectAndCameraCalibration.h>
35 
36 // IVT
38 
39 #include <Math/Math2d.h>
40 #include <Math/Math3d.h>
41 
42 
43 class CvCalibFilter;
44 class CByteImage;
45 
46 namespace visionx
47 {
48 
51  {
52  public:
55  {
56  defineOptionalProperty<std::string>("CameraImageProviderAdapterName",
57  "Armar3ImageProvider",
58  "Ice Adapter name of the camera image provider");
59  defineOptionalProperty<std::string>("KinectImageProviderAdapterName",
60  "OpenNIPointCloudProvider",
61  "Ice Adapter name of the Kinect image provider");
62  defineOptionalProperty<int>(
63  "NumberOfImages", 20, "Number of images used for the calibration");
64  defineOptionalProperty<int>(
65  "WaitingIntervalBetweenImages", 500, "Waiting time between captured images, in ms");
66  defineOptionalProperty<int>(
67  "NumberOfRows", 5, "Number of rows on the calibration pattern");
68  defineOptionalProperty<int>(
69  "NumberOfColumns", 5, "Number of columns on the calibration pattern");
70  defineOptionalProperty<double>(
71  "PatternSquareSize", 30.0, "Size of the squares on the calibration pattern");
72  defineOptionalProperty<std::string>(
73  "OutputFileName", "cameras.txt", "Path to the file for saving the calibration");
74  }
75  };
76 
77  /**
78  * KinectAndCameraCalibration executes the calibration for the left camera of the stereo and kinect rgb camera.
79  * To this end, it gives you the pose of the left camera based on the kinect frame with saving the file including calibration data.
80  *
81  * \componentproperties
82  * \prop VisionX.KinectAndCameraCalibration.CameraImageProviderAdapterName: Ice Adapter name of the camera image provider.
83  * \prop VisionX.KinectAndCameraCalibration.KinectImageProviderAdapterName: Ice Adapter name of the Kinect image provider.
84  * \prop VisionX.KinectAndCameraCalibration.NumberOfImages: Number of images used for the calibration.
85  * \prop VisionX.KinectAndCameraCalibration.WaitingIntervalBetweenImages: Waiting time between captured images, in ms.
86  * \prop VisionX.KinectAndCameraCalibration.NumberOfRows: Number of rows on the calibration pattern.
87  * \prop VisionX.KinectAndCameraCalibration.NumberOfColumns: Number of columns on the calibration pattern.
88  * \prop VisionX.KinectAndCameraCalibration.PatternSquareSize: Size of the squares on the calibration pattern.
89  * \prop VisionX.KinectAndCameraCalibration.OutputFileName: Path to the file for saving the calibration.
90  */
91 
93  virtual public visionx::ImageProcessor,
94  virtual public visionx::KinectAndCameraCalibrationInterface
95  {
96  public:
97  /**
98  * @see Component::getDefaultName()
99  */
100  std::string
101  getDefaultName() const override
102  {
103  return "KinectAndCameraCalibration";
104  }
105 
106  /**
107  * ice related functions (todo: put comments)
108  */
109  void startCalibration(const ::Ice::Current& c = Ice::emptyCurrent) override;
110  void stopCalibration(const ::Ice::Current& c = Ice::emptyCurrent) override;
111  visionx::KinectPoseCalibration
112  getCalibrationParameters(const ::Ice::Current& c = Ice::emptyCurrent) override;
113 
114 
115  protected:
116  // inherited from VisionComponent
117  void onInitImageProcessor() override;
118  void onConnectImageProcessor() override;
119  void onExitImageProcessor() override;
120 
121  void process() override;
122 
123  /**
124  * @see PropertyUser::createPropertyDefinitions()
125  */
128  {
131  }
132 
133  private:
134  std::string cameraImageProviderName, kinectImageProviderName;
135  ImageProviderInterfacePrx cameraImageProviderPrx, kinectImageProviderPrx;
136  CvCalibFilter* m_pCalibFilter;
137 
138  CByteImage **cameraImages, **kinectImages;
139  int waitingIntervalBetweenImages, desiredNumberOfImages, numberOfCapturedImages;
140  double etalonParams[3];
141 
142  std::string m_sCameraParameterFileName;
143 
144  IceUtil::Time startingTime, timeOfLastCapture;
145  bool finished;
146 
147  bool requested;
148  KinectPoseCalibration result;
149  KinectAndCameraCalibrationListenerPrx listenerPrx;
150  };
151 
152 } // namespace visionx
visionx
ArmarX headers.
Definition: OpenPoseStressTest.h:38
visionx::KinectAndCameraCalibration::startCalibration
void startCalibration(const ::Ice::Current &c=Ice::emptyCurrent) override
ice related functions (todo: put comments)
Definition: KinectAndCameraCalibration.cpp:240
visionx::ImageProcessor
The ImageProcessor class provides an interface for access to ImageProviders via Ice and shared memory...
Definition: ImageProcessor.h:98
visionx::KinectAndCameraCalibration::onExitImageProcessor
void onExitImageProcessor() override
Exit the ImapeProcessor component.
Definition: KinectAndCameraCalibration.cpp:113
visionx::KinectAndCameraCalibration::onConnectImageProcessor
void onConnectImageProcessor() override
Implement this method in the ImageProcessor in order execute parts when the component is fully initia...
Definition: KinectAndCameraCalibration.cpp:81
armarx::PropertyDefinitionContainer::prefix
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
Definition: PropertyDefinitionContainer.h:345
visionx::KinectAndCameraCalibration::stopCalibration
void stopCalibration(const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: KinectAndCameraCalibration.cpp:247
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
visionx::KinectAndCameraCalibration
KinectAndCameraCalibration executes the calibration for the left camera of the stereo and kinect rgb ...
Definition: KinectAndCameraCalibration.h:92
visionx::KinectAndCameraCalibration::createPropertyDefinitions
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: KinectAndCameraCalibration.h:127
visionx::KinectAndCameraCalibration::process
void process() override
Process the vision component.
Definition: KinectAndCameraCalibration.cpp:127
ImageProcessor.h
calibfilter.h
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::Component::getConfigIdentifier
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Definition: Component.cpp:79
visionx::KinectAndCameraCalibration::getCalibrationParameters
visionx::KinectPoseCalibration getCalibrationParameters(const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: KinectAndCameraCalibration.cpp:266
visionx::KinectAndCameraCalibration::getDefaultName
std::string getDefaultName() const override
Definition: KinectAndCameraCalibration.h:101
visionx::KinectAndCameraCalibration::onInitImageProcessor
void onInitImageProcessor() override
Setup the vision component.
Definition: KinectAndCameraCalibration.cpp:46
IceUtil::Handle< class PropertyDefinitionContainer >
visionx::ImageProcessorPropertyDefinitions
Definition: ImageProcessor.h:61
visionx::KinectAndCameraCalibrationPropertyDefinitions::KinectAndCameraCalibrationPropertyDefinitions
KinectAndCameraCalibrationPropertyDefinitions(std::string prefix)
Definition: KinectAndCameraCalibration.h:53
armarx::PropertyDefinitionsPtr
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
Definition: forward_declarations.h:35
visionx::KinectAndCameraCalibrationPropertyDefinitions
Definition: KinectAndCameraCalibration.h:49
CvCalibFilter
Definition: calibfilter.h:75