DXLAM、ubuntu16、tf1.13、anaconda环境配置


这里记录配置DXSLAM环境的点点滴滴

配置该代码环境有两种方法

方法一:利用docker

该方法主要先pull调用tf1.13.1版本,然后配置普通的ORBSLAM2的环境。
但是这里配置的时候,遇到两个问题:

一是docker中的jupyter端口似乎被占用,怎么弄都弄不好。虽然可以用其他的编译器,但是从宿主机调用docker服务端运行代码还是用有很多问题。
二是容器中编译opencv的时候会报一个错误,主要是因为需要去公网下载文件,但是在宿主机上就不需联网下载,猜测可能因为docker镜像版本有些旧的原因吧

综上所素:第一种方法虽然方便,但是中间有问题,就不得不放弃(如果能挂公网,那确实挺好的)

方法二:直接配置

选用的ubuntu版本是16,装系统+配置无线模块可以参考我的这篇博客

https://blog.csdn.net/y18855021710/article/details/127789430?spm=1001.2014.3001.5502

编译该代码主要参考的是这位大佬的

https://blog.csdn.net/weixin_39977764/article/details/122453967

但是大佬有些配置在ubuntu16中有一些小bug,我会一一指出

配置流程

1 配置ORB_SLAM2环境
2 配置tf环境
3 配置DXSLAM环境


                                   我是一个分割线

1 配置ORBSLAM2环境

1.1ORB_SLAM2配置

配置环境主要是参考github源码来配置的

https://github.com/raulmur/ORB_SLAM2

值得注意的是,代码中的opencv版本要求不高,但是听配置DXSLAM的大佬说Pangolin是个毒瘤,只能用ORB_SLAM2代码推荐的Pangolin那个链接。而且配置Pangolin要升级cmake(3.10以上)

1-如果你下载cmake,解压阅读readme发现里面有编译的步骤(就不细说了)
但是一定最后要重复一遍sudo make install(提升权限安装)

2-参考博客

https://blog.csdn.net/weixin_41010198/article/details/109343347

照着上面博客的话:如果出现问题 *** No rule to make target ‘/usr/lib/x86_64-linux-gnu/libGL.so’, needed by ‘src/libpangolin.so’。 停止。
备注:查找命令sudo find / -iname “libGL.so

https://blog.csdn.net/txy12029047/article/details/104036729
https://blog.csdn.net/sinat_28752257/article/details/100167109
简单来说是因为你装驱动或者内核,把原本的链接关系破坏了,所以要重新链接libGL.so
这里不理解为什么要sudo ln -s  /usr/lib/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so
(这里还是使用了0.5版本)
1.2测试单目并处理RGBD的数据集

按照github配置好了之后,可以参考这篇博客进行测试以及处理数据集。

https://blog.csdn.net/creative1/article/details/122088612

(备注:RGBD需要看下面2.2来处理数据集)

2 配置tf环境

2.1 配置anaconda以及tf1.13

首先,因为笔记本装系统的时候直接就装显卡驱动了,所以这个时候cuda显示的是11版本。值得庆幸的是安装anaconda后面能够直接换源配置tf1.13旧版本(似乎利用conda装cuda10版本不会替换?)。
这里建议下载Anaconda3-2020.07-Linux-x86_64.sh
如果其中numpy版本报错,建议先卸载numpy然后再安装numpy1.6.5

 pip uninstall numpy
pip install numpy==1.16.5

可以参考博客配置

https://blog.csdn.net/qq_34904125/article/details/118418839

环境配置

sudo vim ~/.bashrc
export PATH=/home/你的名字/anaconda3/bin:$PATH
source ~/.bashrc
配置结束
激活
source activate
环境
conda create -n tf1.13 python=3.7
conda activate tf1.13
conda install tensorflow-gpu=1.13.1
测试
python
import tensorflow as tf
tf.test.is_gpu_available()

2.2 借用tf的虚拟环境处理RGBD数据集

上面1.2提到RGBD需要处理数据集,这里需要激活虚拟环境,然后按照1.2关于RGBD部分进行配置相关文件,如果报错:AttributeError: ‘dict_keys‘ object has no attribute ‘remove‘参考

