28 #include <pcl/io/pcd_io.h>
35 #include <Calibration/Calibration.h>
36 #include <Image/ImageProcessor.h>
46 KinectV1PointCloudProvider::onInitComponent()
51 ImageProvider::onInitComponent();
52 CapturingPointCloudProvider::onInitComponent();
56 KinectV1PointCloudProvider::onConnectComponent()
61 ImageProvider::onConnectComponent();
62 CapturingPointCloudProvider::onConnectComponent();
66 KinectV1PointCloudProvider::onDisconnectComponent()
70 captureEnabled =
false;
71 ImageProvider::onDisconnectComponent();
72 CapturingPointCloudProvider::onDisconnectComponent();
76 KinectV1PointCloudProvider::onExitComponent()
81 ImageProvider::onExitComponent();
82 CapturingPointCloudProvider::onExitComponent();
87 KinectV1PointCloudProvider::onInitCapturingPointCloudProvider()
102 KinectV1PointCloudProvider::onStartCapture(
float frameRate)
104 device_->startVideo();
105 device_->startDepth();
109 KinectV1PointCloudProvider::onStopCapture()
112 ARMARX_INFO <<
"Stopping KinectV1 Grabber Interface";
113 device_->stopVideo();
114 device_->stopDepth();
115 ARMARX_INFO <<
"Stopped KinectV1 Grabber Interface";
119 KinectV1PointCloudProvider::onExitCapturingPointCloudProvider()
124 delete rgbImages_[0];
125 delete rgbImages_[1];
131 KinectV1PointCloudProvider::onInitImageProvider()
137 rgbImages_ =
new CByteImage*[2];
138 size_ = width_ * height_;
139 rgbImages_[0] =
new CByteImage(width_, height_, CByteImage::eRGB24);
140 rgbImages_[1] =
new CByteImage(width_, height_, CByteImage::eRGB24);
141 ::ImageProcessor::Zero(rgbImages_[0]);
142 ::ImageProcessor::Zero(rgbImages_[1]);
143 Eigen::Vector2i dimensions = Eigen::Vector2i(width_, height_);
144 setImageFormat(visionx::ImageDimension(dimensions(0), dimensions(1)), visionx::eRgb);
149 KinectV1PointCloudProvider::doCapture()
151 static std::vector<uint8_t> rgb(size_ * 3);
152 static std::vector<uint16_t> depth(size_);
154 if (!device_->getRGB(rgb) || device_->getDepth(depth))
158 pcl::PointCloud<PointT>::Ptr outputCloud =
159 pcl::PointCloud<PointT>::Ptr(
new pcl::PointCloud<PointT>());
160 outputCloud->resize(size_);
161 for (
int i = 0; i < size_; i++)
165 for (
int j = 0; j < 3; j++)
167 rgbImages_[0]->pixels[
index + j] = rgb[
index + j];
170 rgbImages_[1]->pixels[
index + 0],
171 rgbImages_[1]->pixels[
index + 1],
172 rgbImages_[1]->pixels[
index + 2],
180 outputCloud->points[i].x = (i % width_ - cx_ + 0.5) * depth[i] / fx_;
181 outputCloud->points[i].y = (i / width_ - cy_ + 0.5) * depth[i] / fy_;
182 outputCloud->points[i].z = depth[i];
183 outputCloud->points[i].r = rgb[
index];
184 outputCloud->points[i].g = rgb[
index + 1];
185 outputCloud->points[i].b = rgb[
index + 2];
188 outputCloud->header.stamp = ts.toMicroSeconds();
189 providePointCloud<PointT>(outputCloud);
190 provideImages(rgbImages_, ts);
195 KinectV1PointCloudProvider::createPropertyDefinitions()
202 KinectV1PointCloudProvider::getStereoCalibration(
const Ice::Current&
c)