解決ORB-SLAM ubuntu 16 ros-kineticでcatkin_makeコンパイル方式


文書ディレクトリ
  • は前の
  • に書いてあります
  • インストール依存
  • ダウンロードORB-SLAM
  • 以前のros_buildコンパイル方式をcatkin_に変更make方式
  • CmakeLists.txtファイル
  • を修正
  • package.xmlファイル
  • を追加
  • 何行かのファイル
  • を修正する
    前に書く
    ORB-SLAMソースファイルはROSベースのソフトウェアであり、使用するコンパイル方式はros_buildは、このように工事のメンテナンスに不便であり、他のパッケージとの結合にも不便であるため、ubuntu 16 ros-kinetic下catkin_に変更する方法を提案する.makeコンパイル方式、具体的な方式は以下の通りです
    インストール依存
  • マルチスレッドBoost library:launch the different threads of our SLAM system.sudo apt-get install libboost-all-dev
  • 画像処理OpenCV library:manipulate images and features
  • 図最適化g 2 o:use a modified version of g 2 o to perform optimizations(g 2 oはEigenライブラリに依存)sudo apt-get install libeigen 3-dev
  • ループ検出DboW 2:use of some components of the DboW 2 and Dlib library for place recognition and feature matching
  • ORB-SLAMのダウンロード
  • git cloneからros-workspaceまでのsrcディレクトリの下
  • 名前と工事名を小文字に変更(rospack名前は大文字をサポートしません)
  • 前のros_をbuildコンパイル方式をcatkin_に変更make方式
    CmakeLists.txtファイルの変更
    cmake_minimum_required(VERSION 2.8.3)
    project(orb-slam)
    
    
    # include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
    # rosbuild_init()
    # IF(NOT ROS_BUILD_TYPE)
    #   SET(ROS_BUILD_TYPE Release)
    # ENDIF()
    # MESSAGE("Build type: " ${ROS_BUILD_TYPE})
    
    
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall  -O3 -march=native")
    set(CMAKE_BUILD_TYPE "Release")
    set(CMAKE_CXX_FLAGS "-std=c++11")
    set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")
    
    ##              bin   
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    
    LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
    
    ##    ROS
    find_package(catkin REQUIRED COMPONENTS
        roscpp
        std_msgs
        sensor_msgs
        tf
        image_transport
        cv_bridge
        )
    
    find_package(OpenCV 3.1 REQUIRED)
    find_package(Eigen3 REQUIRED)
    
    catkin_package()
    
    include_directories(
        ${catkin_INCLUDE_DIRS}
        ${PROJECT_SOURCE_DIR}/include
        )
    
    include_directories(
      ${catkin_INCLUDE_DIRS}  
      ${PROJECT_SOURCE_DIR}
      ${EIGEN3_INCLUDE_DIR}
    )
    
    ##           
    # rosbuild_add_executable(${PROJECT_NAME}
    add_executable( ${PROJECT_NAME}
    src/main.cc
    src/Tracking.cc
    src/LocalMapping.cc
    src/LoopClosing.cc
    src/ORBextractor.cc
    src/ORBmatcher.cc
    src/FramePublisher.cc
    src/Converter.cc
    src/MapPoint.cc
    src/KeyFrame.cc
    src/Map.cc
    src/MapPublisher.cc
    src/Optimizer.cc
    src/PnPsolver.cc
    src/Frame.cc
    src/KeyFrameDatabase.cc
    src/Sim3Solver.cc
    src/Initializer.cc
    )
    # rosbuild_add_boost_directories()
    # rosbuild_link_boost(${PROJECT_NAME} thread)
    
    target_link_libraries(${PROJECT_NAME}
    ${catkin_LIBRARIES}
    ${OpenCV_LIBS}
    ${EIGEN3_LIBS}
    ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
    ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
    )
    
    
    

    package.xmlファイルの追加
    
    
      orb-slam
      0.0.0
      The ORB-SLAM package
    
       
      
      
      dvorak
    
    
      
      
      
      TODO
    
      
      
      
      
      
      
      
      
      
      
      
      catkin
      roscpp
      std_msgs
      sensor_msgs
      image_transport
      cv_bridge
    
      roscpp
      std_msgs
      sensor_msgs
      image_transport
      cv_bridge
      
    
    
      
      
        
        
    
        
    
      
    
    
    

    数行のファイルを変更
    src/orbextractor.ccヘッダファイルinclude include
    Thirdparty/g2o/g2o/solvers/linea_solver_eigen.h修正//typedef Eigen::PermutationMatrix<:dynamiceigen::dynamic="">>SparseMatrix::Index>PermutationMatrix;typedef Eigen::PermutationMatrix<:dynamic eigen::dynamic="">int> PermutationMatrix;
    これでcatkin_を使用できますMAKEコンパイルORB-SLAM