g2o
Loading...
Searching...
No Matches
Public Slots | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
MainWindow Class Reference

main window of the g2o viewer More...

#include <main_window.h>

Inheritance diagram for MainWindow:
Inheritance graph
[legend]
Collaboration diagram for MainWindow:
Collaboration graph
[legend]

Public Slots

void on_actionLoad_triggered (bool)
 
void on_actionSave_triggered (bool)
 
void on_actionQuit_triggered (bool)
 
void on_actionWhite_Background_triggered (bool)
 
void on_actionDefault_Background_triggered (bool)
 
void on_actionProperties_triggered (bool)
 
void on_actionSave_Screenshot_triggered (bool)
 
void on_actionLoad_Viewer_State_triggered (bool)
 
void on_actionSave_Viewer_State_triggered (bool)
 
void on_btnOptimize_clicked ()
 
void on_btnInitialGuess_clicked ()
 
void on_btnSetZero_clicked ()
 
void on_btnForceStop_clicked ()
 
void on_btnOptimizerParameters_clicked ()
 
void on_btnReload_clicked ()
 
void on_actionLoad_triggered (bool)
 
void on_actionSave_triggered (bool)
 
void on_actionQuit_triggered (bool)
 
void on_btnOptimize_clicked ()
 
void on_btnInitialGuess_clicked ()
 

Public Member Functions

 MainWindow (QWidget *parent=0)
 
 ~MainWindow ()
 
void updateDisplayedSolvers ()
 
void updateRobustKernels ()
 
bool loadFromFile (const QString &filename)
 
 MainWindow (QWidget *parent=0)
 
 ~MainWindow ()
 

Protected Member Functions

void fixGraph ()
 
bool allocateSolver (bool &allocatedNewSolver)
 
bool prepare ()
 
void setRobustKernel ()
 
bool load (const QString &filename)
 
void fixGraph ()
 

Protected Attributes

std::vector< g2o::OptimizationAlgorithmProperty_knownSolvers
 
int _lastSolver
 
bool _forceStopFlag
 
g2o::OptimizationAlgorithmProperty _currentOptimizationAlgorithmProperty
 
g2o::OptimizationAlgorithm_currentSolver
 
ViewerPropertiesWidget_viewerPropertiesWidget
 
PropertiesWidget_optimizerPropertiesWidget
 
std::string _filename
 

Detailed Description

main window of the g2o viewer

Definition at line 39 of file main_window.h.

Constructor & Destructor Documentation

◆ MainWindow() [1/2]

MainWindow::MainWindow ( QWidget *  parent = 0)

Definition at line 40 of file main_window.cpp.

41 : QMainWindow(parent),
42 _lastSolver(-1),
46 _filename("") {
47 setupUi(this);
48 leKernelWidth->setValidator(new QDoubleValidator(
49 -numeric_limits<double>::max(), numeric_limits<double>::max(), 7, this));
50 plainTextEdit->setMaximumBlockCount(1000);
51 btnForceStop->hide();
52 QObject::connect(cbDrawAxis, SIGNAL(toggled(bool)), viewer,
53 SLOT(setAxisIsDrawn(bool)));
54}
int _lastSolver
Definition main_window.h:88
ViewerPropertiesWidget * _viewerPropertiesWidget
Definition main_window.h:93
g2o::OptimizationAlgorithm * _currentSolver
Definition main_window.h:91
PropertiesWidget * _optimizerPropertiesWidget
Definition main_window.h:94
std::string _filename
Definition main_window.h:95

◆ ~MainWindow() [1/2]

MainWindow::~MainWindow ( )

Definition at line 56 of file main_window.cpp.

56{}

◆ MainWindow() [2/2]

MainWindow::MainWindow ( QWidget *  parent = 0)

◆ ~MainWindow() [2/2]

MainWindow::~MainWindow ( )

Member Function Documentation

◆ allocateSolver()

bool MainWindow::allocateSolver ( bool &  allocatedNewSolver)
protected

Definition at line 272 of file main_window.cpp.

