ubuntu18.04部署dxslam,cnn+vslam,cpu实时运行(代码片段)

振华OPPO 振华OPPO     2023-01-11     754

关键词:

一、下载源代码

打开终端,输入命令克隆仓库

git clone https://github.com/raulmur/DXSLAM.git DXSLAM

二、配置环境

We have tested the library in Ubuntu 16.04 and Ubuntu 18.04, but it should be easy to compile in other platforms.

  • C++11 or C++0x Compiler
  • Pangolin
  • OpenCV
  • Eigen3
  • Dbow、Fbow and g2o (Included in Thirdparty folder)
  • tensorflow(1.12)

作者提供了一个脚本build.sh来编译Thirdparty目录下的库以及DXSLAM库libDXSLAM.so。像Pangolin、OpenCV和Eigen3这些必备库,直接点链接跳转到安装教程进行安装,这里不再赘述。所以,我们需要安装的环境只有tensorflow1.12,其他所需的库都在Thirdparty目录下。

首先你需要安装深度学习工具anaconda:ubuntu安装anaconda

安装好anaconda后,输入下面命令回车,然后输入y回车,下载安装python3.6的环境:

conda create -n tf112 python=3.6


python环境安装完成后,输入conda activate tf112激活环境:

输入下面命令,安装tensorflow1.12:

pip install tensorflow==1.12

安装过程中可能出现下面错误:

protobuf requires Python '>=3.7' but the running Python is 3.6.2

原因是pip版本太低,升级pip:

pip install --upgrade pip

再次输入命令安装tensorflow1.12:

pip install tensorflow==1.12

可能会遇到下面错误:

Collecting tensorflow==1.12
  Using cached tensorflow-1.12.0-cp36-cp36m-manylinux1_x86_64.whl (83.1 MB)
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)",)': /simple/grpcio/

ERROR: Could not find a version that satisfies the requirement grpcio>=1.8.6 (from tensorflow) (from versions: none)
ERROR: No matching distribution found for grpcio>=1.8.6

原因是未安装numpy或者numpy版本不是最新,–upgrade代表如果你没有安装则安装,安装则更新:

pip install --upgrade numpy

在pip install xxx的过程中,你可能会遇到下面的报错,不是因为你网速慢,而是需要使用国内的镜像源,最近墙加厚了导致正常的外网都快链接不上了。解决方法就是指定(中科大)镜像源:pip install xxx -i https://pypi.mirrors.ustc.edu.cn/simple/

pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

安装好numpy之后,再次输入命令安装tensorflow1.12

pip install tensorflow==1.12

这里我指定了N个镜像源,要么连接超时,要么就没有1.12版本的资源。最后不指定源了,挂梯子都3.4KB/s,真的蚌埠住了,那就耐心等待吧。

终于能正常下载好所有依赖时,报错无法安装tensorflow,原因是还有依赖库未安装,解决方法就是pip install h5py -i https://pypi.tuna.tsinghua.edu.cn/simple/

ERROR: Cannot install tensorflow because these package versions have conflicting dependencies.

The conflict is caused by:
    keras-applications 1.0.8 depends on h5py
    keras-applications 1.0.7 depends on h5py
    keras-applications 1.0.6 depends on h5py

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies

终于历经千辛万苦,几十次install,安装成功了,我只能说tensorflow你迟早被淘汰,怪不得我们都用pytorch,人家pytorch安装多神速。

三、编译源代码

cd dxslam
chmod +x build.sh
./build.sh

这里第三方库DBoW2、g2o、cnpy、fbow安装非常快,脚本中编译都改成make -j4,这没什么好讲的。主要是词袋和神经网络模型,这两个需要从github下载,这里就没有什么镜像源了,挂上梯子都得碰运气(国外节点连接不稳定),比如我现在就是6.4KB/s。

Download and Uncompress vocabulary

Download and Uncompress hf-net

下载好之后,按照脚本中的指令解压到指定目录。然后注释掉build.sh中下载&解压词袋和模型的这两段bash,再执行./build.sh

编译真的太快了,30s不到就OK了,生成目标可执行文件rgbd_tum。

四、下载数据集

TUM RGB-D Dataset Download下载一个序列并解压。在DXSLAM论文的Evolution章节中做完整系统实验时,得出如下一张表格:


所以我们选择fr3下的Sequence下载即可,这里我选择fr3_walking_xyz序列。

