最近由于在做3D激光slam的相关工作,在网上看见 BLAM 的效果不错,就下载了相关的代码跑了一下,在编译安装过程中遇到了一些问题,在这里记录一下,供有需要的同学看一下。
具体的安装过程这里就不在赘述了,如果你不知道,自行百度参考其他的教程或者GitHub上的官方教程。第一次报错是
fatal error:ros/ros.h:No such file or directory这个错误是 geometry_utils 模块的中错误,主要是package.xml 和 CMakeLists.txt中的错误,其他教程都有修改的方法,这里不列举了,参考 :
https://blog.csdn.net/xmy306538517/article/details/81122663
接下来的这个错误是大概编译到80%的时候报的错误:
仔细查看是回环检测模块中的 LaserLoopClosure.h 文件中用到了#include<gstam/baseVector.h> ,再定位到 /usr/local/include/gtsam/base/Vector.h 中,发现这两句话
static_assert( GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION && GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION, "Error:GTSAM ................... of Eigen");这句 断言 主要是判断系统安装的 eigen 版本与 gtsam 中包含的版本是否相同,我系统安装的是3.2.9的,而 gtsam 中包含的则是3.3.7的,所以这里会报错。
我的解决办法是将这个断言语句给注释掉,然后在编译就没有问题了。 但是!!!!在后面运行出现问题,具体问题及解决办法接着往下看。 更新:2019年11月27日另外一种方法:
在编译 gtsam 时,cmake显示的信息会出现:find eigen version:3.3.7,这说明gtsam编译时使用的是 eigen 3.3.7,打开CMakeLists.txt 定位到 270:300 这段,这段的主要作用是 选择是否使用 MKL 模块,需要使用 MKL 则eigen 的版本要使用gtsam包含的版本,如果不使用 MKL 则使用系统自带的版本,这里我们可以修改这句话,
option(GTSAM_USE_SYSTEM_EIGEN "Find and use system-installed Eigen. If 'off', use the one bundled with GTSAM" OFF) 将最后的OFF 改为 ON 即可。这里改过之后会调用系统自带的版本的 eigen 库,编译过程中可能出现一堆 warning,看起来非常的难受,但是编译可以通过。
但是编译完成之后我在运行 “roslaunch blam_example test_online.launch” 时出现这种情况:
推测可能是GTSAM版本的问题,我用的是最新的4.0.2版本的gtsam,后来修改为 4.0.0 版本(更换为4.0.0版本的gtsam后,即使系统eigen库版本与gtsam安装包中的版本不同,也不会出现上面的断言判断),重新编译一下,就可以成功的运行 roslaunch了。
如果!!!!你要使用使用MKL 模块,那么请跳过这种方法,你可以参考第一种方法,或者修改系统安装的 Eigen 版本。
博文如有问题,欢迎留言指正,在此谢过。