272 {
273 if (coOptimizer->count() == 0) {
274 cerr << "No solvers available" << endl;
275 return false;
276 }
277 int currentIndex = coOptimizer->currentIndex();
278 bool enabled = qobject_cast<QStandardItemModel*>(coOptimizer->model())
279 ->item(currentIndex)
280 ->isEnabled();
281
282 if (!enabled) {
283 cerr << "selected solver is not enabled" << endl;
284 return false;
285 }
286
287 if (currentIndex == _lastSolver) return true;
288
289 allocatedNewSolver = true;
290 QString strSolver = coOptimizer->currentText();
291
292 // delete the old optimization algorithm
293 OptimizationAlgorithm* algorithmPointer =
294 const_cast<OptimizationAlgorithm*>(viewer->graph->algorithm());
295 viewer->graph->setAlgorithm(0);
296 delete algorithmPointer;
297
298 // create the new algorithm
299 OptimizationAlgorithmFactory* solverFactory =
301 _currentSolver = solverFactory->construct(
302 strSolver.toStdString(), _currentOptimizationAlgorithmProperty);
303 viewer->graph->setAlgorithm(_currentSolver);
304
305 _lastSolver = currentIndex;
306 return true;
307}
g2o::OptimizationAlgorithmProperty _currentOptimizationAlgorithmProperty
Definition main_window.h:90
create solvers based on their short name
OptimizationAlgorithm * construct(const std::string &tag, OptimizationAlgorithmProperty &solverProperty) const
static OptimizationAlgorithmFactory * instance()
return the instance
Generic interface for a non-linear solver operating on a graph.

References _currentOptimizationAlgorithmProperty, _currentSolver, _lastSolver, g2o::OptimizationAlgorithmFactory::construct(), and g2o::OptimizationAlgorithmFactory::instance().

Referenced by on_btnOptimize_clicked(), and on_btnOptimizerParameters_clicked().

◆ fixGraph() [1/2]

void MainWindow::fixGraph ( )
protected

Definition at line 159 of file main_window.cpp.

159 {
160 if (viewer->graph->vertices().size() == 0 ||
161 viewer->graph->edges().size() == 0) {
162 return;
163 }
164
165 // check for vertices to fix to remove DoF
166 bool gaugeFreedom = viewer->graph->gaugeFreedom();
167 g2o::OptimizableGraph::Vertex* gauge = viewer->graph->findGauge();
168 if (gaugeFreedom) {
169 if (!gauge) {
170 cerr << "cannot find a vertex to fix in this thing" << endl;
171 return;
172 } else {
173 cerr << "graph is fixed by node " << gauge->id() << endl;
174 gauge->setFixed(true);
175 }
176 } else {
177 cerr << "graph is fixed by priors or nodes are already fixed" << endl;
178 }
179
180 viewer->graph->setVerbose(true);
181 // viewer->graph->computeActiveErrors();
182}
int id() const
returns the id
A general case Vertex for optimization.
const OptimizableGraph * graph() const
void setFixed(bool fixed)
true => this node should be considered fixed during the optimization

References g2o::OptimizableGraph::Vertex::graph(), g2o::HyperGraph::Vertex::id(), and g2o::OptimizableGraph::Vertex::setFixed().

Referenced by loadFromFile().

◆ fixGraph() [2/2]

void MainWindow::fixGraph ( )
protected

◆ load()

bool MainWindow::load ( const QString &  filename)
protected

Definition at line 242 of file main_window.cpp.

242 {
243 viewer->graph->clear();
244 bool loadStatus = false;
245 if (filename == "-") {
246 cerr << "reading stdin" << endl;
247 loadStatus = viewer->graph->load(cin);
248 } else {
249 ifstream ifs(filename.toStdString().c_str());
250 if (!ifs) return false;
251 loadStatus = viewer->graph->load(ifs);
252 }
253 if (!loadStatus) return false;
254 _lastSolver = -1;
255 viewer->setUpdateDisplay(true);
256 SparseOptimizer* optimizer = viewer->graph;
257
258 // update the solvers which are suitable for this graph
259 set<int> vertDims = optimizer->dimensions();
260 for (size_t i = 0; i < _knownSolvers.size(); ++i) {
262 if (sp.name == "" && sp.desc == "") continue;
263
264 bool suitableSolver = optimizer->isSolverSuitable(sp, vertDims);
265 qobject_cast<QStandardItemModel*>(coOptimizer->model())
266 ->item(i)
267 ->setEnabled(suitableSolver);
268 }
269 return loadStatus;
270}
std::vector< g2o::OptimizationAlgorithmProperty > _knownSolvers
Definition main_window.h:87
std::set< int > dimensions() const
bool isSolverSuitable(const OptimizationAlgorithmProperty &solverProperty, const std::set< int > &vertDims=std::set< int >()) const
std::string desc
short description of the solver
std::string name
name of the solver, e.g., var

