2424// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2525// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2626
27- #include " gtest/gtest.h"
28-
29- #include " g2o/core/block_solver.h"
30- #include " g2o/core/optimization_algorithm_gauss_newton.h"
31- #include " g2o/types/slam3d/types_slam3d.h"
32- #include " g2o/solvers/eigen/linear_solver_eigen.h"
27+ #include " allocate_optimizer.h"
28+ #include " g2o/core/sparse_optimizer.h"
3329#include " g2o/core/sparse_optimizer_terminate_action.h"
30+ #include " g2o/types/slam3d/types_slam3d.h"
31+ #include " gtest/gtest.h"
3432
35- typedef g2o::BlockSolver< g2o::BlockSolverTraits<-1 , -1 > > SlamBlockSolver;
36- typedef g2o::LinearSolverEigen<SlamBlockSolver::PoseMatrixType> SlamLinearSolver;
37-
38- TEST (General, ClearAndRedo)
39- {
33+ TEST (General, ClearAndRedo) {
4034 // Initialize the SparseOptimizer
41- g2o::SparseOptimizer mOptimizer ;
42- auto linearSolver = g2o::make_unique<SlamLinearSolver>();
43- linearSolver->setBlockOrdering (false );
44- auto blockSolver = g2o::make_unique<SlamBlockSolver>(std::move (linearSolver));
45- mOptimizer .setAlgorithm (new g2o::OptimizationAlgorithmGaussNewton (std::move (blockSolver)));
35+ std::unique_ptr<g2o::SparseOptimizer> mOptimizerPtr ;
36+ mOptimizerPtr .reset (g2o::internal::createOptimizerForTests ());
37+ g2o::SparseOptimizer& mOptimizer = *mOptimizerPtr ;
4638
4739 // Set the default terminate action
4840 g2o::SparseOptimizerTerminateAction* terminateAction = new g2o::SparseOptimizerTerminateAction;
4941 mOptimizer .addPostIterationAction (terminateAction);
5042
51- for (int i = 0 ; i < 2 ; i++)
52- {
43+ for (int i = 0 ; i < 2 ; i++) {
5344 // Add vertices
5445 g2o::VertexSE3* v0 = new g2o::VertexSE3;
55- v0->setEstimate (Eigen::Transform<number_t ,3 , 1 >(Eigen::Translation<number_t , 3 >(0 ,0 , 0 )));
46+ v0->setEstimate (Eigen::Transform<number_t , 3 , 1 >(Eigen::Translation<number_t , 3 >(0 , 0 , 0 )));
5647 v0->setId (0 );
5748 mOptimizer .addVertex (v0);
5849
5950 g2o::VertexSE3* v1 = new g2o::VertexSE3;
60- v1->setEstimate (Eigen::Transform<number_t ,3 , 1 >(Eigen::Translation<number_t , 3 >(0 ,0 , 0 )));
51+ v1->setEstimate (Eigen::Transform<number_t , 3 , 1 >(Eigen::Translation<number_t , 3 >(0 , 0 , 0 )));
6152 v1->setId (1 );
6253 mOptimizer .addVertex (v1);
6354
6455 g2o::VertexSE3* v2 = new g2o::VertexSE3;
65- v2->setEstimate (Eigen::Transform<number_t ,3 , 1 >(Eigen::Translation<number_t , 3 >(0 ,0 , 0 )));
56+ v2->setEstimate (Eigen::Transform<number_t , 3 , 1 >(Eigen::Translation<number_t , 3 >(0 , 0 , 0 )));
6657 v2->setId (2 );
6758 mOptimizer .addVertex (v2);
6859
6960 // Add edges
7061 g2o::EdgeSE3* e1 = new g2o::EdgeSE3 ();
7162 e1 ->vertices ()[0 ] = mOptimizer .vertex (0 );
7263 e1 ->vertices ()[1 ] = mOptimizer .vertex (1 );
73- e1 ->setMeasurement (g2o::Isometry3 (Eigen::Translation<number_t , 3 >(1 ,0 , 0 )));
64+ e1 ->setMeasurement (g2o::Isometry3 (Eigen::Translation<number_t , 3 >(1 , 0 , 0 )));
7465 e1 ->setInformation (g2o::MatrixN<6 >::Identity ());
7566 mOptimizer .addEdge (e1 );
7667
7768 g2o::EdgeSE3* e2 = new g2o::EdgeSE3 ();
7869 e2 ->vertices ()[0 ] = mOptimizer .vertex (1 );
7970 e2 ->vertices ()[1 ] = mOptimizer .vertex (2 );
80- e2 ->setMeasurement (g2o::Isometry3 (Eigen::Translation<number_t , 3 >(0 ,1 , 0 )));
71+ e2 ->setMeasurement (g2o::Isometry3 (Eigen::Translation<number_t , 3 >(0 , 1 , 0 )));
8172 e2 ->setInformation (g2o::MatrixN<6 >::Identity ());
8273 mOptimizer .addEdge (e2 );
8374
@@ -90,14 +81,13 @@ TEST(General, ClearAndRedo)
9081
9182 v0->setFixed (true );
9283
93- // mOptimizer.setVerbose(true);
84+ // mOptimizer.setVerbose(true);
9485 mOptimizer .initializeOptimization ();
9586 mOptimizer .computeInitialGuess ();
9687 mOptimizer .computeActiveErrors ();
9788 int iter = mOptimizer .optimize (10 );
98- if (iter <= 0 )
99- {
100- ADD_FAILURE ();
89+ if (iter <= 0 ) {
90+ ADD_FAILURE () << " Optimization did not happen" ;
10191 } else {
10292 SUCCEED ();
10393 }
0 commit comments