用python脚本 associate.py关联RGB图像和depth图像,PATH_TO_SEQUENCE是序列所在目录:

python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > PATH_TO_SEQUENCE/associations.txt

下面我们要先从数据集的rgb图像中获得关键点、局部描述子和全局描述子,使用HF_Net神经网络,命令格式如下,参数1是rgb的目录,参数2是输出目录。确保是在tensorflow1.12的环境下:conda activate tf112

cd hf-net
python3 getFeature.py image/path/to/rgb output/feature/path

过程中出现模块未找到的错误,所以pip install opencv-python安装下opencv2

ModuleNotFoundError: No module named 'cv2'

当然安装opencv-python绝对不会一帆风顺,遇到一直卡在build wheel的问题:

Building wheels for collected packages: opencv-python
Building wheel for opencv-python (pyproject.toml) 

搜索了30多个链接后,确定解决方法:从清华源上手动下载wheel,注意是python3.6版本的,然后cd到wheel所在目录:

 pip install opencv_python-3.2.0.8-cp36-cp36m-manylinux1_x86_64.whl 

只需要1s就安装好了,但前面的准备工作花了1h。

Processing ./opencv_python-3.2.0.8-cp36-cp36m-manylinux1_x86_64.whl
Requirement already satisfied: numpy>=1.11.3 in /home/dzh/anaconda3/envs/tf112/lib/python3.6/site-packages (from opencv-python==3.2.0.8) (1.19.5)
Installing collected packages: opencv-python
Successfully installed opencv-python-3.2.0.8

再次使用HF-Net输出信息

cd hf-net
python3 getFeature.py image/path/to/rgb output/feature/path


程序执行完成后,在feature目录下生成了3个目录:des、glb、point-txt,分别是local_descriptorsglobal_descriptorkeypoints

在程序结束后,你的光标变成了十字架,而且不能动了,对不对?
知道为什么吗?是因为将terminal当成了python运行环境,直接输入import命令就会卡死。解决方法就是新建终端,找到import的进程号,然后kill掉即可。

(base) dzh@dzh-Lenovo-Legion-Y7000:~$ ps -A|grep import
15124 pts/0    00:00:00 import
(base) dzh@dzh-Lenovo-Legion-Y7000:~$ kill -9 15124
至此,所有准备工作算是做完了,你花了how many hours?

五、运行系统

执行下面的命令,参数TUMX.yaml是我们下载的数据集的相机参数文件,PATH_TO_SEQUENCE_FOLDER是数据集目录,ASSOCIATIONS_FILE是关联的文件目录,OUTPUT/FEATURE/PATH是我们刚刚生成的HF-Net信息目录。

./Examples/RGB-D/rgbd_tum Vocabulary/DXSLAM.fbow Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE OUTPUT/FEATURE/PATH

下面这是我根据我的目录所执行的指令,包括我所在的python环境和所在目录都一目了然。

(tf112) dzh@dzh-Lenovo-Legion-Y7000:~/slambook/dxslam$ ./Examples/RGB-D/rgbd_tum  Vocabulary/DXSLAM.fbow ../TUM_DataSet/TUM3.yaml ../TUM_DataSet/rgbd_dataset_freiburg3_walking_xyz/ ../TUM_DataSet/rgbd_dataset_freiburg3_walking_xyz/associations.txt ./hf-net/feature/

运行效果如图所示,其实录制视频效果更好,这里就展示运行时的截图,使用的还是ORB-SLAM2Map Viewer


这是运行时的终端日志,默认是SLAM模式,可以看到在跟踪相机位姿丢失后会重置局部地图、闭环和数据库,每次会输出与局部地图匹配的关键点数量。每帧89ms,也就是10fps,使用CPU跑的话还是满足要求的。


match numbers: 453
nmatchesMap: 280
match numbers: 411
nmatchesMap: 258
virtual int g2o::SparseOptimizer::optimize(int, bool): 0 vertices to optimize, maybe forgot to call initializeOptimization()
match numbers: 474
nmatchesMap: 0
Track lost soon after initialisation, reseting...
System Reseting
Reseting Local Mapper... done
Reseting Loop Closing... done
Reseting Database... done
New map created with 338 points
match numbers: 452
nmatchesMap: 278
match numbers: 430
nmatchesMap: 260
match numbers: 422
nmatchesMap: 255
match numbers: 400
nmatchesMap: 239
match numbers: 369
nmatchesMap: 219
-------