https://blog.csdn.net/qin_liang/article/details/126860883
2.3 配置ROS(可选)

接下来需要配置ROS(如果不想跑实时就可以不弄)
鱼香ROS一键安装

wget http://fishros.com/install -O fishros && bash fishros

如果你装了ROS,就会发现会报一个错误(应该是后面编译DXSLA的代码某个部分import cv2的时候报错)不装ROS就应该不会出现这个问题。
也有可能没装pip install opencv-python
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
简单来说就是低版本ROS会影响环境中的opencv查找,解决就是申明外部还有opencv环境

https://blog.csdn.net/weixin_42314494/article/details/114686723

要注意的是,需要进入anaconda的虚拟环境进行刷新环境!不然还会出现这个bug

备注:理论上2代的环境能够直接给ORBSLAM3使用,如果配置环境出现:fatal error: openssl/md5.h: 没有那个文件或目录compilation terminated.

sudo apt-get install libssl-dev

3 配置DXSLAM环境

3.1 相关文件处理

首先需要从ORB_SLAM2中单目部分取出TUM1.yaml文件,tum数据集和2.2生成的associations.txt文件,我TUM1.yaml将在了EXamples/RGB-D/下,associations.txt文件放在了tum数据集下并统一放在在dxslam-master下。
预编译第三方库

如果第三方库报错
CMake Error at cmake_modules/FindEigen3.cmake:33 (file):
  file failed to open for reading (No such file or directory):

    /usr/include/eigen3/Eigen/src/Core/util/Macros.h
Call Stack (most recent call first):
  cmake_modules/FindEigen3.cmake:59 (_eigen3_check_version)
  CMakeLists.txt:70 (FIND_PACKAGE)
就是eigen3位置有问题,需要复制
sudo cp -r /usr/local/include/Eigen /usr/include
sudo cp -r /usr/local/include/eigen3 /usr/include
3.2 处理脚本

大佬说的很清楚,第一次下载失败,就一直会报错。
https://blog.csdn.net/weixin_39977764/article/details/122453967
如果有公网就可以参考大佬修改的build.sh,然后试运行就行,没有公网的话需要自己事先下载了两个文件DXSLAM.tar.xz和model.tar.xz(还需要公网,汗颜啦)

`wget https://github.com/ivipsourcecode/dxslam/releases/download/1.0.0/DXSLAM.tar.xz`

以及

`wget https://github.com/ivipsourcecode/dxslam/releases/download/1.0.0/model.tar.xz`

然后DXSLAM.tar.xz放在Vocabulary下,model.tar.xz放在hf-net下。来嗯个都需要解压。

3.3 处理数据集

tum数据集在运行RGBD时需要处理一下数据集格式

python associate.py ./rgb.txt ./depth.txt > associations.txt
3.4 处理特征文件

3.2下载的两个文件,DXSLAM.tar.xz解压后就能直接用,但是model.tar.xz解压后使用来处理数据集的,也就是在原本2.2处理之后还需要再次处理。这次是在虚拟环境下从图像和图像之中利用hf-net提取某种关系。注意,大佬博客这块少了一点,看下面评论应该是

python3 getFeature.py /home/名字/DXSLAM/dxslam-master/tum/rgbd_dataset_freiburg1_xyz/rgb.txt ./features
11.17 修正:上面不是读取txt而是读取rgb目录

python3 getFeature.py /home/名字/DXSLAM/dxslam-master/tum/rgbd_dataset_freiburg1_xyz/rgb ./features

不然在虚拟环境下就该会报错
File “getFeature.py”, line 70, in
query = hfnet.inference(image)
File “getFeature.py”, line 28, in inference
self.image_ph: image[…, ::-1].astype(np.float),
TypeError: ‘NoneType’ object has no attribute ‘getitem
这个命令运行成功会一直输出图片名字,等待一会处理完毕就行。
最后运行测试

./Examples/RGB-D/rgbd_tum Vocabulary/DXSLAM.fbow ./Examples/RGB-D/TUM1.yaml ./tum/rgbd_dataset_freiburg1_xyz  ./tum/rgbd_dataset_freiburg1_xyz/associations.txt ./hf-net/features