References _knownSolvers, _lastSolver, g2o::OptimizationAlgorithmProperty::desc, g2o::OptimizableGraph::dimensions(), g2o::OptimizableGraph::isSolverSuitable(), and g2o::OptimizationAlgorithmProperty::name.

Referenced by loadFromFile().

◆ loadFromFile()

bool MainWindow::loadFromFile ( const QString &  filename)

load a graph on which we will operate from a file

Definition at line 380 of file main_window.cpp.

380 {
381 viewer->graph->clear();
382 bool loadStatus = load(filename);
383 if (loadStatus) {
384 _filename = filename.toStdString();
385 }
386 cerr << "loaded " << filename.toStdString() << " with "
387 << viewer->graph->vertices().size() << " vertices and "
388 << viewer->graph->edges().size() << " measurements" << endl;
389 viewer->update();
390 fixGraph();
391 return loadStatus;
392}
void fixGraph()
bool load(const QString &filename)

References _filename, fixGraph(), and load().

Referenced by on_actionLoad_triggered(), and g2o::RunG2OViewer::run().

◆ on_actionDefault_Background_triggered

void MainWindow::on_actionDefault_Background_triggered ( bool  )
slot

Definition at line 399 of file main_window.cpp.

399 {
400 viewer->setBackgroundColor(QColor::fromRgb(51, 51, 51));
401 viewer->update();
402}

◆ on_actionLoad_triggered [1/2]

void MainWindow::on_actionLoad_triggered ( bool  )
slot

Definition at line 58 of file main_window.cpp.

58 {
59 QString filename = QFileDialog::getOpenFileName(
60 this, "Load g2o file", "", "g2o files (*.g2o);;All Files (*)");
61 if (!filename.isNull()) {
62 loadFromFile(filename);
63 }
64}
bool loadFromFile(const QString &filename)

References loadFromFile().

◆ on_actionLoad_triggered [2/2]

void MainWindow::on_actionLoad_triggered ( bool  )
slot

◆ on_actionLoad_Viewer_State_triggered

void MainWindow::on_actionLoad_Viewer_State_triggered ( bool  )
slot

Definition at line 460 of file main_window.cpp.

460 {
461 QString filename = QFileDialog::getOpenFileName(
462 this, "Load State", "camera.xml", "Camera/State file (*.xml)");
463 if (!filename.isEmpty()) {
464 viewer->setStateFileName(filename);
465 viewer->restoreStateFromFile();
466 viewer->setStateFileName(QString());
467 viewer->update();
468 cerr << "Loaded state from " << filename.toStdString() << endl;
469 }
470}

◆ on_actionProperties_triggered

void MainWindow::on_actionProperties_triggered ( bool  )
slot

Definition at line 404 of file main_window.cpp.

404 {
407 _viewerPropertiesWidget->setWindowTitle(tr("Drawing Options"));
408 }
411}
void setViewer(g2o::G2oQGLViewer *viewer)

References _viewerPropertiesWidget, and ViewerPropertiesWidget::setViewer().

◆ on_actionQuit_triggered [1/2]

void MainWindow::on_actionQuit_triggered ( bool  )
slot

Definition at line 184 of file main_window.cpp.

184{ close(); }

◆ on_actionQuit_triggered [2/2]

void MainWindow::on_actionQuit_triggered ( bool  )
slot

◆ on_actionSave_Screenshot_triggered

void MainWindow::on_actionSave_Screenshot_triggered ( bool  )
slot

Definition at line 435 of file main_window.cpp.

