问题描述:
int g2o::csparse_extension::cs_cholsolsymb(const cs_di*, number_t*, const cs_dis*, number_t*, int*): cholesky failed!
Cholesky failure, writing debug.txt (Hessian loadable by Octave)
问题解决:
我的情况是将求解器从g2o::LinearSolverCSparse换为 g2o::LinearSolverEigen就OK了。
问题2:
[Switching to Thread 0x7fffcc8fd700 (LWP 14607)]
0x00007ffff7ab256f in void Eigen::internal::set_from_triplets<__gnu_cxx::__normal_iterator<Eigen::Triplet<double, int>*, std::vector<Eigen::Triplet<double, int>, std::allocator<Eigen::Triplet<double, int> > > >, Eigen::SparseMatrix<double, 0, int>, Eigen::internal::scalar_sum_op<double> >(__gnu_cxx::__normal_iterator<Eigen::Triplet<double, int>*, std::vector<Eigen::Triplet<double, int>, std::allocator<Eigen::Triplet<double, int> > > > const&, __gnu_cxx::__normal_iterator<Eigen::Triplet<double, int>*, std::vector<Eigen::Triplet<double, int>, std::allocator<Eigen::Triplet<double, int> > > > const&, Eigen::SparseMatrix<double, 0, int>&, Eigen::internal::scalar_sum_op<double>) ()
(gdb) bt
#0 0x00007ffff7ab256f in void Eigen::internal::set_from_triplets<__gnu_cxx::__normal_iterator<Eigen::Triplet<double, int>*, std::vector<Eigen::Triplet<double, int>, std::allocator<Eigen::Triplet<double, int> > > >, Eigen::SparseMatrix<double, 0, int>, Eigen::internal::scalar_sum_op<double> >(__gnu_cxx::__normal_iterator<Eigen::Triplet<double, int>*, std::vector<Eigen::Triplet<double, int>, std::allocator<Eigen::Triplet<double, int> > > > const&, __gnu_cxx::__normal_iterator<Eigen::Triplet<double, int>*, std::vector<Eigen::Triplet<double, int>, std::allocator<Eigen::Triplet<double, int> > > > const&, Eigen::SparseMatrix<double, 0, int>&, Eigen::internal::scalar_sum_op<double>) ()
#1 0x00007ffff7ab485f in g2o::LinearSolverEigen<Eigen::Matrix<double, 6, 6, 0, 6, 6> >::solve(g2o::SparseBlockMatrix<Eigen::Matrix<double, 6, 6, 0, 6, 6> > const&, double*, double*) ()
#2 0x00007ffff7aab48e in g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::solve() ()
#3 0x00007ffff3cf624e in g2o::OptimizationAlgorithmLevenberg::solve(int, bool) ()
from /usr/local/lib/libg2o_core.so
问题解决:
求解器的维度设置不正确,不能简单套用6_3进行求解。更换为
g2o::BlockSolverX::PoseMatrixType
即可。