Ubuntu18.04 오픈 소스 항목 DynaSLAM 구성

기본 환경: ubuntu18.04+python2.7+opencv2.4.11
 
ubuntu18.04 소프트웨어 소스를 업데이트해야 합니다. 자세한 내용은 다음을 참조하십시오.https://blog.csdn.net/hymanjack/article/details/80285400의 첫 번째 섹션입니다.
 
왜냐하면04 자체는python3이므로python2를 설치해야 합니다.7 및 pip2 및 함께 pip3을 설치합니다.
sudo apt install python2.7

sudo apt install python-pip

sudo apt install python3-pip

설치 후python을 실행하면 기본적으로 들어간 버전이 어떤 버전인지 볼 수 있습니다. 기본값이python2가 아니라면.7, 직접 가서 어떻게 배치하는지 찾아보면 참고할 수 있다.https://cloud.tencent.com/developer/article/1570927
python을 설정한 후에 다이나슬램의 설정 과정에 들어갔습니다. 주로 참고할 것은https://blog.csdn.net/qq_43525260/article/details/105746452및https://zhuanlan.zhihu.com/p/119422186인터넷에서 관련 강좌를 많이 찾았는데 이 두 문장 중 구덩이가 비교적 실용적인 것 같다.
  • tensorflow-1.12.3:pip install tensorflow==1.12.3-i 설치https://pypi.tuna.tsinghua.edu.cn/simple, 과정 중 의존이 부족하면 관련 의존 패키지를 설치한 후 이 명령을 계속 실행하여 TF를 설치한다.
  • keras-2.0.9:pip install keras==2.0.9 -i 설치https://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
    이 과정은 비교적 순조롭고 컴파일도 빠를 것이다.컴파일링이 끝난 후, 컴파일된 Python API의pycocotools 폴더를 다이나슬램의 src/python 디렉터리에 놓을 필요가 없습니다.나는 위에서 언급한 블로그의 조작에 따라pycocotools를 놓고 체크를 테스트했다.py 때 No module namedmask의 오류는 파일이 중복되었을 것입니다. 제거한 후에 정상적으로 테스트됩니다.
  • Mask-RCNN 테스트
         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.의존 패키지가 부족한 오류를 보고할 수도 있지만 첫 번째 블로그의 다섯 번째 단계를 참고하면 여기서는 군말하지 않겠습니다.
  • pangolin을 설치합니다. 비교적 간단하고 xkbcommon 패키지가 부족한 오류가 발생할 수 있습니다. 명령을 실행하여 설치하면 됩니다
    sudo apt-get install libxkbcommon-x11-dev
  • 첫 번째 단계는 설치 의존
    sudo apt install libgl1-mesa-dev
    sudo apt install libglew-dev
    sudo apt install cmake
  • 다운로드한 판골린 원본 패키지를 압축하여 컴파일
    cd Pangolin-master
    mkdir build
    cd build 
    cmake ..
    make -j4
  • eigen3 설치, 명령 한마디로 설치 성공
    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
  • 세 번째 종속 설치를 수행할 때 오류 발생 ------- 오류 발생 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/OpenCVDetect CXXCompiler가 나타날 수 있기 때문이다.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 비디오io를 실행할 수도 있습니다.h, 최종 사용에 영향을 주지 않고 빈 파일을 직접 만듭니다
  • cmake -D WITH_FFMPEG=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF ..
  • 앞의 두 단계로 수정하지 않아 cmake가 실패하면build 폴더의 내용을 삭제하고 cmake 명령을 다시 실행합니다
  • 성공 후 make
  • 실행
  • 마지막으로sudo make install
  • 실행

  • DynaSLAM 컴파일
  • cd DynaSLAM-master
  • Dynaslam의 src에서viewer를 수정합니다.cc의 내용: 코드 파일에 들어가서imshow를 검색하면 다음과 같은 수정을 할 수 있습니다.
    cv::imshow("DynaSLAM: Current Frame",im);
       
    if(!im.empty())
    {
         cv::imshow("DynaSLAM: Current Frame",im);
    }
  • Dynaslam 루트 디렉토리의 CMakeLists.txt 및 Thirdparty의 DBoW2 및 g2o의 CMakeLists.txt 파일의 -match native 제거 (그렇지 않으면 핵심 저장 오류를 보고합니다)
  • Dynaslam 루트 디렉토리의 CMakeLists.txt에서 마지막으로 카라의 세 줄 코드에 대한 설명
  • bash  build.sh
  • 실행 실례, 데이터 집합을 다운로드, 이쪽에서 다운로드한 것은 단일 데이터 집합 rgbddataset_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

  • 이쯤에서 다 끝났어...(모르시는 분들은 댓글로 소통하세요)
    중점 추천: 두 편의 박문을 참고하다
    https://blog.csdn.net/qq_43525260/article/details/105746452
    https://zhuanlan.zhihu.com/p/119422186
     
     

    좋은 웹페이지 즐겨찾기