median tracking time: 0.0919971
mean tracking time: 0.0890905

Saving keyframe trajectory to KeyFrameTrajectory.txt ...

trajectory saved!

可以处理你自己的相机序列:

You will need to create a settings file with the calibration of your camera. See the settings file provided for the TUM RGB-D cameras. We use the calibration model of OpenCV. RGB-D input must be synchronized and depth registered.

SLAM 和 Localization 模式

You can change between the SLAM and Localization mode using the GUI of the map viewer.

  • SLAM 模式
    This is the default mode. The system runs in parallal three threads: Tracking, Local Mapping and Loop Closing. The system localizes the camera, builds new map and tries to close loops.

  • Localization 模式
    This mode can be used when you have a good map of your working area. In this mode the Local Mapping and Loop Closing are deactivated. The system localizes the camera in the map (which is no longer updated), using relocalization if needed.

配置的过程正常都会遇到各种各样的问题,而解决问题的过程是最有价值的。

ubuntu18.04下kafka安装与部署

...息持久化到磁盘,因此可用于批量消费;本篇文章是基于Ubuntu18.04来安装Kafka。一、安装Java更新软件包sudoapt-getupdate安装openjdk-8-j 查看详情

如何使用 Tensorflow V.2.4 RTX 2070 Super Ubuntu 18.04 安装 Cuda 10.1

】如何使用TensorflowV.2.4RTX2070SuperUbuntu18.04安装Cuda10.1【英文标题】:HowtoInstallCuda10.1withTensorflowV.2.4RTX2070SuperUbuntu18.04【发布时间】:2021-04-0718:55:17【问题描述】:我是新手,正在学习机器学习。当我尝试按照说明https://www.tensorflow.o... 查看详情

部署到 Ubuntu 18.04 服务器后如何在 Laravel 中修复“未捕获的 ReflectionException:类视图不存在”

】部署到Ubuntu18.04服务器后如何在Laravel中修复“未捕获的ReflectionException:类视图不存在”【英文标题】:Howtofix"UncaughtReflectionException:Classviewdoesnotexist"inLaravelafterdeploymenttoUbuntu18.04server【发布时间】:2020-02-1208:12:52【问题... 查看详情

阿里云下ubuntu18.04安装部署emqx消息服务器(代码片段)

EMQX服务器简介EMQX(Erlang/Enterprise/ElasticMQTTBroker)是基于Erlang/OTP平台开发的开源物联网MQTT消息服务器。EMQX设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接阿里云后台开启端口EMQX消息服务器默认占用的TCP端口包括:1... 查看详情

ubuntu18.04ros安装完整

...来源:​​旋律/安装/乌班图-ROS维基​​​​(12条消息)Ubuntu18.04安装ROS_PanJie_的博客-CSDN博客_ubuntu18.04安装ros​​​​(12条消息)rosdepupdate超时失败2021最新解决方法_WGH无疆的博客-CSDN博客_rosdepupdate超时​​1.添加源Ctrl+Alt+T打开终... 查看详情

一套比较完备的在ubuntu18.04系统上部署nginx+postgresql+php的记录

 更新内核sudoaptupdate这里提示报错,错误是E:Unabletolocatepackageupdate。对网络进行检测:Pingwww.baidu.com提示:UnabletofoundthislocatePing14.215.177.37PING14.215.177.3756(84)bytesofdata.64bytesfrom14.215. 查看详情

部署到 Ubuntu 18.04 的 ASP.NET Core 3.0 应用程序抛出无法加载文件或程序集 System.Diagnostics.TraceSource

】部署到Ubuntu18.04的ASP.NETCore3.0应用程序抛出无法加载文件或程序集System.Diagnostics.TraceSource【英文标题】:ASP.NETCore3.0appdeployedtoUbuntu18.04throwsCouldnotloadfileorassemblySystem.Diagnostics.TraceSource【发布时间】:2020-03-2108:04:13【问题描述】:... 查看详情

如何在 Ubuntu 18.04 中为 sqitch 设置编码?

】如何在Ubuntu18.04中为sqitch设置编码?【英文标题】:HowtosetencodingforsqitchinUbuntu18.04?【发布时间】:2021-04-2811:36:32【问题描述】:我在Ubuntu18.04LTS中安装了用于雪花部署的sqitch。现在运行后sqitchverify--targetdev我得到以下信息:ø°ø... 查看详情

