该方法主要先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环境
我是一个分割线
配置环境主要是参考github源码来配置的
https://github.com/raulmur/ORB_SLAM2
值得注意的是,代码中的opencv版本要求不高,但是听配置DXSLAM的大佬说Pangolin是个毒瘤,只能用ORB_SLAM2代码推荐的Pangolin那个链接。而且配置Pangolin要升级cmake(3.10以上)
https://blog.csdn.net/weixin_41010198/article/details/109343347
按照github配置好了之后,可以参考这篇博客进行测试以及处理数据集。
https://blog.csdn.net/creative1/article/details/122088612
(备注:RGBD需要看下面2.2来处理数据集)
首先,因为笔记本装系统的时候直接就装显卡驱动了,所以这个时候cuda显示的是11版本。值得庆幸的是安装anaconda后面能够直接换源配置tf1.13旧版本(似乎利用conda装cuda10版本不会替换?)。
https://blog.csdn.net/qq_34904125/article/details/118418839
上面1.2提到RGBD需要处理数据集,这里需要激活虚拟环境,然后按照1.2关于RGBD部分进行配置相关文件,如果报错:AttributeError: ‘dict_keys‘ object has no attribute ‘remove‘参考
https://blog.csdn.net/qin_liang/article/details/126860883
接下来需要配置ROS(如果不想跑实时就可以不弄)
鱼香ROS一键安装
wget http://fishros.com/install -O fishros && bash fishros
如果你装了ROS,就会发现会报一个错误(应该是后面编译DXSLA的代码某个部分import cv2的时候报错)不装ROS就应该不会出现这个问题。
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
首先需要从ORB_SLAM2中单目部分取出TUM1.yaml文件,tum数据集和2.2生成的associations.txt文件,我TUM1.yaml将在了EXamples/RGB-D/下,associations.txt文件放在了tum数据集下并统一放在在dxslam-master下。
大佬说的很清楚,第一次下载失败,就一直会报错。
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.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
最后还有个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