435 {
436 QString selectedFilter;
437 QString filename = QFileDialog::getSaveFileName(
438 this, "Save screen to a file", "viewer.png",
439 "PNG files (*.png);;JPG files (*.jpg);;EPS files (*.eps)",
440 &selectedFilter);
441
442 if (!filename.isNull()) {
443 // extract the file format from the filter options
444 int spacePos = selectedFilter.indexOf(' ');
445 assert(spacePos > 0 && "extracting the image format failed");
446 QString format = selectedFilter.left(spacePos);
447 // setting up the snapshot and save to file
448 if (format == "JPG") {
449 viewer->setSnapshotQuality(90);
450 } else {
451 viewer->setSnapshotQuality(-1);
452 }
453 viewer->setSnapshotFormat(format);
454 viewer->saveSnapshot(filename);
455 cerr << "saved snapshot " << filename.toStdString() << "("
456 << format.toStdString() << ")" << endl;
457 }
458}

◆ on_actionSave_triggered [1/2]

void MainWindow::on_actionSave_triggered ( bool  )
slot

Definition at line 66 of file main_window.cpp.

66 {
67 QString filename = QFileDialog::getSaveFileName(this, "Save g2o file", "",
68 "g2o files (*.g2o)");
69 if (!filename.isNull()) {
70 ofstream fout(filename.toStdString().c_str());
71 viewer->graph->save(fout);
72 if (fout.good())
73 cerr << "Saved " << filename.toStdString() << endl;
74 else
75 cerr << "Error while saving file" << endl;
76 }
77}

◆ on_actionSave_triggered [2/2]

void MainWindow::on_actionSave_triggered ( bool  )
slot

◆ on_actionSave_Viewer_State_triggered

void MainWindow::on_actionSave_Viewer_State_triggered ( bool  )
slot

Definition at line 472 of file main_window.cpp.

472 {
473 QString filename = QFileDialog::getSaveFileName(
474 this, "Save State", "camera.xml", "Camera/State file (*.xml)");
475 if (!filename.isEmpty()) {
476 viewer->setStateFileName(filename);
477 viewer->saveStateToFile();
478 viewer->setStateFileName(QString());
479 cerr << "Saved state to " << filename.toStdString() << endl;
480 }
481}

◆ on_actionWhite_Background_triggered

void MainWindow::on_actionWhite_Background_triggered ( bool  )
slot

Definition at line 394 of file main_window.cpp.

394 {
395 viewer->setBackgroundColor(QColor::fromRgb(255, 255, 255));
396 viewer->update();
397}

◆ on_btnForceStop_clicked

void MainWindow::on_btnForceStop_clicked ( )
slot

Definition at line 378 of file main_window.cpp.

378{ _forceStopFlag = true; }
bool _forceStopFlag
Definition main_window.h:89

References _forceStopFlag.

◆ on_btnInitialGuess_clicked [1/2]

void MainWindow::on_btnInitialGuess_clicked ( )
slot

Definition at line 115 of file main_window.cpp.

115 {
116 if (viewer->graph->activeEdges().size() == 0)
117 viewer->graph->initializeOptimization();
118
119 switch (cbxIniitialGuessMethod->currentIndex()) {
120 case 0:
121 // spanning tree
122 viewer->graph->computeInitialGuess();
123 break;
124 case 1:
125 // odometry
126 {
127 EstimatePropagatorCostOdometry costFunction(viewer->graph);
128 viewer->graph->computeInitialGuess(costFunction);
129 }
130 break;
131 default:
132 cerr << __PRETTY_FUNCTION__ << " Unknown initialization method" << endl;
133 break;
134 }
135
136 viewer->setUpdateDisplay(true);
137 viewer->update();
138}
cost for traversing only odometry edges.
#define __PRETTY_FUNCTION__
Definition macros.h:90

References __PRETTY_FUNCTION__.

◆ on_btnInitialGuess_clicked [2/2]

void MainWindow::on_btnInitialGuess_clicked ( )
slot

◆ on_btnOptimize_clicked [1/2]

void MainWindow::on_btnOptimize_clicked ( )
slot

Definition at line 79 of file main_window.cpp.