ubuntu18.04seetaface6人脸识别部署(代码片段)

Seetaface6人脸识别部署文章目录Seetaface6人脸识别部署一、下载源码二、编译工具三、编译3.1编译OpenRoleZoo3.2编译SeetaAuthorize3.3编译TenniS3.2编译剩余模块四、运行demo4.1修改lib路径4.2buildproject4.2运行Run!一、下载源码使用git命令git... 查看详情

ubuntu18.04下部署k8s

参考技术A6.1、下载cfssl6.2、etcd目录规划6.3、ca证书生成6.4配置etcd证书6.5、下载及配置etcd6.6、添加etcdsystemd启动启动etcd7.2、添加kube-apiserver证书7.3、天kube-apiserver配置文件7.4、添加kube-apiserversystemd启动启动kube-apiserver7.5、kubectl安装... 查看详情

在ubuntu18.04安装gitlab国内镜像加速[转]

在Ubuntu18.04安装gitlab国内镜像加速代码发表于11个月前(05-08)3条评论 现在部署私有的gitlab已经非常的方便,唯一的问题在国内下载速度太慢了。幸好清华大学有镜像。本文步骤参考官方文档,当前的gitlab版本10.7.3Ubuntu版本18.04L... 查看详情

在 ubuntu 18.04 上升级后,docker tensorflow/gpu 镜像无法运行

】在ubuntu18.04上升级后,dockertensorflow/gpu镜像无法运行【英文标题】:afterupgradesonubuntu18.04,dockertensorflow/gpuimagefailstorun【发布时间】:2021-10-2309:04:52【问题描述】:我曾经使用以下命令运行tensorflow/jupyter:dockerrun--gpusall-it-p8888:8888-... 查看详情

docker部署ubuntu18.04深度学习环境——cuda11.1cudnn8.0.5pytorch1.8.0(代码片段)

目录前言1安装nvidia显卡驱动2安装docker3Docker修改容器默认存储位置4安装dockercompose5安装nvidia-docker6下载nvidiaCUDA镜像7安装python3.8环境8安装pytorch1.89提交容器成为新镜像常用命令附录前言一次部署,无限安装😊1安装nvidia显卡驱动... 查看详情

ubuntu18.04安装lrzsz(代码片段)

前言    因为项目需要,服务客户局域网内部署,经常有文件传输的需要,方便传输,安装lrzsz来窗口传输文件;正文安装方式在线安装离线安装在线安装sudoapt-getinstalllrzsz离线安装下载压缩包下载链接:http://www.ohse.de/uwe/software/lrzsz.html... 查看详情

在 Ubuntu 18.04 上托管使用 docker 构建的 Web 应用程序

】在Ubuntu18.04上托管使用docker构建的Web应用程序【英文标题】:HostingwebapplicationbuiltwithdockeronUbuntu18.04【发布时间】:2021-10-0915:08:52【问题描述】:我有一个使用Codeigniter构建的Web应用程序。我最近在本地主机上的应用程序中实现... 查看详情

带有 HTTPS 的 Ubuntu 18.04 EC2 实例上的 Apollo 服务器

】带有HTTPS的Ubuntu18.04EC2实例上的Apollo服务器【英文标题】:ApolloServeronUbuntu18.04EC2instancewithHTTPS【发布时间】:2020-03-2109:49:22【问题描述】:我正在尝试将我的简单阿波罗服务器部署在来自AmazonWebServices(AWS)EC2的Ubuntu18.04实例上。... 查看详情

ubuntu18.04下载地址

中科大:http://mirrors.ustc.edu.cn/ubuntu-releases/18.04/南京大学:http://mirrors.nju.edu.cn/ubuntu-releases/18.04/上海交通大学:http://ftp.sjtu.edu.cn/ubuntu-releases/18.04/清华大学:https://mirror.tuna.tsinghua.edu.cn/ubuntu-releases/18.04/阿里云:http://... 查看详情

ubuntu 18.04 登录循环

】ubuntu18.04登录循环【英文标题】:ubuntu18.04loginloop【发布时间】:2020-08-1816:23:59【问题描述】:我使用的是ubuntu18.04。我对/etc/default/grub文件进行了更改并导致登录循环。tty命令仍然可以使用。我撤消了未更改的内容,但登录循... 查看详情