ubuntu18.04-ROS_melodoc下编译和运行SVO(使用数据集)
安装指南:参考以下博客
https://blog.csdn.net/chentianting/article/details/82908402
参考以上博客,可基本运行SVO,但有些还会出现以下问题
1、关于G2O
如果使用的是新版G2O,在设置/catkin_ws/src/SVO/rpg_svo/svo/CMakeLists.txt中,SET(HAVE_G2O TRUE)之后,会报错,报错位置在/catkin_ws/src/SVO/rpg_svo/svo/src/bundle_adjustment.cpp中,错误语句为:
g2o::BlockSolver_6_3::LinearSolverType* linearSolver;
linearSolver = new g2o::LinearSolverCholmod<g2o::BlockSolver_6_3::PoseMatrixType>();
g2o::BlockSolver_6_3 * solver_ptr = new g2o::BlockSolver_6_3(linearSolver);
g2o::OptimizationAlgorithmLevenberg * solver = new g2o::OptimizationAlgorithmLevenberg(solver_ptr);
可更改为:
#if SCHUR_TRICK
// solver
//g2o::BlockSolver_6_3::LinearSolverType* linearSolver;
std::unique_ptr<g2o::BlockSolver_6_3::LinearSolverType> linearSolver(new g2o::LinearSolverCholmod<g2o::BlockSolver_6_3::PoseMatrixType>());
//g2o::BlockSolver_6_3* solver_ptr = new g2o::BlockSolver_6_3( std::unique_ptr<g2o::BlockSolver_6_3::LinearSolverType>(linearSolver) );
std::unique_ptr<g2o::BlockSolver_6_3> solver_ptr(new g2o::BlockSolver_6_3(std::move(linearSolver)));
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(std::move(solver_ptr) );
//linearSolver = new g2o::LinearSolverCSparse<g2o::BlockSolver_6_3::PoseMatrixType>();
#else
std::unique_ptr<g2o::BlockSolverX::LinearSolverType> linearSolver(new g2o::LinearSolverCholmod<g2o::BlockSolverX::PoseMatrixType>());
//linearSolver = new g2o::LinearSolverCSparse<g2o::BlockSolverX::PoseMatrixType>();
std::unique_ptr<g2o::BlockSolverX> solver_ptr(new g2o::BlockSolverX(std::move(linearSolver)));
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(std::move(solver_ptr));
#endif
2、编译没错误,但在运行时只运行一两秒就报错,错误信息:
CLEAR PARAMETERS
/svo/
PARAMETERS
/rosdistro: melodic
/rosversion: 1.12.5
/svo/cam_cx: 0.45905
/svo/cam_cy: 0.510056
/svo/cam_d0: 0.932
/svo/cam_fx: 0.509326
/svo/cam_fy: 0.796651
/svo/cam_height: 480
/svo/cam_model: ATAN
/svo/cam_topic: /camera/image_raw
/svo/cam_width: 752
/svo/grid_size: 30
/svo/init_rx: 3.14
/svo/init_ry: 0.0
/svo/init_rz: 0.0
/svo/loba_num_iter: 0
/svo/max_n_kfs: 10
NODES
/
svo (svo_ros/vo)
auto-starting new master
process[master]: started with pid [24647]
ROS_MASTER_URI=http://localhost:11311
set