28 #include <QListWidget>
29 #include <QPushButton>
44 updateTimer =
new QTimer(
this);
55 pointCloudProviderNames.clear();
56 QList<QVariant>
names = settings->value(
"pointCloudProviderNames", QList<QVariant>()).toList();
57 for (
int i = 0; i <
names.count(); i++)
59 pointCloudProviderNames.push_back(
names[i].
toString().toStdString());
62 filteredPointCloudProviderNames.clear();
63 names = settings->value(
"filteredPointCloudProviderNames", QList<QVariant>()).toList();
64 for (
int i = 0; i <
names.count(); i++)
66 filteredPointCloudProviderNames.push_back(
names[i].
toString().toStdString());
69 pointCloudProviderDisplayNames.clear();
70 names = settings->value(
"pointCloudProviderDisplayNames", QList<QVariant>()).toList();
71 for (
int i = 0; i <
names.count(); i++)
73 pointCloudProviderDisplayNames.push_back(
names[i].
toString().toStdString());
76 pipelineConfigFiles.clear();
77 names = settings->value(
"pipelineConfigFiles", QList<QVariant>()).toList();
78 for (
int i = 0; i <
names.count(); i++)
80 pipelineConfigFiles.push_back(
names[i].
toString().toStdString());
83 pointCloudSegmenterName =
84 settings->value(
"pointCloudSegmenterName",
"").toString().toStdString();
85 primitiveExtractorName = settings->value(
"primitiveExtractorName",
"").toString().toStdString();
86 affordanceExtractionName =
87 settings->value(
"affordanceExtractionName",
"").toString().toStdString();
88 pipelineVisualizationName =
89 settings->value(
"pipelineVisualizationName",
"").toString().toStdString();
90 robotStateComponentName =
91 settings->value(
"robotStateComponentName",
"").toString().toStdString();
92 platform = settings->value(
"platform",
"").toString().toStdString();
98 QList<QVariant>
names;
99 for (
auto& name : pointCloudProviderNames)
101 names.append(QString::fromStdString(name));
103 settings->setValue(
"pointCloudProviderNames",
names);
106 for (
auto& name : filteredPointCloudProviderNames)
108 names.append(QString::fromStdString(name));
110 settings->setValue(
"filteredPointCloudProviderNames",
names);
113 for (
auto& name : pointCloudProviderDisplayNames)
115 names.append(QString::fromStdString(name));
117 settings->setValue(
"pointCloudProviderDisplayNames",
names);
120 for (
auto&
filename : pipelineConfigFiles)
124 settings->setValue(
"pipelineConfigFiles",
names);
126 settings->setValue(
"pointCloudSegmenterName", QString::fromStdString(pointCloudSegmenterName));
127 settings->setValue(
"primitiveExtractorName", QString::fromStdString(primitiveExtractorName));
128 settings->setValue(
"affordanceExtractionName",
129 QString::fromStdString(affordanceExtractionName));
130 settings->setValue(
"pipelineVisualizationName",
131 QString::fromStdString(pipelineVisualizationName));
132 settings->setValue(
"robotStateComponentName", QString::fromStdString(robotStateComponentName));
133 settings->setValue(
"platform", QString::fromStdString(platform));
139 for (
auto& provider : pointCloudProviderNames)
144 for (
auto& provider : filteredPointCloudProviderNames)
159 pointCloudProviders.clear();
160 for (
auto& provider : pointCloudProviderNames)
162 pointCloudProviders.push_back(
163 getProxy<visionx::CapturingPointCloudProviderInterfacePrx>(provider));
166 filteredPointCloudProviders.clear();
167 for (
auto& provider : filteredPointCloudProviderNames)
169 filteredPointCloudProviders.push_back(
170 getProxy<armarx::PointCloudFilterInterfacePrx>(provider));
173 pointCloudSegmenter =
174 getProxy<visionx::PointCloudSegmenterInterfacePrx>(pointCloudSegmenterName);
175 primitiveExtractor = getProxy<visionx::PrimitiveMapperInterfacePrx>(primitiveExtractorName);
176 affordanceExtraction = getProxy<AffordanceExtractionInterfacePrx>(affordanceExtractionName);
177 pipelineVisualization =
178 getProxy<AffordancePipelineVisualizationInterfacePrx>(pipelineVisualizationName);
179 robotStateComponent = getProxy<RobotStateComponentInterfacePrx>(robotStateComponentName);
182 widget.comboBoxSegmentation->clear();
183 for (
unsigned int i = 0; i < pipelineConfigFiles.size(); i++)
185 widget.comboBoxSegmentation->addItem(QString::fromStdString(
"C" +
std::to_string(i)));
189 widget.comboBoxPointCloudSource->clear();
190 for (
auto& provider : pointCloudProviderDisplayNames)
192 widget.comboBoxPointCloudSource->addItem(QString::fromStdString(provider));
194 widget.comboBoxPointCloudSource->setCurrentIndex(0);
198 pipelineVisualization->clearVisualization();
202 connect(widget.pushButtonStart, SIGNAL(clicked()),
this, SLOT(
startPipeline()));
203 connect(widget.pushButtonPause, SIGNAL(clicked()),
this, SLOT(
pausePipeline()));
204 connect(widget.pushButtonStep, SIGNAL(clicked()),
this, SLOT(
stepPipeline()));
206 connect(widget.comboBoxCropping,
207 SIGNAL(currentIndexChanged(
int)),
210 connect(widget.comboBoxPointCloudSource,
211 SIGNAL(currentIndexChanged(
int)),
214 connect(widget.comboBoxSegmentation,
215 SIGNAL(currentIndexChanged(
int)),
218 connect(widget.checkBoxShowPrimitives,
219 SIGNAL(toggled(
bool)),
222 connect(widget.checkBoxShowAffordances,
223 SIGNAL(toggled(
bool)),
228 updateTimer->start(500);
231 widget.comboBoxCropping->setCurrentIndex(3);
234 widget.comboBoxSegmentation->setCurrentIndex(0);
239 QMetaObject::invokeMethod(
240 this,
"visualizationOptionsChanged", Qt::QueuedConnection, Q_ARG(
bool,
true));
257 widget.labelProviderStatus->setText(
"Stopped");
258 widget.labelSegmenterStatus->setText(
"Stopped");
259 widget.labelPrimitivesStatus->setText(
"Stopped");
260 widget.labelAffordancesStatus->setText(
"Stopped");
268 bool providerStatus = pointCloudProviders[currentPointCloudProvider]->isCaptureEnabled();
269 bool segmenterStatus = pointCloudSegmenter->isPipelineStepEnabled();
270 bool primitivesStatus = primitiveExtractor->isPipelineStepEnabled();
271 bool affordancesStatus = affordanceExtraction->isPipelineStepEnabled();
273 widget.labelProviderStatus->setText(providerStatus ?
"Running" :
"Paused");
274 widget.labelSegmenterStatus->setText(segmenterStatus ?
"Running" :
"Paused");
275 widget.labelPrimitivesStatus->setText(primitivesStatus ?
"Running" :
"Paused");
276 widget.labelAffordancesStatus->setText(affordancesStatus ?
"Running" :
"Paused");
278 widget.labelProviderTimestamp->setText(formatTimestamp(
279 pointCloudProviders[currentPointCloudProvider]->getPointCloudFormat()->timeProvided));
280 widget.labelSegmenterTimestamp->setText(
281 formatTimestamp(pointCloudSegmenter->getLastProcessedTimestamp()->timestamp));
282 widget.labelPrimitivesTimestamp->setText(
283 formatTimestamp(primitiveExtractor->getLastProcessedTimestamp()->timestamp));
284 widget.labelAffordancesTimestamp->setText(
285 formatTimestamp(affordanceExtraction->getLastProcessedTimestamp()->timestamp));
287 bool status = providerStatus && segmenterStatus && primitivesStatus && affordancesStatus;
288 widget.pushButtonStart->setEnabled(!
status);
289 widget.pushButtonPause->setEnabled(
status);
290 widget.pushButtonStep->setEnabled(!
status);
292 catch (
const Ice::ConnectionRefusedException& e)
303 pointCloudSegmenter->enablePipelineStep();
304 primitiveExtractor->enablePipelineStep();
305 affordanceExtraction->enablePipelineStep();
306 pointCloudProviders[currentPointCloudProvider]->begin_startCapture();
314 pointCloudProviders[currentPointCloudProvider]->begin_stopCapture();
315 pointCloudSegmenter->disablePipelineStep();
316 primitiveExtractor->disablePipelineStep();
317 affordanceExtraction->disablePipelineStep();
325 pointCloudSegmenter->enablePipelineStep();
326 primitiveExtractor->enablePipelineStep();
327 affordanceExtraction->enablePipelineStep();
328 pointCloudProviders[currentPointCloudProvider]->begin_startCaptureForNumFrames(1);
334 pipelineVisualization->begin_enableVisualization(widget.checkBoxShowPrimitives->isChecked(),
335 widget.checkBoxShowAffordances->isChecked(),
343 QFileDialog::getOpenFileName(
344 getWidget(), tr(
"Open Affordance Scene"),
"~", tr(
"Scene Files (*.scene)"))
351 affordanceExtraction->importScene(
filename);
357 std::string
filename = QFileDialog::getSaveFileName(
358 NULL, tr(
"Save Affordance Scene"),
"", tr(
"Scene Files (*.scene)"))
365 affordanceExtraction->exportScene(
filename);
375 PosePtr::dynamicCast(robotStateComponent->getSynchronizedRobot()->getGlobalPose())
382 min << -10000, -10000, -10000;
383 max << 10000, 10000, 10000;
387 min << -3000, 300, 0 - root_z;
388 max << 3000, 3000, 3000 - root_z;
392 min << -2000, 300, 300 - root_z;
393 max << 2000, 3000, 2500 - root_z;
397 min << -1000, 300, 600 - root_z;
398 max << 1000, 2000, 1500 - root_z;
402 min << -500, 300, 1000 - root_z;
403 max << 500, 2000, 1500 - root_z;
411 for (
auto& provider : filteredPointCloudProviders)
420 currentPointCloudProvider =
index;
421 pointCloudSegmenter->begin_changePointCloudProvider(
422 filteredPointCloudProviderNames[currentPointCloudProvider] +
"Result");
430 if (
index < 0 ||
static_cast<std::size_t
>(
index) >= pipelineConfigFiles.size())
435 primitiveExtractor->loadParametersFromFile(pipelineConfigFiles[
index]);
436 pointCloudSegmenter->loadLccpParametersFromFile(pipelineConfigFiles[
index]);
440 AffordancePipelineGuiWidgetController::formatTimestamp(
long timestamp)
443 return QString(time.toDateTime().substr(time.toDateTime().find(
' ') + 1).c_str());
454 return qobject_cast<AffordancePipelineGuiConfigDialog*>(configDialog);
460 pointCloudProviderNames = configDialog->getProviderNames();
461 pointCloudProviderDisplayNames = configDialog->getProviderDisplayNames();
462 filteredPointCloudProviderNames = configDialog->getFilteredProviderNames();
463 pipelineConfigFiles = configDialog->getPipelineConfigurationFiles();
465 pointCloudSegmenterName =
466 configDialog->pointCloudSegmenterProxyFinder->getSelectedProxyName().toStdString();
467 primitiveExtractorName =
468 configDialog->primitiveExtractorProxyFinder->getSelectedProxyName().toStdString();
469 affordanceExtractionName =
470 configDialog->affordanceExtractionProxyFinder->getSelectedProxyName().toStdString();
471 pipelineVisualizationName =
472 configDialog->pipelineVisualizationProxyFinder->getSelectedProxyName().toStdString();
473 robotStateComponentName =
474 configDialog->robotStateComponentProxyFinder->getSelectedProxyName().toStdString();
475 platform = configDialog->getPlatform();
483 if (parent != customToolbar->parent())
485 customToolbar->setParent(parent);
488 return customToolbar;
491 customToolbar =
new QToolBar(parent);
492 customToolbar->setIconSize(QSize(16, 16));
493 customToolbar->addAction(
494 QIcon(
":/icons/document-open-folder.png"),
"Load Scene File",
this, SLOT(
loadScene()));
495 customToolbar->addAction(
496 QIcon(
":/icons/document-save-5.ico"),
"Save Scene File",
this, SLOT(
saveScene()));
498 return customToolbar;