Ubuntu18.04オープンソースプロジェクトDynaSLAMの構成


基本環境:ubuntu 18.04+python2.7+opencv2.4.11
 
ubuntu18.04ソフトウェアソースを更新する必要があります.具体的な操作の参考:https://blog.csdn.net/hymanjack/article/details/80285400に表示されます.
 
ubuntu 18のため04 python 3を持参しているのでpython 2をインストールする必要があります.7とpip 2、ついでにpip 3をインストールします.
sudo apt install python2.7

sudo apt install python-pip

sudo apt install python3-pip

インストール後、pythonを実行して、デフォルトがpython 2でない場合、デフォルトがどのバージョンに入っているかを確認できます.7、自分でどのように配置するかを探して、参考にすることができます:https://cloud.tencent.com/developer/article/1570927
pythonの構成が完了すると、DynaSLAMの構成プロセスに入ります.主に参考にしています.https://blog.csdn.net/qq_43525260/article/details/105746452およびhttps://zhuanlan.zhihu.com/p/119422186ああ、ネット上で多くの関連教程を探して、この2つの文章の中の列の穴が比較的に実用的だと感じます.
  • インストールtensorflow-1.12.3:pip install tensorflow=1.12.3-ihttps://pypi.tuna.tsinghua.edu.cn/simple,プロセス中に依存が欠けている場合は,関連する依存パケットをインストールした後,このコマンドを実行してTFをインストールする.
  • インストールkeras-2.0.9:pip install keras==2.0.9-ihttps://pypi.tuna.tsinghua.edu.cn/simple ;
  • ダウンロード関連ファイル:
    mask_rcnn_coco.h5 : https://github.com/matterport/Mask_RCNN/releases/tag/v2.0
    opencv2.4.11 : https://opencv.org/releases/
    coco    : https://github.com/waleedka/coco
    pangolin : https://github.com/stevenlovegrove/Pangolin
    DynaSLAM: https://github.com/BertaBescos/DynaSLAM
  • COCOデータセットのコンパイル:
          COCO   
    cd coco-master/PythonAPI
    sudo make install
    このプロセスは比較的順調であるべきで、コンパイルも速い.コンパイルが完了したら、コンパイルしたPythonAPIのpycocoolsフォルダをDynaslamのsrc/pythonディレクトリの下に置く必要はありません.私は上記のブログの1つの操作に従ってpycocoolsを置いた後、Checkをテストします.pyの時はNo module namedと報告しますmaskのエラーは、ファイルが重複している可能性があります.削除した後、テストは正常です.
  • テストMask-CNN
         mask_rcnn_coco.h5    Dynaslam src/python   
      Check.py  , ROOT_DIR = "./src/python"    ROOT_DIR = "./" ,         ,                        DynaSLAM         
       python Check.py #    python       
    実行成功出力:Mask R-CNN is correctly working.依存パッケージが欠けているエラーを報告する可能性がありますが、最初のブログの5つ目のステップを参考にして、こちらでは説明しません.
  • pangolinをインストールするのは簡単で、xkbcommonパッケージが欠けているエラーが発生する可能性があります.コマンドインストールを実行すれば
    sudo apt-get install libxkbcommon-x11-dev
    です.
  • 最初のステップは、依存
    sudo apt install libgl1-mesa-dev
    sudo apt install libglew-dev
    sudo apt install cmake
  • をインストールする.
  • ダウンロードしたpangolinソースパッケージを解凍してコンパイルする
    cd Pangolin-master
    mkdir build
    cd build 
    cmake ..
    make -j4
  • eigen 3をインストールすると、コマンド一言で
    sudo apt-get install libeigen3-dev
  • をインストールできます.
  • boost librariesをインストールすると、依存パッケージが不足していることを示す可能性があります.対応する依存パッケージをインストールした後、コマンドのインストールを続行すれば
    sudo apt-get install libboost-all-dev
  • になります.
  • opencv-2.4.11のインストール
  • 取付依存
    sudo apt-get install build-essential
    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libopenexr-dev libdc1394-22-dev
  • 第3の依存インストールを実行すると、エラーが表示されます------エラーerrorE:unable to locate libjasper-dev、解決方法は以下の通りです:
    sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
    sudo apt update
    sudo apt install libjasper1 libjasper-dev
                       ,       
  • コンパイル開始
    cd opencv-2.4.11
    mkdir build
    cd build
    
  • cmake時にCMake Error at cmake/openCVDetectCXXCompilerが現れるためである.cmake:85(list)エラーなので、先にフォルダでOpenCVDetectCXXCompilerを検索.cmakeファイルは、
    # ----------------------------------------------------------------------------
    # Detect Microsoft compiler:
    # ----------------------------------------------------------------------------
    # ----------------------------------------------------------------------------
    if(CMAKE_CL_64)
        set(MSVC64 1)
    endif()
    
    
    if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
      set(CMAKE_COMPILER_IS_GNUCXX 1)
      set(CMAKE_COMPILER_IS_CLANGCXX 1)
    endif()
    if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
      set(CMAKE_COMPILER_IS_GNUCC 1)
      set(CMAKE_COMPILER_IS_CLANGCC 1)
    endif()
    if("${CMAKE_CXX_COMPILER};${CMAKE_C_COMPILER}" MATCHES "ccache")
      set(CMAKE_COMPILER_IS_CCACHE 1)
    endif()
    
    
    # ----------------------------------------------------------------------------
    # Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ):
    #  see  include/opencv/cxtypes.h file for related   ICC & CV_ICC defines.
    # NOTE: The system needs to determine if the '-fPIC' option needs to be added
    #  for the 3rdparty static libs being compiled.  The CMakeLists.txt files
    #  in 3rdparty use the CV_ICC definition being set here to determine if
    #  the -fPIC flag should be used.
    # ----------------------------------------------------------------------------
    if(UNIX)
      if  (__ICL)
        set(CV_ICC   __ICL)
      elseif(__ICC)
        set(CV_ICC   __ICC)
      elseif(__ECL)
        set(CV_ICC   __ECL)
      elseif(__ECC)
        set(CV_ICC   __ECC)
      elseif(__INTEL_COMPILER)
        set(CV_ICC   __INTEL_COMPILER)
      elseif(CMAKE_C_COMPILER MATCHES "icc")
        set(CV_ICC   icc_matches_c_compiler)
      endif()
    endif()
    
    
    if(MSVC AND CMAKE_C_COMPILER MATCHES "icc|icl")
      set(CV_ICC   __INTEL_COMPILER_FOR_WINDOWS)
    endif()
    
    
    # ----------------------------------------------------------------------------
    # Detect GNU version:
    # ----------------------------------------------------------------------------
    if(CMAKE_COMPILER_IS_CLANGCXX)
      set(CMAKE_GCC_REGEX_VERSION "4.2.1")
      set(CMAKE_OPENCV_GCC_VERSION_MAJOR 4)
      set(CMAKE_OPENCV_GCC_VERSION_MINOR 2)
      set(CMAKE_OPENCV_GCC_VERSION 42)
      set(CMAKE_OPENCV_GCC_VERSION_NUM 402)
    
    
      execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v
                      ERROR_VARIABLE CMAKE_OPENCV_CLANG_VERSION_FULL
                      ERROR_STRIP_TRAILING_WHITESPACE)
    
    
      string(REGEX MATCH "version.*$" CMAKE_OPENCV_CLANG_VERSION_FULL "${CMAKE_OPENCV_CLANG_VERSION_FULL}")
      string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_CLANG_REGEX_VERSION "${CMAKE_OPENCV_CLANG_VERSION_FULL}")
    
    
    elseif(CMAKE_COMPILER_IS_GNUCXX)
      execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
                    OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
                    OUTPUT_STRIP_TRAILING_WHITESPACE)
    
    
      execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v
                    ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL
                    OUTPUT_STRIP_TRAILING_WHITESPACE)
    
    
      # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
      # Look for the version number, major.minor.build
      string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
      if(NOT CMAKE_GCC_REGEX_VERSION)#major.minor
        string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
      endif()
    
    
      if(CMAKE_GCC_REGEX_VERSION)
        # Split the parts:
        string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
    
    
        list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
        list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
      else()#compiler returned just the major version number
        string(REGEX MATCH "[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
        if(NOT CMAKE_GCC_REGEX_VERSION)#compiler did not return anything reasonable
          set(CMAKE_GCC_REGEX_VERSION "0")
          message(WARNING "GCC version not detected!")
        endif()
        set(CMAKE_OPENCV_GCC_VERSION_MAJOR ${CMAKE_GCC_REGEX_VERSION})
        set(CMAKE_OPENCV_GCC_VERSION_MINOR 0)
      endif()
    
    
      set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
      math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}")
      message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})")
    
    
      if(WIN32)
        execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
                  OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE
                  OUTPUT_STRIP_TRAILING_WHITESPACE)
        if(OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
          set(MINGW64 1)
        endif()
      endif()
    endif()
    
    
    if(MSVC64 OR MINGW64)
      set(X86_64 1)
    elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))
      set(X86 1)
    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
      set(X86_64 1)
    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")
      set(X86 1)
    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
      set(ARM 1)
    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
      set(AARCH64 1)
    endif()
    
    
    # Workaround for 32-bit operating systems on 64-bit x86_64 processor
    if(X86_64 AND CMAKE_SIZEOF_VOID_P EQUAL 4 AND NOT FORCE_X86_64)
      message(STATUS "sizeof(void) = 4 on x86 / x86_64 processor. Assume 32-bit compilation mode (X86=1)")
      unset(X86_64)
      set(X86 1)
    endif()
    
    
    # Similar code exists in OpenCVConfig.cmake
    if(NOT DEFINED OpenCV_STATIC)
      # look for global setting
      if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
        set(OpenCV_STATIC OFF)
      else()
        set(OpenCV_STATIC ON)
      endif()
    endif()
    
    
    if(MSVC)
      if(CMAKE_CL_64)
        set(OpenCV_ARCH x64)
      elseif((CMAKE_GENERATOR MATCHES "ARM") OR ("${arch_hint}" STREQUAL "ARM") OR (CMAKE_VS_EFFECTIVE_PLATFORMS MATCHES "ARM|arm"))
        # see Modules/CmakeGenericSystem.cmake
        set(OpenCV_ARCH ARM)
      else()
        set(OpenCV_ARCH x86)
      endif()
      if(MSVC_VERSION EQUAL 1400)
        set(OpenCV_RUNTIME vc8)
      elseif(MSVC_VERSION EQUAL 1500)
        set(OpenCV_RUNTIME vc9)
      elseif(MSVC_VERSION EQUAL 1600)
        set(OpenCV_RUNTIME vc10)
      elseif(MSVC_VERSION EQUAL 1700)
        set(OpenCV_RUNTIME vc11)
      elseif(MSVC_VERSION EQUAL 1800)
        set(OpenCV_RUNTIME vc12)
      elseif(MSVC_VERSION EQUAL 1900)
        set(OpenCV_RUNTIME vc14)
      elseif(MSVC_VERSION EQUAL 1910)
        set(OpenCV_RUNTIME vc15)
      endif()
    elseif(MINGW)
      set(OpenCV_RUNTIME mingw)
    
    
      if(MINGW64)
        set(OpenCV_ARCH x64)
      else()
        set(OpenCV_ARCH x86)
      endif()
    endif()
  • に変更されました.
  • not foundエラーが発生すると、
    sudo apt-get install libv4l-dev
    sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
  • を実行する.
  • not foundが発生した場合、このエラーは無視できます.https://blog.csdn.net/qq_17783559/article/details/105078293また、usr/includeにsysフォルダを直接新規作成しtouch videoioを実行することもできる.h,
  • の最終使用に影響を及ぼさずに空のファイルを直接作成する
  • cmake -D WITH_FFMPEG=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF ..
  • 前の2つのステップで変更するcmakeが失敗した場合、buildフォルダの内容を削除し、cmakeコマンド
  • を再実行する.
  • が成功すると、make
  • が実行されます.
  • 最後にsudo make install
  • を実行する

  • DynaSLAMのコンパイル
  • cd DynaSLAM-master
  • Dynaslamのsrcのviewerを修正します.ccの内容:コードファイルに入って、imshowを検索して、1か所を見つけることができて、以下の修正を行います:
    cv::imshow("DynaSLAM: Current Frame",im);
       
    if(!im.empty())
    {
         cv::imshow("DynaSLAM: Current Frame",im);
    }
  • DynaslamルートディレクトリのCMakeLists.txt及びThirdpartyにおけるDboW 2及びg 2 oにおけるCMakeLists.txtファイルの-match native削除(そうでないとコアダンプのエラーが報告されます)
  • DynaslamルートディレクトリのCMakeLists.txtの最後のcarlaに関する3行のコード注釈
  • bash  build.sh
  • 実行例、1つのデータセットをダウンロードして、こちらは単一のデータセットrgbd_をダウンロードしますdataset_freiburg1_rpyファイル、https://github.com/BertaBescos/DynaSLAMのヒントはコマンド編集を行い、こちらの実行コマンドは:
    ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/lmx/rgbd_dataset_freiburg1_rpy data/mask

  • これで、全部终わります......(わからない場合はメッセージ交換を歓迎)
    ポイントの推薦:2篇の博文を参考にします
    https://blog.csdn.net/qq_43525260/article/details/105746452
    https://zhuanlan.zhihu.com/p/119422186