赞
踩
前言: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)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会导致之前的代码无法运行,于是采用多版本并存的方法。
【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。
【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的具体版本,但是不影响使用。
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,编译通过。
在运行前,需要准备好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界面得到以下画面:
1、运行过程中很有可能出现其他棘手的问题,非常推荐大家去相应github的issue区寻找同样的问题以及解决方案;
2、运行ros时,需要考虑新终端是否source devel/setup.bash;
3、以上代码运行过程中,需要特别注意是在什么文件夹下运行的、是否需要更改指令中的路径。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。