ubuntu18.04部署DXSLAM,CNN+VSLAM,CPU实时运行

news2024/11/29 20:36:29

一、下载源代码

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

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.

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟化技术学习笔记8

添加网卡: 1、virt-manager: 选择虚拟机直接添加网卡操作。 2、virsh命令: virsh list virsh domiflist centos7-1 virsh attach-interface centos7-1 \ --type network \ --source default \ --model virtio \ --config 虚拟机查看网卡的添加情况&…

分享65个NET源码,总有一款适合您

NET源码 分享65个NET源码,总有一款适合您 65个NET源码链接:https://pan.baidu.com/s/19yFm_9K_L0xfykMP1hdP5A?pwdn2p7 提取码:n2p7 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...&#x…

Apache APISIX Ingress 1.6 正式发布!

距离上一个版本 v1.5 发布,已经过了 3 个月,我们很高兴地宣布 Apache APISIX Ingress v1.6 正式发布! 在该版本中,共有 29 位贡献者 参与代码提交,其中 17 位是新晋贡献者 ,感谢大家的支持和参与&#xff…

nacos的服务注册与调用

此篇博客进行一个简单实例进行展示服务注册和服务的调用,以订单与库存模块为例,其结构图如下: 目 录 1、创建订单模块与库存模块 1.1、编写stock模块 1.2、编写order模块 2、访问地址进行测试 3、总结 1、创建订单模块与库存模块 创建两…

论文投稿指南——中文核心期刊推荐(生物科学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

.net开发安卓入门-文件操作与配置操作

.net开发安卓入门-文件操作与配置操作文件操作内部存储代码运行效果System.Environment.SpecialFolder枚举类型对应路径表格外部存储(代码和效果见上图)区别缓存SharedPreferences获取SharedPreferences对象方法列表读取配置信息写配置信息AssetsNlog配置…

【Linux项目自动化构建工具 make/Makefile】

目录 1 背景 2 原理 3 Linux第一个小程序-进度条 3.1 行缓冲区概念 3.2 进度条代码 4 总结 1 背景 在VS中我们知道当我们想要运行程序时直接按f5程序就会自动运行起来,但是在Linux中如果有多个文件好像并不能这样快速进行,那么这时候就…

远程接入(远程办公)解决方案 OpenText™ Exceed™ TurboX (ETX)

OpenText™ Exceed™ TurboX 安全快速的虚拟应用程序和桌面解决方案,适用于混合工作环境,只需低带宽互联网连接即可为办公桌面和图形要求苛刻的软件提供卓越的用户体验。 突出优势: 支持混合云环境使用任何设备随时随地远程工作为用户提供类…

SpringCloud之Zuul路由网关

Zuul路由网关1. Zuul的概念2. Zuul的作用3. 案例1. Zuul的概念 Zuul包含了对请求的路由(用来跳转的)和过滤两个最主要功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤…

新年新故事 | Nice 兔 Meet U

各位伙伴新年好哇 比特熊又回来啦【比特熊故事汇2.0】23年开年第一场与大家一起认识“印象中”的不寻常开发人产品创新实践、工作 Mix 生活、反差感2023年1月12日19:00-20:00【比特熊故事汇2.0】新年想见你第一面Nice 兔 Meet U 比特熊兔年特别限定手办2023年兔年来到&#xff…

Ubuntu10.04编译libevent记录

目前有一个旧的程序 基于很老的ubuntu1004的系统做开发 很多新的C11什么的都用不了 之前 很多在ubuntu1804 上编译的so库 直接拿到1004上来用 提示报错 如下 没办法 只能重新在ubuntu 1004 上面编译了 记录下 下载libevent之后解压 直接执行./configure 提示报错如下图 …

kettle简单的ETL抽取同步两个库之间的数据

kettle下载安装 kettle下载,提取码为 1qyd 安装后,把连接数据库需要的jar包放到 data-integration\lib 目录下,到时候kettle才能正确连接数据库。 sqlserver需要的jar包,提取码为 6a6qmysql需要的jar包,提取码为 n8…

深入理解CAS

目录深入理解CASCAS中的引入什么是CAS?CAS原理——Unsafe类CAS优点CAS缺点ABA问题解决ABA问题深入理解CAS CAS中的引入 我们知道我们使用Volatile可以保证可见性,但不保证原子性,那么,如果我们不使用Lock锁和synchronized&#x…

机器学习之XGBoost模型学习

1.划分数据集函数train_test_split以及数据的加载: python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解_侯小啾的博客-CSDN博客_train_test_split 还有这篇文章,解析的清除: https://com…

2022 年度中国时序数据应用创新奖公布,涉及工业互联网、车联网等多个行业

随着新兴技术的快速发展,越来越多的企业开始以技术的融合创新来推动业务的数字化智能化转型,其中也诞生了很多成功的应用实践案例。2023 年 1 月 9 日,北京涛思数据科技有限公司(TAOS Data) 正式公布「2022 年度中国时序数据应用创新奖」获奖…

【路径规划】基于D星算法实现栅格地图机器人路径规划

目录算法介绍栅格地图代码运行效果算法介绍 A* 在静态路网中非常有效(very efficient for static worlds),但不适于在动态路网,环境如权重等不断变化的动态环境下。 D是动态A(D-Star,Dynamic A Star) 卡内…

nodejs 如何实现自动化部署?

什么是自动化部署 我接触到的自动化部署概念最早是在 Vercel 上提供的,Vercel 可以提供和 github 联动的功能,通过和你自己的 github 上的某个库建立‘链接’,当你 commit 到 github 远程库时就可以自动部署,Vercel 会帮你完成以…

腾龙健康冲刺A股上市:计划募资10亿元,彭学文家族色彩浓厚

近日,广州腾龙健康实业股份有限公司(下称“腾龙健康”)预披露招股书,准备在深圳证券交易所主板上市。 本次冲刺上市,腾龙健康计划募资10.13亿元,其中4.09亿元用于水疗按摩池配件生产基地升级项目&#xff0…

数据可视化做出的个人年终总结报告,高颜值更高更具说服力

年终总结与个人业绩、晋升、加薪、离职或留任密切相关。聪明人利用年终报告来总结自己的成就和获得资源,领导者也可以从年终报告看出员工的成长和变化。例如我用可视化互动平台,智能分析做出的公司年终总结报告,高颜值高说服力,领…

Java异常的分类和注意点

异常体系结构 Error与Exception Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。 Exception是程序本身可以处理的异常…