R3LIVE编译运行和代码分析

R3LIVE编译和代码分析

最近踩了一下R3LIVE的坑,花了很长时间,编译、运行、跑自己数据集、改代码加功能。先插个眼,如果有很多兄弟需要或者等有时间了来写这篇文章。

原始demo:

原始demo


在自己的数据集上运行:

在自己的数据集上运行


先说一下自己的环境吧,我是AMD5800H+3060+Ubuntu 18.04+ROS Melodic,但其实这个框架不吃显卡,CPU和内存越高越好(大部分SLAM框架都是如此),内存最好要有16G(包括swap内存),否则可能会运行崩溃,因为全局地图会默认开辟大概12G的内存,非要用小内存电脑运行的话,可以在源代码中修改地图的大小。

这个框架编译最困难的地方应该就是opencv的版本要求比较高和高版本的opencv与cv_bridge的配合。其余的ROS还有各种依赖报错就挺好解决的,缺啥装啥,具体参考r3live的官方github。我只讲opencv相关的。

官方已经验证过能用的opencv版本是3.3.1, 3.4.16, 4.2.1 and 4.5.3,我使用的是4.5.1。首先就是下载对应版本的opencv和opencv_contrib,当然是用git命令啦,git clone https://github.com/opencv/opencv.gitgit clone https://github.com/opencv/opencv_contrib.git,注意要进入克隆的文件夹中使用git checkout x.x.x来选择相应的版本,比如我是切换成4.5.1就用git checkout 4.5.1。然后在opencv的文件夹下建一个build文件夹并进入,一般的第三方库这时候cmake ..就行了,但是opencv不行,要配置一堆编译参数,使用以下命令。

cmake -DCMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.1 \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D WITH_CUDA=1 \
-D WITH_CUDNN=1 \
-D WITH_V4L=1 \
-D OPENCV_DNN_CUDA=1 \
-D CUDNN_VERSION='8.1.0' \
-D CUDNN_INCLUDE_DIR='/usr/local/cuda-11.1/targets/x86_64-linux/include' \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D CUDA_nppi_LIBRARY=true \
-D OPENCV_GENERATE_PKGCONFIG=1 \
-D CUDA_GENERATION=Pascal  ..

其中的opencv_contrib路径根据自己的安装位置进行选择,以上是使用GPU加速的opencv(这个框架的计算资源的消耗本身就比较小,不加速也无所谓),需要提前配置好显卡驱动和CUDA,当然也可以编译不加速的opencv,只需要将WITH_CUDA、WITH_CUDNN和OPENCV_DNN_CUDA改为零,以及相应路径删掉即可,如下。

cmake -DCMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.1 \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D WITH_CUDA=0 \
-D WITH_CUDNN=0 \
-D WITH_V4L=1 \
-D OPENCV_DNN_CUDA=0 \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D CUDA_nppi_LIBRARY=true \
-D OPENCV_GENERATE_PKGCONFIG=1 \
-D CUDA_GENERATION=Pascal  ..

如果遇到Configuring incomplete, errors occurred!,那非常遗憾,先检查编译的路径是不是都正确,并自己查看报错的原因尝试自己解决(这不正是玩linux的意义所在嘛),如果还是不行,可以去别人的博客找找解决方法(以上两条指令对我都是能正常使用的)。如果是Configuring done,那恭喜你,可以进行下一步了。

cmake完成后就需要make了,使用make -j 14多线程更快速编译完成,这一步要比较长时间。编译完成之后,不要sudo make install,因为可能你电脑上已有的程序一般会习惯用3版本的opencv,还有一个就是ros中的cv_bridge默认会使用3版本的opencv,如果将opencv4安装到系统中,再使用cv_bridge时会报错。其实这也是维护环境的一个技巧,你的电脑中不可能只有一个框架,多个框架可能依赖不同版本的第三方库,比如opencv,pcl,ceres,protbuf等等,都可以给每个框架编译一个专用的,而不是都从系统路径中寻找。

所以我们修改R3LIVE的CmakeList.txt来锁定opencv的路径,导入我们新编译的版本而不是系统中存在的版本。在find_package(opencv REQUIRED)之前加入set(OpenCV_DIR "/home/yhd/opencv-4.5.1-withGPU/build")即可,需要改成自己刚编译好的build路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340