当前位置:   article > 正文

VLOAM的安装运行

vloam

前言:VLOAM框架通常对应的是文章《Visual-lidar Odometry and Mapping: Low-drift, Robust, and Fast》,在搜集资料和代码的过程中发现有些作者会把Demo-Lidar当作VLOAM,而Demo-Lidar框架通常对应的文章应该是《Real-time Depth Enhanced Monocular Odometry》。

        作者在环境配置的过程中,遇到并解决了:

1、Ubuntu18.04下(其他Ubuntu版本依然适用)OpenCV多版本共存问题;

2、Opencv4编译时找不到eigen库(Eigen3:Eigen)的问题;

3、因Opencv多版本共存引发的catkin_make时找不到Opencv库的问题。

        以上问题比较特别,所以特别记录一下,而对于本文没有记录到的问题,还需各位到百度、博客、github、谷歌等进行搜索、解决。

1.前期准备

(1)Ubuntu18.04+Ros(melodic),所附链接为一键安装ros 的方法,使用于多种ros版本,值得注意的是,进行“一键安装ros”之后,还需要再次运行wget http://fishros.com/install -O fishros && . fishros,选择3进行rosdep的配置;

(2)VLOAM源码:非论文作者开源,是由其他大佬复现完成,目前能跑rosbag,还没有改进成为实时定位框架,下载并解压即可;

(3)在源码的README文件中,代码作者要求:

                OpenCV4.5.1、Eigen3 3.3、Ceres 2.0、PCL1.2

        我所使用的配置为:

                OpenCV4.5.1、Eigen3 3.3.9、Ceres1.14.0、PCL1.9.1+vtk8.2.0(附pcl安装参考链接)

        我的系统原本安装的OpenCV版本是3.4.12,若是直接删除更换为4.5.1会导致之前的代码无法运行,于是采用多版本并存的方法。

2. OpenCV多版本具体过程

(1)下载OpenCV3.4.12和4.5.1的源码,在build进行进行cmake时,两个包使用了不一样的参数:

        【1】 3.4.12版本没有出太多问题,基本上都是能够直接查到并解决。cmake时,输入指令:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_3.4.12 -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..

这里注意参数:

-D CMAKE_INSTALL_PREFIX=/usr/local/opencv_3.4.12指定安装路径,若不指定,则默认安装至/usr/local中,不利于不同版本OpenCV的管理;

-D OPENCV_EXTRA_MODULES_PATH = ${contrib文件的路径}指定contrib文件的路径;

        【2】4.5.1出的问题比较多,具体为和anaconda冲突导致cmake报错、编译VLOAM时opencv相关文件找不到Eigen3:Eigen。cmake时,输入指令:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_4.5.1 -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..

         这里我遇到了cmake错误,原因是之前安装的anaconda与之冲突,所以改为以下指令:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_4.5.1 -D WITH_TBB=ON -D BUILD_SHARED_LIBS=OFF -D WITH_OPENMP=ON -D ENABLE_PRECOMPILED_HEADERS=OFF ..

        由于通过“-D OPENCV_EXTRA_MODULES_PATH = ${contrib文件的路径}”指定contrib文件后,cmake依旧报错,所以这里并未指定contrib文件的路径。

        此外,后续通过cmake编译VLOAM源码时报错opencv相关文件找不到Eigen3:Eigen,最终在舍友的帮助下,怀疑也是anaconda的原因,所以在以上指令的基础上加上了-D WITH_EIGEN=OFF,即在编译OpenCV4.5.1时不使用Eigen编译。

        最终指令变为:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_4.5.1 -D WITH_TBB=ON -D BUILD_SHARED_LIBS=OFF -D WITH_OPENMP=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D WITH_EIGEN=OFF ..

        之后就是make+sudo make install。

