ubunto18.04编译Dynaslam的痛苦历程-----cpu的版本

14 篇文章 0 订阅
13 篇文章 0 订阅

首先致谢本科直博的大神,感谢大神手把手教我安装Dynaslam,大神的知乎链接Dynaslam配置排坑
直接开门见山吧,配置过程如下:(本人的环境 ubunto18.04 、python2.7 、tensorflow-cpu)
首先准备需要的源码文件包:
一:
1.Dynaslam(注意版本务必跟我的一样):

git clone  https://github.com/BertaBescos/DynaSLAM.git

2.准备opencv2.4.11

git clone https://github.com/opencv/opencv.git

3.准备coco数据集

git clone https://github.com/waleedka/coco.git

4.准备pangolin(编译dynaslam的orbslam部分需要,避免后期再次下载)

git clone https://github.com/stevenlovegrove/Pangolin.git

5.准备mask_rcnn_coco.h5下载地址mask_rcnn_coco.h5(这玩意下载贼曼,大家可以自己去找资源)
6.准备tensorflow1.12.3版本(对应的keras为2.0.9)(直接复制链接到浏览器进行下载)

https://pypi.tuna.tsinghua.edu.cn/packages/84/db/5ba3fa1dedc0cdf02fc7cb19592a52974cff8cdbbf788c172b68d5371bc3/tensorflow-1.12.3-cp27-cp27mu-manylinux1_x86_64.whl (83.1MB)

然后直接通过pip的方式进行安装,没有pip的先行安装pip

sudo pip install tensorflow-1.12.3-cp27-cp27mu-manylinux1_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple/

注意:
上述安装注意你是把tensorflow的包放置在哪个路径下

7.需要源码编译的就准备到这里了,其余相关依赖应该可以直接使用sudo apt-get install 进行安装
二、进行编译安装了
1.在我们进行tensorflow的安装之后首先安装keras命令如下:

sudo pip install keras==2.0.9 -i https://pypi.tuna.tsinghua.edu.cn/simple 

2.进行Dynaslam python的检查工作
1)首先进入coco/PythonAPI

cd coco/PythonAPI

执行命令

sudo make install

执行sudo make install 可能会报ImportError: No module named Cython.Build 的错误
解决方案如下:

pip install Cython  -i  https://pypi.tuna.tsinghua.edu.cn/simple/ 
pip install fasttext  -i  https://pypi.tuna.tsinghua.edu.cn/simple/ 

然后重新sudo make install 即可
2)将编译好的pycocotools(在coco/PythonAPI/中)放置到我们下载好的Dynaslam的src/python目录下,然后将数据集mask_rcnn_coco.h5放置在Dynaslam的src/python目录下,这时候src/python目录是这样的
在这里插入图片描述
3)打开Check.py 文件将17行的

ROOT_DIR = "src/python"

改为

ROOT_DIR = "./"#测试之后可以重新改过来,改不改问题不大

4)执行

python Check.py #以此检验python部分是否有错误

5)运行第四步的时候必然会报错,原因是缺少依赖,这个时候只需要安装对应的包即可,需要大家有一些调试能力,(不知道如何安装缺失的包,百度或者谷歌均可以)(比如缺失 python-tk package)可以执行以下命令

sudo apt-get install python-tk  #(python2),如果安装不成功,自行百度,有解决方案
sudo apt-get install python3-tk  #(python3)

6)至此解决完依赖问题,你会看到运行python Check.py 的结果如下:

