FakePointCloudProvider.cpp
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::ArmarXObjects::FakePointCloudProvider
19 * @author Markus Grotz ( markus-grotz at web dot de )
20 * @date 2015
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
24
26
28
29// IVT
30#include <opencv2/opencv.hpp>
31
32#include <SimoxUtility/algorithm/string/string_tools.h>
33
37
39
42
46
47#include <Calibration/Calibration.h>
48#include <Image/ByteImage.h>
49#include <Image/ImageProcessor.h>
50
51
52using namespace armarx;
53using namespace pcl;
54
55namespace visionx
56{
58 std::string prefix) :
60 {
62 "pointCloudFileName",
63 "VisionX/examples/point_clouds/",
64 "The point cloud to read. If directory, all *.pcd files of this and all subdirectories "
65 "are read. \n"
66 "All point clouds are read in before the pointcloud providing starts.");
67
68 defineOptionalProperty<bool>("rewind", true, "loop through the point clouds");
70 "scaleFactor", -1.0f, "scale point cloud. only applied if value is larger than zero");
71 defineOptionalProperty<Eigen::Vector2i>("dimensions", Eigen::Vector2i(640, 480), "")
72 .map("320x240", Eigen::Vector2i(320, 240))
73 .map("640x480", Eigen::Vector2i(640, 480))
74 .map("320x240", Eigen::Vector2i(320, 240))
75 .map("640x480", Eigen::Vector2i(640, 480))
76 .map("800x600", Eigen::Vector2i(800, 600))
77 .map("768x576", Eigen::Vector2i(768, 576))
78 .map("1024x768", Eigen::Vector2i(1024, 768))
79 .map("1024x1024", Eigen::Vector2i(1024, 1024))
80 .map("1280x960", Eigen::Vector2i(1280, 960))
81 .map("1600x1200", Eigen::Vector2i(1600, 1200));
82
84 "depthCameraCalibrationFile", "", "Camera depth calibration file (YAML)");
86 "RGBCameraCalibrationFile", "", "Camera RGB calibration file (YAML)");
87
89 "sourceFrameName", "", "Assume point cloud was stored in this frame.");
91 "TargetFrameName",
93 "Coordinate frame in which point cloud will be transformed and provided.\n"
94 "If left empty, no transformation will be applied and source frame name\n"
95 "will be returned as reference frame.");
96
97 defineOptionalProperty<std::string>("RobotStateComponentName",
98 "RobotStateComponent",
99 "Name of the robot state component to use.");
100 defineOptionalProperty<bool>("RemoveNAN", true, "Remove NAN from point cloud");
102 "ProvidedPointCloudFormat",
103 "XYZRGBA",
104 "Format of the provided point cloud (XYZRGBA, XYZL, XYZRGBL)");
105 }
106
107 std::string
112
113 std::string
115 {
116 return "FakePointCloudProvider";
117 }
118
119 void
125
126 void
139
140 void
146
147 void
153
154 void
156 {
157 getProperty(rewind, "rewind");
158 getProperty(pointCloudFileName, "pointCloudFileName");
159 getProperty(scaleFactor, "scaleFactor");
160 getProperty(sourceFrameName, "sourceFrameName");
161 getProperty(targetFrameName, "TargetFrameName");
162 getProperty(removeNAN, "RemoveNAN");
163
164 getProperty(providedPointCloudFormat, "ProvidedPointCloudFormat");
165 ARMARX_INFO << "Providing point clouds in format " << providedPointCloudFormat << ".";
166
167 getProperty(robotStateComponentName, "RobotStateComponentName");
168 if (!robotStateComponentName.empty())
169 {
170 usingProxy(robotStateComponentName);
171 }
172
173 // Check invalid or dangerous configurations and warn early.
174 if (!(sourceFrameName.empty() && targetFrameName.empty()))
175 {
176 if (!sourceFrameName.empty() && !targetFrameName.empty() &&
177 robotStateComponentName.empty())
178 {
179 ARMARX_ERROR << "Source and target frames specified, but no RobotStateComponent is "
180 "specified.\n"
181 "No transformation will be applied.";
182 }
183 else if (sourceFrameName.empty() && !targetFrameName.empty())
184 {
185 ARMARX_WARNING << "Target frame was specified (" << targetFrameName
186 << "), but no source frame is specified.\n"
187 << "Did you set the property `sourceFrameName`? (No transformation "
188 "will be applied.)";
189 }
190 else if (!sourceFrameName.empty() && targetFrameName.empty())
191 {
192 ARMARX_INFO << "Source frame was specified (" << sourceFrameName
193 << "), but no target frame is specified.\n"
194 << "No transformation will be applied and source frame is returned as "
195 "reference frame.";
196 }
197 }
198
199
200 if (!ArmarXDataPath::getAbsolutePath(pointCloudFileName, pointCloudFileName))
201 {
202 ARMARX_ERROR << "Could not find point cloud file in ArmarXDataPath: "
203 << pointCloudFileName;
204 }
205
206 // Loading each file
207 if (std::filesystem::is_directory(pointCloudFileName))
208 {
209 loadPointCloudDirectory(pointCloudFileName);
210 }
211 else
212 {
213 loadPointCloud(pointCloudFileName);
214 }
215
216 if (pointClouds.empty())
217 {
218 ARMARX_FATAL << "Unable to load point cloud: " << pointCloudFileName;
219 throw LocalException("Unable to load point cloud");
220 }
221
222 ARMARX_INFO << "Loaded " << pointClouds.size() << " point clouds.";
223
224
225 visionx::CameraParameters RGBCameraIntrinsics;
226 RGBCameraIntrinsics.focalLength.resize(2);
227 RGBCameraIntrinsics.principalPoint.resize(2);
228
229 if (!getProperty<std::string>("RGBCameraCalibrationFile").getValue().empty() &&
230 !loadCalibrationFile(getProperty<std::string>("RGBCameraCalibrationFile").getValue(),
231 RGBCameraIntrinsics))
232 {
233 ARMARX_WARNING << "Could not load rgb camera parameter file "
234 << getProperty<std::string>("RGBCameraCalibrationFile").getValue()
235 << " - using camera uncalibrated";
236 }
237
238 visionx::CameraParameters depthCameraIntrinsics;
239 depthCameraIntrinsics.focalLength.resize(2);
240 depthCameraIntrinsics.principalPoint.resize(2);
241
242 if (!getProperty<std::string>("depthCameraCalibrationFile").getValue().empty() &&
243 !loadCalibrationFile(getProperty<std::string>("depthCameraCalibrationFile").getValue(),
244 depthCameraIntrinsics))
245 {
246 ARMARX_WARNING << "Could not load depth camera parameter file "
247 << getProperty<std::string>("depthCameraCalibrationFile").getValue()
248 << " - using camera uncalibrated";
249 }
250
251 calibration.calibrationLeft = visionx::tools::createDefaultMonocularCalibration();
252 calibration.calibrationRight = visionx::tools::createDefaultMonocularCalibration();
253 calibration.calibrationLeft.cameraParam = RGBCameraIntrinsics;
254 calibration.calibrationRight.cameraParam = depthCameraIntrinsics;
255 }
256
257 bool
258 FakePointCloudProvider::loadPointCloud(const std::string& fileName)
259 {
260 if (simox::alg::ends_with(fileName, ".pcd") && std::filesystem::is_regular_file(fileName))
261 {
262 pcl::PCLPointCloud2Ptr cloudptr(new pcl::PCLPointCloud2());
263 ARMARX_INFO << "Loading: " << fileName;
264
265 if (io::loadPCDFile(fileName.c_str(), *cloudptr) == -1)
266 {
267 ARMARX_WARNING << "Unable to load point cloud from file " << fileName;
268 return false;
269 }
270 else
271 {
272 pointClouds.push_back(cloudptr);
273 return true;
274 }
275 }
276
277 return false;
278 }
279
280 bool
281 FakePointCloudProvider::loadPointCloudDirectory(const std::string& directoryName)
282 {
283 // reading file names
284 std::vector<std::string> fileNames;
285
286 for (std::filesystem::recursive_directory_iterator dir(directoryName), end;
287 dir != end && getState() < eManagedIceObjectExiting;
288 ++dir)
289 {
290 // Search for all *.pcd files
291 if (dir->path().extension() == ".pcd")
292 {
293 fileNames.push_back(dir->path().string());
294 }
295 }
296
297 ARMARX_INFO << "In total " << fileNames.size() << " point clouds found.";
298
299 // Sorting file names and loading them.
300 std::sort(fileNames.begin(), fileNames.end());
301
302 for (std::size_t f = 0; f < fileNames.size(); f++)
303 {
304 ARMARX_INFO << " File " << f << " / " << fileNames.size() << " is being loaded... "
305 << fileNames[f];
306 try
307 {
308 loadPointCloud(fileNames[f]);
309 }
310 catch (...)
311 {
312 ARMARX_WARNING << "Loading pointcloud '" << fileNames[f]
313 << "' failed: " << armarx::GetHandledExceptionString();
314 }
315 }
316
317 return true;
318 }
319
320 void
322 {
323 pointClouds.clear();
324 }
325
326 MetaPointCloudFormatPtr
328 {
329 MetaPointCloudFormatPtr format = new MetaPointCloudFormat();
330
331 if (providedPointCloudFormat == "XYZL")
332 {
333 format->type = PointContentType::eLabeledPoints;
334 }
335 else if (providedPointCloudFormat == "XYZRGBL")
336 {
337 format->type = PointContentType::eColoredLabeledPoints;
338 }
339 else
340 {
341 format->type = PointContentType::eColoredPoints;
342 }
343
344 format->capacity =
345 static_cast<Ice::Int>(640 * 480 * visionx::tools::getBytesPerPoint(format->type) * 50);
346 format->size = format->capacity;
347 return format;
348 }
349
350 void
352 {
353 Eigen::Vector2i dimensions = getProperty<Eigen::Vector2i>("dimensions");
354 setImageFormat(visionx::ImageDimension(dimensions(0), dimensions(1)), visionx::eRgb);
356 rgbImages = new CByteImage*[1];
357 rgbImages[0] = new CByteImage(dimensions(0), dimensions(1), CByteImage::eRGB24);
358 ::ImageProcessor::Zero(rgbImages[0]);
359
360 counter = 0;
361 }
362
363 void
365 {
366 (void)_frameRate; // Unused.
367 if (!robotStateComponentName.empty())
368 {
369 getProxy(robotStateComponent, robotStateComponentName);
370 if (!robotStateComponent)
371 {
372 ARMARX_ERROR << "Failed to obtain robot state component.";
373 return;
374 }
375
376 localRobot = armarx::RemoteRobot::createLocalClone(robotStateComponent);
377 }
378 }
379
380 void
384
385 bool
387 {
388 pcl::PCLPointCloud2Ptr cloudptr;
389
390 {
391 std::scoped_lock lock(pointCloudMutex);
392
393 if (rewind && static_cast<size_t>(counter.load()) >= pointClouds.size())
394 {
395 counter = 0;
396 }
397
398 cloudptr = pointClouds.at(counter);
399 }
400
401 // Provide point cloud in configured format
402 if (providedPointCloudFormat == "XYZRGBA")
403 {
404 return processAndProvide<pcl::PointXYZRGBA>(cloudptr);
405 }
406 else if (providedPointCloudFormat == "XYZL")
407 {
408 return processAndProvide<pcl::PointXYZL>(cloudptr);
409 }
410 else if (providedPointCloudFormat == "XYZRGBL")
411 {
412 return processAndProvide<pcl::PointXYZRGBL>(cloudptr);
413 }
414 else
415 {
416 ARMARX_ERROR << "Could not provide point cloud, because format '"
417 << providedPointCloudFormat << "' is unknown";
418 return false;
419 }
420 }
421
422 bool
423 FakePointCloudProvider::loadCalibrationFile(std::string fileName,
424 visionx::CameraParameters& calibration)
425 {
426 ArmarXDataPath::getAbsolutePath(fileName, fileName, {}, false);
427 cv::FileStorage fs(fileName, cv::FileStorage::READ);
428
429 if (!fs.isOpened())
430 {
431 return false;
432 }
433
434 std::string cameraName = fs["camera_name"];
435 ARMARX_LOG << "loading calibration file for " << cameraName;
436
437
438 Eigen::Vector2i dimensions = getProperty<Eigen::Vector2i>("dimensions").getValue();
439 int imageWidth = fs["image_width"];
440 int imageHeight = fs["image_height"];
441
442 if (imageWidth != dimensions(0) || imageHeight != dimensions(1))
443 {
444 ARMARX_ERROR << "invalid camera size";
445 return false;
446 }
447
448 cv::Mat cameraMatrix, distCoeffs;
449
450 fs["camera_matrix"] >> cameraMatrix;
451 fs["distortion_coefficients:"] >> distCoeffs;
452
453 for (int i = 0; i < 5; i++)
454 {
455 calibration.distortion[static_cast<std::size_t>(i)] = distCoeffs.at<float>(0, i);
456 }
457
458 calibration.focalLength[0] = cameraMatrix.at<float>(0, 0);
459 calibration.focalLength[1] = cameraMatrix.at<float>(1, 1);
460
461 calibration.principalPoint[0] = cameraMatrix.at<float>(2, 1);
462 calibration.principalPoint[1] = cameraMatrix.at<float>(2, 2);
463
464 return true;
465 }
466
473
474 void
475 FakePointCloudProvider::setPointCloudFilename(const std::string& filename, const Ice::Current&)
476 {
477 std::scoped_lock lock(pointCloudMutex);
478
479 ARMARX_INFO << "Changing point cloud filename to: " << filename;
480
481 pointClouds.clear();
482 loadPointCloud(filename);
483 }
484
485 bool
487 {
488 return true;
489 }
490
491 template <typename PointT>
492 bool
493 FakePointCloudProvider::processAndProvide(const PCLPointCloud2Ptr& pointCloud)
494 {
495 using PointCloudPtrT = typename pcl::PointCloud<PointT>::Ptr;
496
497 PointCloudPtrT cloudptr(new pcl::PointCloud<PointT>());
498 pcl::fromPCLPointCloud2(*pointCloud, *cloudptr);
499
500 if (cloudptr->isOrganized())
501 {
502 processRGBImage(pointCloud);
503 }
504
505 PointCloudPtrT resultCloudPtr(new pcl::PointCloud<PointT>());
506
507 if (scaleFactor > 0)
508 {
509 Eigen::Affine3f transform(Eigen::Scaling(scaleFactor));
510 pcl::transformPointCloud(*cloudptr, *resultCloudPtr, transform);
511 }
512 else
513 {
514 // Copy initial point cloud for possibly applying a second transformation
515 pcl::copyPointCloud(*cloudptr, *resultCloudPtr);
516 }
517
518 const IceUtil::Time time = TimeUtil::GetTime();
519 resultCloudPtr->header.stamp = static_cast<uint64_t>(time.toMicroSeconds());
520
521 if (!sourceFrameName.empty() || !targetFrameName.empty())
522 {
523 if (!sourceFrameName.empty() && !targetFrameName.empty())
524 {
525 // Assume point cloud was stored in source frame and transform to target frame.
526 if (localRobot)
527 {
529 localRobot, robotStateComponent, time.toMicroSeconds());
530 FramedPointCloud framedPointCloud(resultCloudPtr, sourceFrameName);
531 framedPointCloud.changeFrame(targetFrameName, localRobot);
532 }
533 else
534 {
535 // This was already logged in the onInit().
536 // ARMARX_ERROR << "Source and target frames specified, but no RobotStateComponent available.\n"
537 // "No transformation is applied.";
538 }
539 }
540 else if (sourceFrameName.empty())
541 {
542 // This was already logged in the onInit().
543 // ARMARX_WARNING << "Target frame was specified (" << targetFrameName << "), but no source frame is specified.\n"
544 // << "Did you set the property `sourceFrameName`? (No transformation is applied.)";
545 }
546 else if (targetFrameName.empty())
547 {
548 // This was already logged in the onInit().
549 // ARMARX_INFO << "Source frame was specified (" << sourceFrameName << "), but no target frame is specified.\n"
550 // << "No transformation is applied and source frame is returned as reference frame.";
551 }
552 }
553
554
555 if (removeNAN)
556 {
557 std::vector<int> indices;
558 pcl::removeNaNFromPointCloud(*resultCloudPtr, *resultCloudPtr, indices);
559 }
560
561 ARMARX_VERBOSE << deactivateSpam() << "Providing point cloud of size "
562 << resultCloudPtr->points.size();
563 providePointCloud(resultCloudPtr);
564 provideImages(rgbImages);
565
566 if (freezeImage)
567 {
568 counter = freezeImageIdx.load();
569 }
570 else
571 {
572 ++counter;
573 }
574 return true;
575 }
576
577 bool
578 FakePointCloudProvider::processRGBImage(const PCLPointCloud2Ptr& pointCloud)
579 {
580 pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudptr(new pcl::PointCloud<pcl::PointXYZRGB>());
581 pcl::fromPCLPointCloud2(*pointCloud, *cloudptr);
582
583 if (!cloudptr->isOrganized())
584 {
586 << "The point cloud is not organized, so no RGB image is generated";
587 return false;
588 }
589
590 if (static_cast<int>(cloudptr->width) != rgbImages[0]->width ||
591 static_cast<int>(cloudptr->height) != rgbImages[0]->height)
592 {
594 << "Dimensions of point cloud and image do not match, so no RGB image is generated";
595 return false;
596 }
597
598 ::ImageProcessor::Zero(rgbImages[0]);
599 const int width = static_cast<int>(cloudptr->width);
600 const int height = static_cast<int>(cloudptr->height);
601
602 for (int i = 0; i < height; i++)
603 {
604 for (int j = 0; j < width; j++)
605 {
606 pcl::PointXYZRGB& point = cloudptr->at(static_cast<std::size_t>(i * width + j));
607 rgbImages[0]->pixels[3 * (i * width + j) + 0] = point.r;
608 rgbImages[0]->pixels[3 * (i * width + j) + 1] = point.g;
609 rgbImages[0]->pixels[3 * (i * width + j) + 2] = point.b;
610 }
611 }
612
613 return true;
614 }
615
616 void
618 {
619 for (std::size_t i = 0; i < 1; i++)
620 {
621 delete rgbImages[i];
622 }
623
624 delete[] rgbImages;
625 }
626
627 StereoCalibration
629 {
630 return calibration;
631 }
632
633 bool
635 {
636 return true;
637 }
638
639 std::string
641 {
642 return !targetFrameName.empty() ? targetFrameName : sourceFrameName;
643 }
644
645 RemoteGui::WidgetPtr
646 FakePointCloudProvider::buildGui()
647 {
650 .cols(3)
651 .addChild(RemoteGui::makeCheckBox("rewind").value(rewind).label("rewind"), 3)
652
653 .addChild(RemoteGui::makeCheckBox("removeNAN").value(removeNAN).label("removeNAN"), 3)
654
655 .addTextLabel("scaleFactor")
657 .minmax(0, 10000)
658 .steps(10000)
659 .decimals(3),
660 2)
661
662 .addChild(
663 RemoteGui::makeCheckBox("freezeImage").value(freezeImage).label("freezeImage"))
664 .addChild(RemoteGui::makeIntSpinBox("freezeImageIdx").minmax(0, pointClouds.size() - 1))
665 .addTextLabel(" / " + std::to_string(pointClouds.size() - 1));
666 }
667
668 void
669 FakePointCloudProvider::processGui(armarx::RemoteGui::TabProxy& prx)
670 {
672 prx.receiveUpdates();
673 prx.getValue(rewind, "rewind");
674 prx.getValue(removeNAN, "removeNAN");
675 prx.getValue(scaleFactor, "scaleFactor");
676 prx.getValue(freezeImage, "freezeImage");
677 if (freezeImage)
678 {
679 prx.getValue(freezeImageIdx, "freezeImageIdx");
680 }
681 else
682 {
683 prx.setValue(counter, "freezeImageIdx");
684 }
685 prx.sendUpdates();
686 }
687
690
691} // namespace visionx
#define ARMARX_REGISTER_COMPONENT_EXECUTABLE(ComponentT, applicationName)
Definition Decoupled.h:29
static bool getAbsolutePath(const std::string &relativeFilename, std::string &storeAbsoluteFilename, const std::vector< std::string > &additionalSearchPaths={}, bool verbose=true)
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Definition Component.cpp:90
Property< PropertyType > getProperty(const std::string &name)
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:99
virtual void onExitComponent()
Hook for subclass.
bool usingProxy(const std::string &name, const std::string &endpoints="")
Registers a proxy for retrieval after initialization and adds it to the dependency list.
virtual void onDisconnectComponent()
Hook for subclass.
virtual void onConnectComponent()=0
Pure virtual hook for the subclass.
Ice::ObjectPrx getProxy(long timeoutMs=0, bool waitForScheduler=true) const
Returns the proxy of this object (optionally it waits for the proxy)
virtual void onInitComponent()=0
Pure virtual hook for the subclass.
int getState() const
Retrieve current state of the ManagedIceObject.
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
PropertyDefinition< PropertyType > & defineOptionalProperty(const std::string &name, PropertyType defaultValue, const std::string &description="", PropertyDefinitionBase::PropertyConstness constness=PropertyDefinitionBase::eConstant)
void setValue(const T &val, std::string const &name)
ValueProxy< T > getValue(std::string const &name)
VirtualRobot::RobotPtr createLocalClone()
Clones the structure of this remote robot to a local instance.
static bool synchronizeLocalCloneToTimestamp(VirtualRobot::RobotPtr robot, RobotStateComponentInterfacePrx robotStatePrx, Ice::Long timestamp)
Synchronizes a local robot to a robot state at timestamp.
static IceUtil::Time GetTime(TimeMode timeMode=TimeMode::VirtualTime)
Get the current time.
Definition TimeUtil.cpp:42
void onInitComponent() override
Pure virtual hook for the subclass.
bool hasSharedMemorySupport(const Ice::Current &=Ice::emptyCurrent) override
void onDisconnectComponent() override
Hook for subclass.
bool getImagesAreUndistorted(const Ice::Current &=Ice::emptyCurrent) override
void onStartCapture(float frameRate) override
std::string getReferenceFrame(const Ice::Current &=Ice::emptyCurrent) override
MetaPointCloudFormatPtr getDefaultPointCloudFormat() override
default point cloud format used to initialize shared memory
void onConnectComponent() override
Pure virtual hook for the subclass.
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void setPointCloudFilename(const std::string &filename, const ::Ice::Current &=Ice::emptyCurrent) override
void onExitComponent() override
Hook for subclass.
StereoCalibration getStereoCalibration(const Ice::Current &=Ice::emptyCurrent) override
std::string getDefaultName() const override
A point cloud which keeps track of its reference coordinate frame and allows changing frames using ar...
void changeFrame(const std::string &newFrame, const VirtualRobot::RobotConstPtr &robot)
Transform the point cloud from the current frame to the new frame using the given reference robot.
void onInitComponent() override
void onDisconnectComponent() override
Hook for subclass.
void setImageFormat(ImageDimension imageDimension, ImageType imageType, BayerPatternType bayerPatternType=visionx::eBayerPatternRg)
Sets the image basic format data.
void provideImages(void **inputBuffers, const IceUtil::Time &imageTimestamp=IceUtil::Time())
send images raw.
void onConnectComponent() override
void setNumberImages(int numberImages)
Sets the number of images on each capture.
void onExitComponent() override
void providePointCloud(PointCloudPtrT pointCloudPtr)
offer the new point cloud.
#define ARMARX_INFO
The normal logging level.
Definition Logging.h:181
#define ARMARX_FATAL
The logging level for unexpected behaviour, that will lead to a seriously malfunctioning program and ...
Definition Logging.h:199
#define ARMARX_ERROR
The logging level for unexpected behaviour, that must be fixed.
Definition Logging.h:196
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:193
#define ARMARX_LOG
Definition Logging.h:165
#define ARMARX_VERBOSE
The logging level for verbose information.
Definition Logging.h:187
std::string const GlobalFrame
Variable of the global coordinate system.
Definition FramedPose.h:65
detail::IntSpinBoxBuilder makeIntSpinBox(std::string const &name)
detail::CheckBoxBuilder makeCheckBox(std::string const &name)
Definition BoolWidgets.h:27
detail::FloatSpinBoxBuilder makeFloatSpinBox(std::string const &name)
detail::SimpleGridLayoutBuilder makeSimpleGridLayout(std::string const &name="")
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::string GetHandledExceptionString()
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT > >
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition algorithm.h:351
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
size_t getBytesPerPoint(visionx::PointContentType pointContent)
MonocularCalibration createDefaultMonocularCalibration()
Creates a MonocularCalibration with all parameters set to a neutral value.
ArmarX headers.
SimpleGridLayoutBuilder & addTextLabel(std::string const &text, int colspan)
SimpleGridLayoutBuilder & addChild(WidgetPtr const &child, int colspan)
#define ARMARX_TRACE
Definition trace.h:77