RCImageProvider.cpp
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::RCImageProvider
17  * @author Markus Grotz ( markus dot grotz at kit dot edu )
18  * @date 2017
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #include "RCImageProvider.h"
24 
25 
26 using namespace armarx;
27 
28 
29 #include <rc_genicam_api/system.h>
30 #include <rc_genicam_api/interface.h>
31 #include <rc_genicam_api/buffer.h>
32 #include <rc_genicam_api/image.h>
33 #include <rc_genicam_api/config.h>
34 
35 #include <rc_genicam_api/pixel_formats.h>
36 
40 
41 #include <Calibration/Calibration.h>
42 #include <Calibration/StereoCalibration.h>
43 #include <stdlib.h>
44 
45 
46 using namespace armarx;
47 
48 
51 {
52  defineOptionalProperty<std::string>("DeviceId", "00_14_2d_2c_6e_ed", "");
53  defineOptionalProperty<float>("ScaleFactor", 1.0, "Image down scale factor");
54  defineOptionalProperty<float>("FrameRate", 25.0f, "Frames per second")
55  .setMatchRegex("\\d+(.\\d*)?")
56  .setMin(0.0)
57  .setMax(25.0);
58  defineOptionalProperty<bool>("AutoExposure", false, "Enables auto exposure");
59  defineOptionalProperty<float>("ExposureTimeMs", 12.0f, "Exposure time in ms if auto exposure is disabled");
60  defineOptionalProperty<float>("GainDb", 0.0f, "Gain in db");
61 
62  defineOptionalProperty<bool>("EnableColor", true, "Enables colored images");
63 
64  defineOptionalProperty<bool>("EnableAutoWhiteBalance", false, "Enable auto white balance");
65  defineOptionalProperty<float>("WhiteBalanceRatioRed", 1.2f, "Red to green balance ratio.").setMin(0.125).setMax(8.0);
66  defineOptionalProperty<float>("WhiteBalanceRatioBlue", 2.4f, "Blue to green balance ratio.").setMin(0.125).setMax(8.0);
67 
68  defineOptionalProperty<std::string>("ReferenceFrameName", "Roboception_LeftCamera", "Optional reference frame name.");
69 
70  defineOptionalProperty<std::string>("RobotHealthTopicName", "RobotHealthTopic", "Name of the RobotHealth topic");
71 }
72 
74 {
76 
77  // This option is disabled, as the depth image cannot be set to Full quality (like RGB image).
78  // The RGB image could be scaled down to the depth image. If this is what you want, feel free to implement it.
79  defs->optional(enableDepth, "EnableDepth",
80  "Enables depth image, i.e. provide RGB (left) + Depth.\n"
81  "Note that the depth image is scaled up by 2 (nearest neighbour) to match the resolution of the color image.");
82 
83  return defs;
84 }
85 
86 
88  intensityBuffer(50), disparityBuffer(25)
89 {
90 }
91 
92 
93 
94 void RCImageProvider::updateCameraSettings()
95 {
96  using namespace visionx::roboception;
97 
98  bool autoExposure = getProperty<bool>("AutoExposure");
99  float exposureTimeMs = getProperty<float>("ExposureTimeMs");
100  float gainDb = getProperty<float>("GainDb");
101 
102  bool enableColor = getProperty<bool>("EnableColor").getValue();
103 
104  std::shared_ptr<GenApi::CNodeMapRef> nodemap = dev->getRemoteNodeMap();
105  rcg::setString(nodemap, GC_COMPONENT_SELECTOR, "IntensityCombined", true); // selectz for the following actions
106 
107  ARMARX_INFO << "updating camera settings...";
108 
109  if (enableColor)
110  {
111  if (rcg::setEnum(nodemap, "PixelFormat", "YCbCr411_8", false))
112  {
113  ARMARX_INFO << "Enabling color mode";
114  }
115  else
116  {
117  ARMARX_WARNING << "Falling back to monochrome mode";
118  enableColor = false;
119  }
120  }
121 
122  if (enableColor)
123  {
124  if (getProperty<bool>("EnableAutoWhiteBalance").getValue())
125  {
126  if (rcg::setEnum(nodemap, "BalanceWhiteAuto", "Continuous"))
127  {
128  ARMARX_INFO << "enabling auto white balance";
129  }
130  else
131  {
132  ARMARX_WARNING << "unable to enable auto white balance";
133  }
134  }
135  else
136  {
137  if (rcg::setEnum(nodemap, "BalanceWhiteAuto", "Off"))
138  {
139  ARMARX_INFO << "disabling auto white balance";
140 
141  rcg::setEnum(nodemap, "BalanceRatioSelector", "Red");
142  if (!rcg::setFloat(nodemap, "BalanceRatio", getProperty<float>("WhiteBalanceRatioRed").getValue()))
143  {
144  ARMARX_WARNING << "unable to set white balance ratio for red-green";
145  }
146 
147  rcg::setEnum(nodemap, "BalanceRatioSelector", "Blue");
148  if (!rcg::setFloat(nodemap, "BalanceRatio", getProperty<float>("WhiteBalanceRatioBlue").getValue()))
149  {
150  ARMARX_WARNING << "unable to set white balance ratio for green-blue";
151  }
152  }
153  else
154  {
155  ARMARX_WARNING << "unable to disable auto white balance";
156  }
157 
158  }
159 
160  rcg::setEnum(nodemap, "BalanceRatioSelector", "Red");
161  double wbRatioRed = rcg::getFloat(nodemap, "BalanceRatio");
162 
163  rcg::setEnum(nodemap, "BalanceRatioSelector", "Blue");
164  double wbRatioBlue = rcg::getFloat(nodemap, "BalanceRatio");
165 
166  ARMARX_INFO << "white balance ratio is red: " << wbRatioRed << " blue: " << wbRatioBlue;
167  }
168  else
169  {
170  if (rcg::setEnum(nodemap, "PixelFormat", "Mono8", false))
171  {
172  ARMARX_INFO << "Enabling monochrome mode";
173  }
174  else
175  {
176  ARMARX_ERROR << "Could not set monochrome mode";
177  }
178  }
179 
180  if (enableDepth)
181  {
182  try
183  {
184  // rcg::setEnum(nodemap, GC_DEPTH_QUALITY, GC_DEPTH_QUALITY_FULL, true);
185  rcg::setEnum(nodemap, GC_DEPTH_QUALITY, GC_DEPTH_QUALITY_HIGH, true);
186  }
187  catch (std::invalid_argument& e)
188  {
189  ARMARX_INFO << e.what();
190  ARMARX_WARNING << "Depth quality '" << GC_DEPTH_QUALITY_FULL << "' is currently not available for this device. "
191  << "Falling back to '" << GC_DEPTH_QUALITY_HIGH << "' (640x480@3FPS).";
192  rcg::setEnum(nodemap, GC_DEPTH_QUALITY, GC_DEPTH_QUALITY_HIGH, true);
193  }
194  }
195 
196  std::string oldAutoExposure = rcg::getEnum(nodemap, GC_EXPOSURE_AUTO, false);
197  ARMARX_INFO << "Setting auto exposure from " << oldAutoExposure << " to " << autoExposure;
198  if (!rcg::setEnum(nodemap, GC_EXPOSURE_AUTO, autoExposure ? "Continuous" : "Off", false))
199  {
200  ARMARX_WARNING << "Could not set auto exposure to: " << autoExposure;
201  }
202  double oldExposureTime = rcg::getFloat(nodemap, GC_EXPOSURE_TIME) / 1000.0;
203  ARMARX_INFO << "Setting exposure time from " << oldExposureTime << " to " << exposureTimeMs;
204  if (!rcg::setFloat(nodemap, GC_EXPOSURE_TIME, exposureTimeMs * 1000.0, false))
205  {
206  ARMARX_WARNING << "Could not set exposure time to: " << exposureTimeMs;
207  }
208 
209  double oldGain = rcg::getFloat(nodemap, GC_GAIN);
210  ARMARX_INFO << "Setting gain from " << oldGain << " to " << gainDb;
211  if (!rcg::setFloat(nodemap, GC_GAIN, gainDb, false))
212  {
213  ARMARX_WARNING << "Could not set gain to: " << gainDb;
214  }
215 
216  ARMARX_INFO << "updating camera settings...done!";
217 }
218 
220 {
221  // offeringTopic(getProperty<std::string>("RobotHealthTopicName").getValue());
222 
223  if (!initDevice(getProperty<std::string>("DeviceId")))
224  {
225  getArmarXManager()->asyncShutdown();
226  return;
227  }
228 
229  if (enableDepth)
230  {
231  enableIntensity(true);
233  enableDisparity(true);
234  enableConfidence(false);
235  enableError(false);
236  }
237  else
238  {
239  enableIntensity(false);
241  enableDisparity(false);
242  enableConfidence(false);
243  enableError(false);
244  }
245 
246  rcg::setString(nodemap, visionx::roboception::GC_COMPONENT_SELECTOR, "IntensityCombined", true);
247 
248 
249  updateCameraSettings();
250 
252  getProperty<float>("ScaleFactor"),
253  "/tmp/armar6_rc_color_calibration.txt"
254  );
255 
256  frameRate = getProperty<float>("FrameRate");
257  rcg::setFloat(nodemap, "AcquisitionFrameRate", double(frameRate));
259 
260  scan3dCoordinateScale = rcg::getFloat(nodemap, "Scan3dCoordinateScale", nullptr, nullptr, true);
261 
263  setImageFormat(dimensions, visionx::eRgb, visionx::eBayerPatternRg);
264  setImageSyncMode(visionx::eCaptureSynchronization);
265 }
266 
268 {
269  // CapturingImageProvider::onConnectImageProvider();
270  // robotHealthTopic = getTopic<RobotHealthInterfacePrx>(getProperty<std::string>("RobotHealthTopicName").getValue());
271 }
272 
274 {
275  cleanupRC();
276 }
277 
278 void armarx::RCImageProvider::onStartCapture(float framesPerSecond)
279 {
280  (void) framesPerSecond;
281  startRC();
282 }
283 
285 {
286  stopRC();
287 }
288 
289 bool RCImageProvider::capture(void** ppImageBuffers)
290 {
291  visionx::ImageFormatInfo imageFormat = getImageFormat();
292 
293  IceUtil::Time timeoutTime = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::secondsDouble(2);
294  while (IceUtil::Time::now(IceUtil::Time::Monotonic) < timeoutTime)
295  {
296  const rcg::Buffer* buffer = stream->grab((timeoutTime - IceUtil::Time::now(IceUtil::Time::Monotonic)).toMilliSeconds());
297  if (!buffer)
298  {
299  ARMARX_WARNING << deactivateSpam(10) << "buffer is NULL - Unable to get image - restarting streaming";
300  try
301  {
302  stream->stopStreaming();
303  }
304  catch (std::exception const& ex)
305  {
306  ARMARX_WARNING << "stopStreaming failed: " << ex.what();
307  }
308  try
309  {
310  stream->close();
311  }
312  catch (std::exception const& ex)
313  {
314  ARMARX_WARNING << "close failed: " << ex.what();
315  }
316  ARMARX_WARNING << deactivateSpam(10) << "streaming stopped";
317  stream = nullptr;
319  getProperty<float>("ScaleFactor"),
320  "/tmp/armar6_rc_color_calibration.txt"
321  );
322 
323  stream->open();
324  stream->startStreaming();
325  ARMARX_WARNING << deactivateSpam(10) << "streaming started again";
326  return false;
327  }
328 
329  if (buffer->getIsIncomplete())
330  {
331  continue; // try again
332  }
333  if (buffer->getNumberOfParts() > 1)
334  {
335  ARMARX_WARNING << deactivateSpam(10) << "Buffer contains more than one part!";
336  return false;
337  }
338 
339  const int part = 0;
340  if (!buffer->getImagePresent(part))
341  {
342  ARMARX_WARNING << deactivateSpam(10) << "Buffer does not contain an image!";
343  return false;
344  }
345 
346  size_t px = buffer->getXPadding(part);
347  uint64_t format = buffer->getPixelFormat(part);
348 
349  int width = imageFormat.dimension.width;
350  int height = imageFormat.dimension.height;
351  if (scaleFactor > 1.0f)
352  {
353  width *= scaleFactor;
354  height *= scaleFactor;
355  }
356 
357  const int imageSize = imageFormat.dimension.width * imageFormat.dimension.height * imageFormat.bytesPerPixel;
358 
359  // ARMARX_LOG << "grabbing image " << imageFormat.dimension.width << "x" << imageFormat.dimension.height << " vs " << buffer->getWidth() << "x" << buffer->getHeight();
360 
361 
362  if (!enableDepth)
363  {
364  const uint8_t* inputPixels = static_cast<const uint8_t*>(buffer->getBase(0));
365 
366  for (size_t n = 0; n < numImages; n++)
367  {
368  fillCameraImageRGB(cameraImages[n]->pixels, n,
369  inputPixels, size_t(width), size_t(height), format, px);
370  }
371  }
372  else
373  {
374  switch (format)
375  {
376  case PfncFormat::Mono8:
377  case PfncFormat::Confidence8:
378  case Error8:
379  case PfncFormat::YCbCr411_8:
380  intensityBuffer.add(buffer, part);
381  break;
382  case Coord3D_C16:
383  disparityBuffer.add(buffer, part);
384  break;
385  default:
386  ARMARX_INFO << "Unexpected pixel format: " << int(format);
387  break;
388  }
389 
390  uint64_t timestamp = buffer->getTimestampNS();
391 
392  std::shared_ptr<const rcg::Image> intensity = intensityBuffer.find(timestamp);
393  std::shared_ptr<const rcg::Image> disparity = disparityBuffer.find(timestamp);
394 
395  if (!intensity || !disparity)
396  {
397  // Waiting for second synchronized image
398  return false;
399  }
400  updateTimestamp(Ice::Long(buffer->getTimestamp()));
401  ARMARX_DEBUG << "Received all synchronized images at timestamp " << buffer->getTimestamp() << ".";
402 
403 
404  // Build images
405 
406  size_t upscale = 1;
407  if (intensity->getWidth() / disparity->getWidth() == 2
408  && intensity->getHeight() / disparity->getHeight() == 2)
409  {
410  upscale = 2;
411  static bool reported = false;
412  if (!reported)
413  {
414  ARMARX_INFO << "Scaling up depth image by a factor of " << upscale << ".";
415  reported = true;
416  }
417  }
418 
419  // Left eye image.
420  fillCameraImageRGB(cameraImages[0]->pixels, 0, *intensity);
421  // Depth image.
422  fillCameraImageDepth(cameraImages[1]->pixels, focalLengthFactor, baseline, scan3dCoordinateScale, *disparity, upscale);
423  }
424 
425 
426 
427 
429  updateTimestamp(buffer->getTimestampNS() / 1000, false);
430  if (scaleFactor > 1.0f)
431  {
432  ImageProcessor::Resize(cameraImages[0], smallImages[0]);
433  ImageProcessor::Resize(cameraImages[1], smallImages[1]);
434 
435  for (size_t i = 0; i < numImages; i++)
436  {
437  memcpy(ppImageBuffers[i], smallImages[i]->pixels, imageSize);
438  }
439  }
440  else
441  {
442 
443  for (size_t i = 0; i < numImages; i++)
444  {
445  memcpy(ppImageBuffers[i], cameraImages[i]->pixels, imageSize);
446  }
447  }
448 
449  // RobotHealthHeartbeatArgs rhha;
450  // rhha.maximumCycleTimeWarningMS = 500; // Robotception is really slow.
451  // rhha.maximumCycleTimeErrorMS = 1000;
452  // robotHealthTopic->heartbeat(getName(), rhha);
453 
454  return true;
455  }
456 
457  ARMARX_INFO << deactivateSpam() << "failed to capture image";
458  return false;
459 }
460 
visionx::RoboceptionUser::stream
rcg::StreamPtr stream
Definition: RoboceptionUser.h:89
visionx::roboception::GC_DEPTH_QUALITY_HIGH
const char *const GC_DEPTH_QUALITY_HIGH
Definition: roboception_constants.h:18
armarx::RCImageProvider::onExitCapturingImageProvider
void onExitCapturingImageProvider() override
This is called when the Component::onExitComponent() setup is called.
Definition: RCImageProvider.cpp:273
armarx::RCImageProvider::onInitCapturingImageProvider
void onInitCapturingImageProvider() override
This is called when the Component::onInitComponent() is called.
Definition: RCImageProvider.cpp:219
visionx::RoboceptionUser::cleanupRC
void cleanupRC()
Definition: RoboceptionUser.cpp:235
armarx::IceSharedMemoryProvider::getScopedWriteLock
SharedMemoryScopedWriteLockPtr getScopedWriteLock() const
Retrieve scoped lock for writing to the memory.
Definition: IceSharedMemoryProvider.h:156
visionx::CapturingImageProvider::frameRate
float frameRate
Required frame rate.
Definition: CapturingImageProvider.h:198
visionx::RoboceptionUser::dimensions
visionx::ImageDimension dimensions
Definition: RoboceptionUser.h:100
armarx::RCImageProviderPropertyDefinitions::RCImageProviderPropertyDefinitions
RCImageProviderPropertyDefinitions(std::string prefix)
Definition: RCImageProvider.cpp:49
visionx::roboception::GC_DEPTH_QUALITY
const char *const GC_DEPTH_QUALITY
Definition: roboception_constants.h:15
armarx::RCImageProvider::createPropertyDefinitions
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: RCImageProvider.cpp:73
visionx::RoboceptionUser::dev
rcg::DevicePtr dev
Definition: RoboceptionUser.h:88
part
Use of this software is granted under one of the following two to be chosen freely by the user Boost Software License Version Marcin Kalicinski Permission is hereby free of to any person or organization obtaining a copy of the software and accompanying documentation covered by this and transmit the and to prepare derivative works of the and to permit third parties to whom the Software is furnished to do all subject to the including the above license this restriction and the following must be included in all copies of the in whole or in part
Definition: license.txt:18
visionx::RoboceptionUser::nodemap
std::shared_ptr< GenApi::CNodeMapRef > nodemap
Definition: RoboceptionUser.h:90
RCImageProvider.h
armarx::ManagedIceObject::getArmarXManager
ArmarXManagerPtr getArmarXManager() const
Returns the ArmarX manager used to add and remove components.
Definition: ManagedIceObject.cpp:348
visionx::RoboceptionUser::enableError
void enableError(bool enabled)
Definition: RoboceptionUser.cpp:133
armarx::SharedMemoryScopedWriteLockPtr
std::shared_ptr< SharedMemoryScopedWriteLock > SharedMemoryScopedWriteLockPtr
Definition: SharedMemoryProvider.h:46
visionx::ImageProvider::setImageFormat
void setImageFormat(ImageDimension imageDimension, ImageType imageType, BayerPatternType bayerPatternType=visionx::eBayerPatternRg)
Sets the image basic format data.
Definition: ImageProvider.cpp:275
visionx::roboception
Definition: roboception_constants.h:7
armarx::RCImageProviderPropertyDefinitions
Definition: RCImageProvider.h:57
visionx::ImageProvider::getImageFormat
ImageFormatInfo getImageFormat(const Ice::Current &c=Ice::emptyCurrent) override
Returns the entire image format info struct via Ice.
Definition: ImageProvider.cpp:75
visionx::roboception::GC_DEPTH_QUALITY_FULL
const char *const GC_DEPTH_QUALITY_FULL
Definition: roboception_constants.h:19
visionx::ImageProvider::updateTimestamp
void updateTimestamp(Ice::Long timestamp, bool threadSafe=true)
Updates the timestamp of the currently captured image.
Definition: ImageProvider.cpp:165
visionx::ImageProvider::sharedMemoryProvider
armarx::IceSharedMemoryProvider< unsigned char >::pointer_type sharedMemoryProvider
shared memory provider
Definition: ImageProvider.h:256
visionx::RoboceptionUser::initDevice
bool initDevice(const std::string &dname)
Definition: RoboceptionUser.cpp:57
armarx::RCImageProvider::onStartCapturingImageProvider
void onStartCapturingImageProvider() override
This is called when the Component::onConnectComponent() setup is called.
Definition: RCImageProvider.cpp:267
roboception_constants.h
visionx::RoboceptionUser::fillCameraImageDepth
static void fillCameraImageDepth(unsigned char *outputPixels, double f, double t, double scale, const rcg::Image &disparity, size_t upscale=1)
Definition: RoboceptionUser.cpp:340
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:177
visionx::CapturingImageProvider::capture
virtual void capture()
Definition: CapturingImageProvider.cpp:106
visionx::RoboceptionUser::enableDisparity
void enableDisparity(bool enabled)
Definition: RoboceptionUser.cpp:121
armarx::VariantType::Long
const VariantTypeId Long
Definition: Variant.h:917
visionx::RoboceptionUser::cameraImages
CByteImage ** cameraImages
Definition: RoboceptionUser.h:97
visionx::RoboceptionUser::baseline
double baseline
Definition: RoboceptionUser.h:95
visionx::RoboceptionUser::numImages
size_t numImages
Definition: RoboceptionUser.h:92
visionx::roboception::GC_COMPONENT_SELECTOR
const char *const GC_COMPONENT_SELECTOR
Definition: roboception_constants.h:10
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:189
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::RCImageProvider::onStartCapture
void onStartCapture(float frameRate) override
This is called when the image provider capturing has been started.
Definition: RCImageProvider.cpp:278
visionx::RoboceptionUser::startRC
void startRC()
Definition: RoboceptionUser.cpp:220
visionx::ImageProvider::setNumberImages
void setNumberImages(int numberImages)
Sets the number of images on each capture.
Definition: ImageProvider.cpp:313
armarx::control::common::getValue
T getValue(nlohmann::json &userConfig, nlohmann::json &defaultConfig, const std::string &entryName)
Definition: utils.h:55
armarx::Component::getConfigIdentifier
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Definition: Component.cpp:74
armarx::RCImageProvider::onStopCapture
void onStopCapture() override
This is called when the image provider capturing has been stopped.
Definition: RCImageProvider.cpp:284
visionx::CapturingImageProvider::setImageSyncMode
void setImageSyncMode(ImageSyncMode imageSyncMode)
Sets the image synchronization mode.
Definition: CapturingImageProvider.cpp:166
armarx::ComponentPropertyDefinitions
Default component property definition container.
Definition: Component.h:70
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
VAROUT
#define VAROUT(x)
Definition: StringHelpers.h:182
visionx::RoboceptionUser::enableIntensity
void enableIntensity(bool enabled)
Definition: RoboceptionUser.cpp:109
IceUtil::Handle< class PropertyDefinitionContainer >
visionx::RoboceptionUser::enableConfidence
void enableConfidence(bool enabled)
Definition: RoboceptionUser.cpp:127
visionx::RoboceptionUser::enableIntensityCombined
void enableIntensityCombined(bool enabled)
Definition: RoboceptionUser.cpp:115
visionx::RoboceptionUser::smallImages
CByteImage ** smallImages
Definition: RoboceptionUser.h:98
armarx::Logging::deactivateSpam
SpamFilterDataPtr deactivateSpam(float deactivationDurationSec=10.0f, const std::string &identifier="", bool deactivate=true) const
disables the logging for the current line for the given amount of seconds.
Definition: Logging.cpp:92
visionx::roboception::GC_EXPOSURE_TIME
const char *const GC_EXPOSURE_TIME
Definition: roboception_constants.h:11
visionx::roboception::GC_GAIN
const char *const GC_GAIN
Definition: roboception_constants.h:14
visionx::RoboceptionUser::setupStreamAndCalibration
void setupStreamAndCalibration(float scalefactor, const std::string &calibSavePath)
Definition: RoboceptionUser.cpp:139
TypeMapping.h
armarx::RCImageProvider::RCImageProvider
RCImageProvider()
Definition: RCImageProvider.cpp:87
visionx::RoboceptionUser::focalLengthFactor
double focalLengthFactor
Definition: RoboceptionUser.h:94
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:186
visionx::roboception::GC_EXPOSURE_AUTO
const char *const GC_EXPOSURE_AUTO
Definition: roboception_constants.h:12
ArmarXDataPath.h
visionx::RoboceptionUser::fillCameraImageRGB
static void fillCameraImageRGB(unsigned char *outputPixels, size_t nImage, const uint8_t *inputPixels, size_t width, size_t height, uint64_t pixelFormat, size_t xpadding)
Definition: RoboceptionUser.cpp:275
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
visionx::RoboceptionUser::stopRC
void stopRC()
Definition: RoboceptionUser.cpp:228