s@s:~/DynaSLAM-bbescos-feature-carla/src/python$ python Check.py
Using TensorFlow backend.
2020-04-25 15:00:12.757225: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Initializing Mask RCNN network...
./
WARNING:tensorflow:From /home/s/.local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py:1204: calling reduce_max (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.
Instructions for updating:
keep_dims is deprecated, use keepdims instead
WARNING:tensorflow:From /home/s/.local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py:1238: calling reduce_sum (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.
Instructions for updating:
keep_dims is deprecated, use keepdims instead
Initialated Mask RCNN network...
Mask R-CNN is correctly working

说明python相关的问题就解决了
2.进行c++部分的编译工作首先进行是opencv的编译
首先安装相关的依赖代码如下:

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(这里你可以自行百度解决,也可以直接忽略,进行接下来的步骤)

cd opencv  #cd的路径是你自己的,不要错了
cmake -D WITH_FFMPEG=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF ..

make之前首先进行如下的工作(最好不要用make -j4直接make吧虽然慢点):(或者opencv 视你的文件名而定)
***找到opencv-2.4.9/build/modules/contrib/CMakeFiles/opencv_contrib.dir/flags.make删掉-Werror=address
***将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()

然后就可以愉快的make了:

make #或者make -j2 (不可以j4)

最后:

sudo make install

3.opencv编译完事开始eigen3的安装,一句话搞定:

sudo apt-get install libeigen3-dev

4.然后编译安装pangolin

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install cmake #这个你已经安装过了应该

然后:

cd Pangolin
mkdir build
cd build 
cmake ..
make -j4

5.安装boot库

 sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev #这个命令不一定正确,大家可以先忽略这一步,后续根据报错信息进行安装缺失的依赖
 sudo apt-get install libboost-all-dev #或者根据这个命令安装boost库

6.修改有错误的文件:
***进入Dynaslam的src中viewer.cc中,按Ctrl+F查找imshow,我们可以看到2个imshow,而且调用之前没有判断,会在某些情况导致程序终止。我们将两句话依次对应替换即可(其实就是先if(!image.empty())判断一下)

 //cv::imshow("DynaSLAM: Current Frame",im);//原版的代码
  //下面是我自己替换的版本
       if(!im.empty())
       {
          cv::imshow("DynaSLAM: Current Frame",im);
       }

        cv::Mat im_dyn = mpFrameDrawer->GetDynamicFrame();
        //cv::imshow("DynaSLAM: Dynamic Frame", im_dyn);原版的代码
//下面是我自己替换的版本
        if(!im_dyn.empty())
       {
          cv::imshow("DynaSLAM: Dynamic Frame", im_dyn);
       }       

7.将Dynaslam根目录中的CMakeLists.txt 以及 Thirdparty中DBoW2和g2o中的CMakeLists.txt文件中的 -match native去掉 (否则会报核心转储的错误)
8.进行最后的编译工作了,进入dynaslam的根目录执行:

bash  build.sh

9.等待片刻,即可编译成功,如有错,应该 也是小错误,自行百度即可。。。。
10.将自己的有行人的数据集放置到Dynaslam根目录中新建的data文件夹并且在data文件夹中新建两个文件夹,看图:
在这里插入图片描述在这里插入图片描述三、执行运行指令

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt ./Examples/RGB-D/TUM3.yaml ./data/rgbd_dataset_freiburg3_walking_rpy/ ./data/rgbd_dataset_freiburg3_walking_rpy/associations.txt ./data/mask ./data/output

如果遇到初始化失败的情况,将对应的TUM文件中的特征点个数调大应该就好了。。。。。。

# ORB Extractor: Number of features per image  #本来是1000
ORBextractor.nFeatures: 3000

至此,全部完结。。。。。。。。。(如遇不明白的欢迎留言交流)
参考大神的知乎文章!!!
参考

  • 15
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 42
    评论
Ubuntu 18.04是一个长期支持(LTS)版本,主要用于提供稳定的系统环境。以下是关于Ubuntu 18.04环境配置的一些基本步骤: 1. **更新和软件源**: - 使用`sudo apt update`检查并更新系统软件包。 - 如果需要更改默认的软件源,可以编辑`/etc/apt/sources.list`。 2. **安装必要的工具**: - `sudo apt install ubuntu-desktop`可以安装基础桌面环境,包括Unity或GNOME。 - 根据需求安装特定软件,如`sudo apt install vim`, `nano`, `gedit`, 或者`python3`, `gcc`, `git`等。 3. **用户和权限设置**: - 创建新用户:`sudo adduser username`. - 设置密码:`sudo passwd username`. 4. **网络配置**: - 连接到WiFi:使用`sudo netplan apply`或`sudo wpa_supplicant`手动配置。 - 公网IP获取:在终端中输入`ifconfig`查看IP地址。 5. **防火墙设置**: - 启用ufw防火墙:`sudo ufw enable`,然后根据需要配置规则。 6. **SSH配置**: - 安装SSH:`sudo apt install openssh-server`。 - 配置启动自动启动:`sudo systemctl enable ssh`. - 设置SSH密钥登录:`ssh-keygen`并添加公钥到远程服务器。 7. **软件包管理**: - 使用`apt`或`aptitude`进行软件包的安装、升级和卸载。 8. **磁盘分区和文件系统**: - 使用`fdisk`, `parted`或`gparted`进行分区。 - 格式化磁盘:`sudo mkfs.ext4 /dev/sdXn`,其中`sdxn`替换为实际设备。 9. **启动/服务管理**: - 使用`systemctl`管理启动服务和守护进程。 10. **安全设置**: - 安装和配置SELinux(如果使用)。 - 定期更新系统和软件以保持安全性。 记得在完成配置后备份重要数据,并始终谨慎操作以防止误操作。如有具体的问题,请告诉我,我会提供更详细的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值