79 {
80 if (viewer->graph->vertices().size() == 0 ||
81 viewer->graph->edges().size() == 0) {
82 cerr << "Graph has no vertices / edges" << endl;
83 return;
84 }
85
86 bool allocatedNewSolver;
87 bool allocateStatus = allocateSolver(allocatedNewSolver);
88 if (!allocateStatus) {
89 cerr << "Error while allocating solver" << endl;
90 return;
91 }
92 if (allocatedNewSolver) prepare();
94
95 btnOptimize->hide();
96 btnForceStop->show();
97
98 _forceStopFlag = false;
99 viewer->graph->setForceStopFlag(&_forceStopFlag);
100
101 int maxIterations = spIterations->value();
102 int iter = viewer->graph->optimize(maxIterations);
103 if (maxIterations > 0 && !iter) {
104 cerr << "Optimization failed, result might be invalid" << endl;
105 }
106
107 btnOptimize->show();
108 btnForceStop->hide();
109
110 viewer->setUpdateDisplay(true);
111 viewer->update();
112 _forceStopFlag = false;
113}
bool allocateSolver(bool &allocatedNewSolver)
void setRobustKernel()

References _forceStopFlag, allocateSolver(), prepare(), and setRobustKernel().

◆ on_btnOptimize_clicked [2/2]

void MainWindow::on_btnOptimize_clicked ( )
slot

◆ on_btnOptimizerParameters_clicked

void MainWindow::on_btnOptimizerParameters_clicked ( )
slot

Definition at line 413 of file main_window.cpp.

413 {
416 _optimizerPropertiesWidget->setWindowTitle(
417 tr("Internal Solver Properties"));
418 }
419 bool allocatedNewSolver;
420 bool allocateStatus = allocateSolver(allocatedNewSolver);
421 if (!allocateStatus) {
422 cerr << "Error while allocating solver" << endl;
423 return;
424 }
425 if (allocatedNewSolver) prepare();
426 if (_currentSolver) {
428 const_cast<g2o::PropertyMap*>(&_currentSolver->properties()));
429 } else {
431 }
433}
void setProperties(g2o::PropertyMap *properties)
const PropertyMap & properties() const
return the properties of the solver
a collection of properties mapping from name to the property itself
Definition property.h:78

References _currentSolver, _optimizerPropertiesWidget, allocateSolver(), prepare(), g2o::OptimizationAlgorithm::properties(), and PropertiesWidget::setProperties().

◆ on_btnReload_clicked

void MainWindow::on_btnReload_clicked ( )
slot

Definition at line 149 of file main_window.cpp.

149 {
150 if (_filename.length() > 0) {
151 cerr << "reloading " << _filename << endl;
152 viewer->graph->clear();
153 viewer->graph->load(_filename.c_str());
154 viewer->setUpdateDisplay(true);
155 viewer->update();
156 }
157}

References _filename.

◆ on_btnSetZero_clicked

void MainWindow::on_btnSetZero_clicked ( )
slot

Definition at line 140 of file main_window.cpp.

140 {
141 if (viewer->graph->activeEdges().size() == 0)
142 viewer->graph->initializeOptimization();
143
144 viewer->graph->setToOrigin();
145 viewer->setUpdateDisplay(true);
146 viewer->update();
147}

◆ prepare()

bool MainWindow::prepare ( )
protected

Definition at line 309 of file main_window.cpp.

309 {
310 SparseOptimizer* optimizer = viewer->graph;
312 cerr << "Marginalizing Landmarks" << endl;
313 for (SparseOptimizer::VertexIDMap::const_iterator it =
314 optimizer->vertices().begin();
315 it != optimizer->vertices().end(); ++it) {
317 static_cast<OptimizableGraph::Vertex*>(it->second);
318 int vdim = v->dimension();
321 }
322 } else {
323 cerr << "Preparing (no marginalization of Landmarks)" << endl;
324 for (SparseOptimizer::VertexIDMap::const_iterator it =
325 optimizer->vertices().begin();
326 it != optimizer->vertices().end(); ++it) {
328 static_cast<OptimizableGraph::Vertex*>(it->second);
329 v->setMarginalized(false);
330 }
331 }
332 viewer->graph->initializeOptimization();
333 return true;
334}
const VertexIDMap & vertices() const
int dimension() const
dimension of the estimated state belonging to this node
void setMarginalized(bool marginalized)
true => this node should be marginalized out during the optimization
int landmarkDim
dimension of the landmark vertices (-1 if variable)