bug2:

UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [Op:Conv2D]
解决:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:0'  

最后还有个bug,我用的数据集跑到一半左右似乎卡住了,不知道为啥。后期有时间再看吧
最后放出我的项目树
.

├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── 3.21.4
│   │   ├── cmake.check_cache
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeError.log
│   │   ├── CMakeOutput.log
│   │   ├── CMakeTmp
│   │   ├── DXSLAM.dir
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── progress.marks
│   │   ├── rgbd_tum.dir
│   │   └── TargetDirectories.txt
│   ├── cmake_install.cmake
│   └── Makefile
├── build.sh
├── CMakeLists.txt
├── cmake_modules
│   └── FindEigen3.cmake
├── Dependencies.md
├── Examples
│   └── RGB-D
│       ├── rgbd_tum
│       ├── rgbd_tum.cc
│       └── TUM1.yaml
├── hf-net
│   ├── features
│   │   ├── des
│   │   ├── glb
│   │   └── point-txt
│   ├── getFeature.py
│   ├── model
│   │   └── hfnet
│   └── model.tar.xz
├── include
│   ├── Converter.h
│   ├── FrameDrawer.h
│   ├── Frame.h
│   ├── Initializer.h
│   ├── KeyFrameDatabase.h
│   ├── KeyFrame.h
│   ├── LocalMapping.h
│   ├── LoopClosing.h
│   ├── MapDrawer.h
│   ├── Map.h
│   ├── MapPoint.h
│   ├── Matcher.h
│   ├── Optimizer.h
│   ├── PnPsolver.h
│   ├── Sim3Solver.h
│   ├── System.h
│   ├── Tracking.h
│   ├── Viewer.h
│   └── Vocabulary.h
├── lib
│   └── libDXSLAM.so
├── License-gpl.txt
├── LICENSE.txt
├── README.md
├── src
│   ├── Converter.cc
│   ├── Frame.cc
│   ├── FrameDrawer.cc
│   ├── Initializer.cc
│   ├── KeyFrame.cc
│   ├── KeyFrameDatabase.cc
│   ├── LocalMapping.cc
│   ├── LoopClosing.cc
│   ├── Map.cc
│   ├── MapDrawer.cc
│   ├── MapPoint.cc
│   ├── Matcher.cc
│   ├── Optimizer.cc
│   ├── PnPsolver.cc
│   ├── Sim3Solver.cc
│   ├── System.cc
│   ├── Tracking.cc
│   └── Viewer.cc
├── Thirdparty
│   ├── cnpy
│   │   ├── build
│   │   ├── CMakeLists.txt
│   │   ├── cnpy.cpp
│   │   ├── cnpy.h
│   │   ├── example1.cpp
│   │   ├── LICENSE
│   │   ├── mat2npz
│   │   ├── npy2mat
│   │   ├── npz2mat
│   │   └── README.md
│   ├── DBoW2
│   │   ├── build
│   │   ├── CMakeLists.txt
│   │   ├── DBoW2
│   │   ├── DUtils
│   │   ├── lib
│   │   ├── LICENSE.txt
│   │   └── README.txt
│   ├── fbow
│   │   ├── build
│   │   ├── CMakeLists.txt
│   │   ├── cmake_uninstall.cmake.in
│   │   ├── config.cmake.in
│   │   ├── README.md
│   │   ├── src
│   │   ├── tests
│   │   └── utils
│   └── g2o
│       ├── build
│       ├── CMakeLists.txt
│       ├── cmake_modules
│       ├── config.h
│       ├── config.h.in
│       ├── g2o
│       ├── lib
│       ├── license-bsd.txt
│       └── README.txt
├── tum
│   ├── rgbd_dataset_freiburg1_xyz
│   │   ├── accelerometer.txt
│   │   ├── associations.txt
│   │   ├── depth
│   │   ├── depth.txt
│   │   ├── groundtruth.txt
│   │   ├── rgb
│   │   └── rgb.txt
│   └── rgbd_dataset_freiburg1_xyz.tgz
├── Vocabulary
│   ├── DXSLAM.fbow
│   └── DXSLAM.tar.xz
└── 环境配置.md
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值