(2)将OpenCV的库添加到路径,让系统可以找到:

        【1】sudo gedit /etc/ld.so.conf.d/opencv.conf

        【2】添加:/usr/local/opencv_3.4.12/lib

                                 /usr/local/opencv_4.5.1/lib

        配置bash:

        【1】sudo ldconfig

        【2】sudo gedit /etc/bash.bashrc

        【3】添加:

                                # OpenCV_3.4.12
                                #export PKG_CONFIG_PATH=/usr/local/opencv_3.4.12/lib/pkgconfig
                                #export LD_LIBRARY_PATH=/usr/local/opencv_3.4.12/lib

                                # OpenCV_4.5.1
                                export PKG_CONFIG_PATH=/usr/local/opencv_4.5.1/lib/pkgconfig
                                export LD_LIBRARY_PATH=/usr/local/opencv_4.5.1/lib

        【4】source ~/.bashrc

        用到哪个版本就把那个版本对应的配置打开,不用的版本最好用#关掉。

        每次更换opencv版本之后,都需要source ~/.bashrc,此外,opencv3和4查看版本信息的指令不一样,OpenCV3利用指令:

pkg-config --modversion opencv

        OpenCV4利用指令:

pkg-config --modversion opencv4

         我在使用OpenCV3而屏蔽OpenCV4时,使用第一条指令能够查看3的具体版本,使用第二条指令则查不到信息;使用OpenCV4而屏蔽OpenCV3时,使用第一条指令能查看3的具体版本,使用第二条指令也能够查到4的具体版本,但是不影响使用。

3.编译VLOAM源码

        VLOAM的源码解压之后如下:

        src中装着VLOAM所有的功能包。

        在主文件夹中创建工作空间:新建文件夹VLOAM_ws并将整个src复制到文件夹下,并在VLOAM_ws文件夹下catkin_make。

        按理说,通过ros编译之后就可以进行roscore+roslaunch+rosrun这一套,但是我的catkin_make阶段出现了“未定义的引用问题”:

         未定义的引用全都发生在opencv的指令中,考虑是CMakeLists文件中链接库没成功的问题,所以在src中所有功能包的CMakeLists文件(不是ros的CMakeLists)中添加以下语句:

        后面的路径和我们设置的opencv安装路径有关系,以上的语句能够告诉系统,在编译这个文件时,去这个路径找opencv的相关文件;

        此外, 若是和contrib一起安装成功(我的3.4.12版本是如此),这里的路径会有所变化,这时需要找到安装opencv时所创建的build文件夹(mkdir build),里面有个share文件夹,此时需要添加的路径为:

         大家需要根据自己的实际路径自行更改。

        至此,再次catkin_make,编译通过。

4.运行VLOAM

        在运行前,需要准备好rosbag文件,代码作者推荐使用kitti2bag,按照该软件对应的README,下载相应的kitti包+通过kitti2bag转化为rosbag即可。

        不过有时候kitti2bag会安装失败,这里附上网友xieshuqin上传的bag文件,其中包含三个rosbag文件,均可用于VLOAM框架。

        按照VLOAM的README文件的要求,我们需要把要运行的rosbag全部移动到src/vloam_main/bags中(该文件夹需要自行创建),然后在VLOAM_ws下依次执行:

        【1】roscore

        【2】(新建终端)source devel/setup.bash

                      roslaunch vloam_main vloam_main.launch

        【3】(新建终端)source devel/setup.bash

rostopic pub /load_small_dataset_action_server/goal vloam_main/vloam_mainActionGoal "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: ''
goal_id:
  stamp:
    secs: 0
    nsecs: 0
  id: ''
goal:
  date: '2011_09_26'
  seq: '0001'

  start_frame: 0
  end_frame: 1100"

         这里需要注意的是date和seq需要和rosbag的名字对应上,以上指令和以下rosbag对应:

         上述的【3】代替了rosrun的位置(这里如果直接使用rosrun会失败),此时会在rviz界面得到以下画面:

 5.写在最后

1、运行过程中很有可能出现其他棘手的问题,非常推荐大家去相应github的issue区寻找同样的问题以及解决方案;

2、运行ros时,需要考虑新终端是否source devel/setup.bash;

3、以上代码运行过程中,需要特别注意是在什么文件夹下运行的、是否需要更改指令中的路径。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/304481
推荐阅读
相关标签
  

闽ICP备14008679号