References _currentOptimizationAlgorithmProperty, g2o::OptimizableGraph::Vertex::dimension(), g2o::OptimizationAlgorithmProperty::landmarkDim, g2o::OptimizationAlgorithmProperty::requiresMarginalize, g2o::OptimizableGraph::Vertex::setMarginalized(), and g2o::HyperGraph::vertices().

Referenced by on_btnOptimize_clicked(), and on_btnOptimizerParameters_clicked().

◆ setRobustKernel()

void MainWindow::setRobustKernel ( )
protected

Definition at line 336 of file main_window.cpp.

336 {
337 SparseOptimizer* optimizer = viewer->graph;
338 bool robustKernel = cbRobustKernel->isChecked();
339 double huberWidth = leKernelWidth->text().toDouble();
340 // odometry edges are those whose node ids differ by 1
341
342 bool onlyLoop = cbOnlyLoop->isChecked();
343
344 if (robustKernel) {
345 QString strRobustKernel = coRobustKernel->currentText();
347 RobustKernelFactory::instance()->creator(strRobustKernel.toStdString());
348 if (!creator) {
349 cerr << strRobustKernel.toStdString() << " is not a valid robust kernel"
350 << endl;
351 return;
352 }
353 for (SparseOptimizer::EdgeSet::const_iterator it =
354 optimizer->edges().begin();
355 it != optimizer->edges().end(); ++it) {
356 OptimizableGraph::Edge* e = static_cast<OptimizableGraph::Edge*>(*it);
357 if (onlyLoop) {
358 if (e->vertices().size() >= 2 &&
359 std::abs(e->vertex(0)->id() - e->vertex(1)->id()) != 1) {
360 e->setRobustKernel(creator->construct());
361 e->robustKernel()->setDelta(huberWidth);
362 }
363 } else {
364 e->setRobustKernel(creator->construct());
365 e->robustKernel()->setDelta(huberWidth);
366 }
367 }
368 } else {
369 for (SparseOptimizer::EdgeSet::const_iterator it =
370 optimizer->edges().begin();
371 it != optimizer->edges().end(); ++it) {
372 OptimizableGraph::Edge* e = static_cast<OptimizableGraph::Edge*>(*it);
373 e->setRobustKernel(0);
374 }
375 }
376}
Abstract interface for allocating a robust kernel.
virtual RobustKernel * construct()=0
const VertexContainer & vertices() const
const Vertex * vertex(size_t i) const
const EdgeSet & edges() const
void setRobustKernel(RobustKernel *ptr)
RobustKernel * robustKernel() const
if NOT NULL, error of this edge will be robustifed with the kernel
AbstractRobustKernelCreator * creator(const std::string &tag) const
static RobustKernelFactory * instance()
return the instance
virtual void setDelta(double delta)

References g2o::AbstractRobustKernelCreator::construct(), g2o::RobustKernelFactory::creator(), g2o::HyperGraph::edges(), g2o::HyperGraph::Vertex::id(), g2o::RobustKernelFactory::instance(), g2o::OptimizableGraph::Edge::robustKernel(), g2o::RobustKernel::setDelta(), g2o::OptimizableGraph::Edge::setRobustKernel(), g2o::HyperGraph::Edge::vertex(), and g2o::HyperGraph::Edge::vertices().

Referenced by on_btnOptimize_clicked().

◆ updateDisplayedSolvers()

void MainWindow::updateDisplayedSolvers ( )

list the available solvers in the GUI

Definition at line 186 of file main_window.cpp.

