R3LIVE编译和代码分析
最近踩了一下R3LIVE的坑,花了很长时间,编译、运行、跑自己数据集、改代码加功能。先插个眼,如果有很多兄弟需要或者等有时间了来写这篇文章。
原始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.git
,git 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 举报,一经查实,本站将立刻删除。