解决编译VINS-Fusion出现的缺失local_parameterization.h报错

问题背景:

最近在做毕设,打算用VINS-Fusion来为无人机进行定位,于是乎跟着CSDN上大佬的文章:

跑通VINS-Fusion全流程_小海盗haner的博客-CSDN博客_vins-fusion

在我的Ubuntu18.04虚拟机上跑数据集。安装ceres solver和依赖项的时候都很顺利,也就是按照如下流程安装:

#18.04
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver/
mkdir build
cd build
cmake ..
make
sudo make install

接下来进入VINS_Fusion安装和编译过程。创建ros空间和git VINS_Fusion也很顺利,直到执行到编译步骤:

catkin_make

就出现了如下错误:

fatal error: ceres/local_parameterization.h: 没有那个文件或目录
 #include "ceres/local_parameterization.h"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
compilation terminated.

解决方法

上百度和CSDN查了好久也没有相对应的解决方案(可能是我个人环境的问题?),但功夫不负有心人!这篇文章

编译VINS-Fusion碰到的 ceres错误_徽州SLAM李的博客-CSDN博客_vins-fusion编译时相机部分报错

给了我灵感,文章提到了可以卸载ceres2.1,更换ceres1.14.0,虽然不是同一个错误,但是打算死马当活马医一下试试,流程如下:

1.卸载原来的ceres

卸载的方法为在主目录打开终端输入:

sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -r /usr/local/include/ceres /usr/local/lib/libceres.a

(来自文章:

slam库安装:Ceres、g2o卸载和安装,OpenCV多版本共存_重点大专肄业生的博客-CSDN博客_ceres版本共存

)。

2.安装ceres1.14.0

接着从以下链接安装ceres1.14.0:

https://codeload.github.com/ceres-solver/ceres-solver/tar.gz/refs/tags/1.14.0

3.安装依赖项

在这里感谢文章:

Ubuntu18.04安装Ceres1.14_isErik的博客-CSDN博客

在终端输入:

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev

可能会出现无法定位libcxsoarse3.1.2的问题(可能是ubuntu版本和依赖版本不匹配导致的):

 

 解决方法(同样来自于这篇文章):

//第一步,打开sources.list
sudo gedit /etc/apt/sources.list
//第二步,将下面的源粘贴到最上方sources.list
deb http://cz.archive.ubuntu.com/ubuntu trusty main universe 
//第三步,更新源
sudo apt-get update
//第四步,重新输入依赖项安装命令安装依赖项
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev

 3.编译并安装ceres

在ceres文件夹下(去主目录里找就行)打开终端,输入如下命令:

mkdir build
cd build
cmake ..
make
sudo make install

这一步比较久,二十分钟左右。

接下来就可以继续编译你的VINS-Fusion啦,以上方法在我这里实测有效。

问题成因

在网上查找的时候发现了这篇文章:

Ceres的LocalParameterization_one to slam的博客-CSDN博客_ceres localparameter

 里面第一句就说明了原因:在高版本的ceres中,“LocalParameterization接口以及相关类已经被弃用,用流形(Manifold)进行了代替”。而我们在github中直接git下来的ceres应该是最新版本的,找不到ceres/local_parameterization.h也在情理之中了。所以改用低版本的ceres也就可以解决这一问题啦。

几句题外话

由于在没有硬件的情况下跑VINS-Fusion需要下载数据集,而官方给出的数据集动辄几十G,又是国外源,下载速度很慢。上网上找了一下,已经有大佬把数据集搬运到百度云上了:

SLAM数据集百度网盘下载(KITTI/EuRoC/TUM/shapenet)_嚣张的叉烧包的博客-CSDN博客_euroc数据集下载

 虽然百度云下载也快不到哪去(富裕的话有会员就另当别论),但好处是可以用哪个子数据包就下载哪个数据包,比如我就只用了一个EuRoC 中的 MH_01_easy.bag ,只有2G的话下载速度会快一点。

希望我的文章可以帮到你~ 

  • 33
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值