编译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配置