Ubuntu 编译ORB_SLAM2_modified

编译g2o_with_orbslam2

1.修改g2o/types/slam2d/edge_se2_pointxy_bearing.cpp

t.setRotation(t.rotation().angle()+_measurement);  --->>>  t.setRotation((Eigen::Rotation2Dd)(t.rotation().angle()+_measurement));

2.修改g2o/solvers/eigen/linear_solver_eigen.h

typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;  --->>>  typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::StorageIndex> PermutationMatrix;

(报错信息关键字:YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)

3.修改g2o/g2o/examples/tutorial_slam2d/simulator.cpp: 80行

VectorXd probLimits(MO_NUM_ELEMS);   --->>>   VectorXd probLimits;  probLimits.resize(MO_NUM_ELEMS);

(报错信息关键字:FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED)

编译ORB_SLAM2_modified

1.编译DBoW2

cd ~/ORB_SLAM2_modified/Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8

2.编译ORB_SLAM2_modified

cd ~/ORB_SLAM2_modified
mkdir build cd build cmake ..
-DCMAKE_BUILD_TYPE=Release make -j8

编译完成之后发现只能显示不能保存,然后查看代码进行修改:

在/src/pointcloudmapping.cc中加入PCL保存头文件

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

然后在PointCloudMapping::viewer -->> while()函数最后面加入

    if(globalMap->points.size())
    {
    pcl::io::savePCDFileASCII ("test_pcd.pcd", *globalMap);
    cout<< endl << "Saved PCD Successful!!" << endl;
    }
    }
}

编译ORB_SLAM2_modified——ROS

1.更改~/ORB_SLAM2-master/Examples/ROS/ORB_SLAM2/src/ros_mono.cc中(更改接口,否则运行黑屏)(RGBD 即Kinect同理)

ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
>
ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);

2.修改CMakeLists.txt

在相似位置添加

find_package( PCL 1.7 REQUIRED )
${PCL_INCLUDE_DIRS}

在“Set{”上面加入

add_definitions( ${PCL_DEFINITIONS} )
link_directories( ${PCL_LIBRARY_DIRS} )

修改

find_package(OpenCV 2.3.9 REQUIRED)
>
find_package(OpenCV 3.2.0 REQUIRED)   (本机Opencv版本号)

修改

${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
>
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_calibration_odom_laser.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_cli.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_core.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_csparse_extension.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_ext_csparse.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_ext_freeglut_minimal.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_hierarchical.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_incremental.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_interactive.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_interface.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_opengl_helper.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_parser.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_simulator.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_cholmod.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_csparse.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_dense.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_eigen.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_pcg.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_slam2d_linear.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_solver_structure_only.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_stuff.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_tutorial_slam2d.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_data.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_icp.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_sba.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_sclam2d.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_sim3.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_slam2d.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_slam2d_addons.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_slam3d.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_types_slam3d_addons.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o_with_orbslam2/lib/libg2o_viewer.so

 3.编译

cd ~/ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8

编译遇到的错误

1.遇到:*** No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so', needed by '../lib/libORB_SLAM2.so'。 停止。

解决办法:

sudo apt-get install libproj-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/x86_64-linux-gnu/libproj.so

2.遇到:/usr/bin/ld: 找不到 -lvtkproj4

解决办法:

在CMakeLists.txt中加上以下内容

find_package(OpenCV 3.2.0 REQUIRED)
find_package(Eigen3 3.1.0 REQUIRED)
find_package(Pangolin REQUIRED)
find_package( G2O REQUIRED )
find_package( PCL 1.7 REQUIRED )

list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")

include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${EIGEN3_INCLUDE_DIR}
${Pangolin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)

 其他问题请参考另外两篇文章:

https://www.cnblogs.com/haijian/p/10226678.html  Ubuntu配置ORB-SLAM2过程中的问题
https://www.cnblogs.com/haijian/p/9734014.html  Ubuntu 16.04 orb-slam2配置
原文地址:https://www.cnblogs.com/haijian/p/10788141.html