Faster-lio是智行者的高博团队开源的激光惯性里程计算法,该算法基于Fast-LIO2算法,主要创新点时提出一种增量式稀疏体素结构:iVox ,并大大提升了算法的效率。

在github中作者已经给出了基于Docker的配置方法,ubuntu20.04和Ubuntu18.04的环境配置方法。对于Ubuntu18.04而言,我的gcc/g++版本是7.5.0,需要联网安装更高版本的gcc,这对电脑无法联网的打工人不太友好,且升级gcc版本可能引起其他工程的编译异常。本文旨在解决在不升级gcc版本的情况下编译faster-lio的问题。

 一、为什么要升级gcc/g++?

因为在faster-lio中为了提升算法效率,使用到了C++17的一些新特性,因此需要更高版本的gcc/g++。因此一个解决思路是,我们把faster-lio中使用C++17新特性的部分替换成低版本的语法即可。

二、哪些地方使用了C++17新特性?

在阅读整个程序后,通过程序中include的头文件,可以发现,程序中用到了新特性<execution>,

<execution>是C++17新增的库,也是<algorithm>的一部分,它主要定义了并行函数在多线程中运行的三种策略,用于提升算法的效率。详情请参考这个博客:<execution>。在faster-lio中对execution的应用都是作为for_each的参数。

#include <execution>
 
std::for_each(std::execution::par_unseq, index.begin(), index.end(), [&cloud, &closest_cloud, this](size_t idx)
{****}

因此修改起来也很简单,只要所有相关文件中的<execution>头文件注释掉,for_each后边的std::execution::par_unseq删掉即可,如下:

//#include <execution>
 
std::for_each(index.begin(), index.end(), [&cloud, &closest_cloud, this](size_t idx)
{****}

三、编译

新建工程文件夹work_space、在里边创建一个build文件夹、一个src文件夹,将faster-lio包放在src文件夹下。在work_space文件夹中打开终端,使用catkin_make编译,然后source即可。

catkin_make
source devel/setup.bash

 注意,faster-lio还有以下几个依赖库,在编译前应先安装。如果缺少哪个库,单独离线安装即可,CSDN上教程已经很多了。

依赖库:

ROS (melodic or noetic)
glog: sudo apt-get install libgoogle-glog-dev
eigen: sudo apt-get install libeigen3-dev
pcl: sudo apt-get install libpcl-dev
yaml-cpp: sudo apt-get install libyaml-cpp-dev