186 {
187 coOptimizer->clear();
188 _knownSolvers.clear();
191
192 bool varFound = false;
193 string varType = "";
194 for (OptimizationAlgorithmFactory::CreatorList::const_iterator it =
195 knownSolvers.begin();
196 it != knownSolvers.end(); ++it) {
197 const OptimizationAlgorithmProperty& sp = (*it)->property();
198 if (sp.name == "gn_var" || sp.name == "gn_var_cholmod") {
199 varType = sp.type;
200 varFound = true;
201 break;
202 }
203 }
204
205 if (varFound) {
206 for (OptimizationAlgorithmFactory::CreatorList::const_iterator it =
207 knownSolvers.begin();
208 it != knownSolvers.end(); ++it) {
209 const OptimizationAlgorithmProperty& sp = (*it)->property();
210 if (sp.type == varType) {
211 coOptimizer->addItem(QString::fromStdString(sp.name));
212 _knownSolvers.push_back(sp);
213 }
214 }
215 }
216
217 map<string, vector<OptimizationAlgorithmProperty> > solverLookUp;
218
219 for (OptimizationAlgorithmFactory::CreatorList::const_iterator it =
220 knownSolvers.begin();
221 it != knownSolvers.end(); ++it) {
222 const OptimizationAlgorithmProperty& sp = (*it)->property();
223 if (varFound && varType == sp.type) continue;
224 solverLookUp[sp.type].push_back(sp);
225 }
226
227 for (map<string, vector<OptimizationAlgorithmProperty> >::iterator it =
228 solverLookUp.begin();
229 it != solverLookUp.end(); ++it) {
230 if (_knownSolvers.size() > 0) {
231 coOptimizer->insertSeparator(coOptimizer->count());
233 }
234 const vector<OptimizationAlgorithmProperty>& vsp = it->second;
235 for (size_t j = 0; j < vsp.size(); ++j) {
236 coOptimizer->addItem(QString::fromStdString(vsp[j].name));
237 _knownSolvers.push_back(vsp[j]);
238 }
239 }
240}
const CreatorList & creatorList() const
return the underlying list of creators
std::list< std::shared_ptr< AbstractOptimizationAlgorithmCreator > > CreatorList
std::string type
type of solver, e.g., "CSparse Cholesky", "PCG"

References _knownSolvers, g2o::OptimizationAlgorithmFactory::creatorList(), g2o::OptimizationAlgorithmFactory::instance(), g2o::OptimizationAlgorithmProperty::name, and g2o::OptimizationAlgorithmProperty::type.

Referenced by g2o::RunG2OViewer::run().

◆ updateRobustKernels()

void MainWindow::updateRobustKernels ( )

list the available robust kernels in the GUI

Definition at line 483 of file main_window.cpp.

483 {
484 coRobustKernel->clear();
485 std::vector<std::string> kernels;
487 for (size_t i = 0; i < kernels.size(); ++i) {
488 coRobustKernel->addItem(QString::fromStdString(kernels[i]));
489 }
490}
void fillKnownKernels(std::vector< std::string > &types) const

References g2o::RobustKernelFactory::fillKnownKernels(), and g2o::RobustKernelFactory::instance().

Referenced by g2o::RunG2OViewer::run().

Member Data Documentation

◆ _currentOptimizationAlgorithmProperty

g2o::OptimizationAlgorithmProperty MainWindow::_currentOptimizationAlgorithmProperty
protected

Definition at line 90 of file main_window.h.

Referenced by allocateSolver(), and prepare().

◆ _currentSolver

g2o::OptimizationAlgorithm* MainWindow::_currentSolver
protected

Definition at line 91 of file main_window.h.

Referenced by allocateSolver(), and on_btnOptimizerParameters_clicked().

◆ _filename

std::string MainWindow::_filename
protected

Definition at line 95 of file main_window.h.

Referenced by loadFromFile(), and on_btnReload_clicked().

◆ _forceStopFlag

bool MainWindow::_forceStopFlag
protected

Definition at line 89 of file main_window.h.

Referenced by on_btnForceStop_clicked(), and on_btnOptimize_clicked().

◆ _knownSolvers

std::vector<g2o::OptimizationAlgorithmProperty> MainWindow::_knownSolvers
protected

Definition at line 87 of file main_window.h.

Referenced by load(), and updateDisplayedSolvers().

◆ _lastSolver

int MainWindow::_lastSolver
protected

Definition at line 88 of file main_window.h.

Referenced by allocateSolver(), and load().

◆ _optimizerPropertiesWidget

PropertiesWidget* MainWindow::_optimizerPropertiesWidget
protected

Definition at line 94 of file main_window.h.

Referenced by on_btnOptimizerParameters_clicked().

◆ _viewerPropertiesWidget

ViewerPropertiesWidget* MainWindow::_viewerPropertiesWidget
protected

Definition at line 93 of file main_window.h.

Referenced by on_actionProperties_triggered().


The documentation for this class was generated from the following files: