保姆级教程:在Ubuntu 18.04上搞定FASTER_LIO_SAM(含C++17编译避坑指南)
Ubuntu 18.04实战:FASTER_LIO_SAM全流程部署与C++17编译深度解析
当SLAM技术遇上Livox激光雷达,FASTER_LIO_SAM无疑是当前最值得关注的解决方案之一。这个融合了Fast-LIO、Faster-LIO和LIO-SAM三大算法优势的项目,通过IEKF(迭代扩展卡尔曼滤波)、IVox(增量体素化)和GTSAM(因子图优化)的强强联合,为机器人定位与建图提供了全新的可能性。本文将带你从零开始,在Ubuntu 18.04系统上完成整套环境的搭建,特别针对C++17编译问题和Boost库依赖等常见陷阱提供实战解决方案。
1. 环境准备与基础依赖安装
在开始FASTER_LIO_SAM的安装之前,我们需要确保系统具备所有必要的编译工具和基础库。Ubuntu 18.04默认的软件源可能不包含所有最新版本的开发工具,因此需要先进行系统更新:
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git wget关键依赖说明:
- GCC/G++编译器:FASTER_LIO_SAM需要支持C++17标准的编译器,Ubuntu 18.04默认安装的是GCC 7.5,虽然可以工作,但建议升级到GCC 9或更高版本以获得更好的兼容性
- CMake:至少需要3.10版本,用于项目构建
- Git:用于克隆项目仓库和子模块管理
提示:如果后续遇到C++17相关编译错误,可能需要先升级GCC版本。可以通过以下命令安装GCC 9:
sudo apt install -y gcc-9 g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9
2. ROS Melodic与Livox生态搭建
FASTER_LIO_SAM基于ROS框架开发,因此需要先安装ROS Melodic(Ubuntu 18.04对应的官方版本)。以下是完整的ROS安装流程:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install -y ros-melodic-desktop-full echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo apt install -y python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential sudo rosdep init rosdep updateLivox激光雷达需要特定的驱动支持,以下是Livox SDK和ROS驱动的安装步骤:
- Livox SDK安装:
git clone https://github.com/Livox-SDK/Livox-SDK.git cd Livox-SDK mkdir build && cd build cmake .. make -j$(nproc) sudo make install- Livox ROS驱动安装:
mkdir -p ~/livox_ws/src cd ~/livox_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver.git cd .. catkin_make echo "source ~/livox_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc常见问题排查:
- 如果遇到
catkin_make失败,检查是否已安装所有ROS依赖:rosdep install --from-paths src --ignore-src -r -y - Livox驱动需要特定的USB权限,执行以下命令后重新插拔设备:
sudo cp ~/livox_ws/src/livox_ros_driver/livox_ros_driver/scripts/udev /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger
3. FASTER_LIO_SAM核心组件安装
FASTER_LIO_SAM依赖于三个核心组件:Fast-LIO、Faster-LIO和LIO-SAM。每个组件都有其特定的依赖关系,需要按顺序安装。
3.1 Fast-LIO及其依赖
Fast-LIO需要ikd-Tree作为核心数据结构,以下是完整安装流程:
mkdir -p ~/fast_lio_ws/src cd ~/fast_lio_ws/src git clone https://github.com/hku-mars/FAST_LIO.git git clone https://github.com/hku-mars/ikd-Tree.git mv ikd-Tree FAST_LIO/include/ cd .. catkin_make关键文件修改: 在编译前,需要检查FAST_LIO/CMakeLists.txt,确保以下内容存在:
find_package(Eigen3 REQUIRED) find_package(PCL REQUIRED) find_package(OpenCV REQUIRED)3.2 Faster-LIO特定配置
Faster-LIO引入了IVox作为加速结构,需要特别注意Eigen库的版本:
sudo apt install -y libeigen3-dev验证Eigen版本(需要至少3.3.7):
pkg-config --modversion eigen3如果版本过低,需要手动安装新版:
git clone https://gitlab.com/libeigen/eigen.git cd eigen mkdir build && cd build cmake .. sudo make install3.3 LIO-SAM与Boost库问题解决
LIO-SAM依赖GTSAM和Boost库,以下是安装步骤:
sudo apt install -y libboost-all-dev sudo apt install -y libgtsam-dev libgtsam-unstable-dev解决-lBoost::timer错误: 这个错误源于Boost库的链接问题,修改CMakeLists.txt添加:
find_package(Boost REQUIRED COMPONENTS timer) target_link_libraries(your_target_name ${Boost_LIBRARIES})4. FASTER_LIO_SAM编译与C++17实战
现在进入最关键的FASTER_LIO_SAM编译阶段,这里会遇到最具挑战性的C++17兼容问题。
4.1 项目获取与基础编译
mkdir -p ~/faster_lio_ws/src cd ~/faster_lio_ws/src git clone https://github.com/yourusername/faster_lio_sam.git cd .. catkin_make4.2 C++17编译问题深度解决
当遇到类似以下错误时:
error: the type 'const faster_lio::<lambda(const Vec2i&, const Vec2i&)>' of 'constexpr' variable 'faster_lio::less_vec2i' is not literal这表明编译器没有使用C++17标准。需要在CMakeLists.txt最前面添加:
add_compile_options(-std=c++17) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)完整CMake配置示例:
cmake_minimum_required(VERSION 3.10) project(faster_lio_sam) # C++17标准设置 add_compile_options(-std=c++17) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs sensor_msgs geometry_msgs nav_msgs tf2 tf2_ros tf2_geometry_msgs ) find_package(PCL REQUIRED) find_package(Eigen3 REQUIRED) find_package(OpenCV REQUIRED) find_package(GTSAM REQUIRED) catkin_package() include_directories( include ${catkin_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${OpenCV_INCLUDE_DIRS} ${GTSAM_INCLUDE_DIR} ) add_executable(faster_lio_sam_node src/faster_lio_sam_node.cpp) target_link_libraries(faster_lio_sam_node ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBS} ${GTSAM_LIBRARIES} )4.3 完整编译流程
执行以下命令进行完整编译:
cd ~/faster_lio_ws catkin_make -DCMAKE_BUILD_TYPE=Release source devel/setup.bash编译优化建议:
- 使用
-j$(nproc)参数充分利用多核CPU - 首次编译失败后,执行
catkin clean再重新尝试 - 如果内存不足,尝试减少并行编译任务数:
catkin_make -j2
5. 运行测试与参数调优
成功编译后,可以开始测试FASTER_LIO_SAM的实际运行效果。
5.1 数据准备与启动
- 下载测试数据集(如HKU校园序列):
wget -O hku_campus_seq_00.bag "your_download_link"- 修改配置文件
faster_lio_sam/config/params.yaml中的frame_id设置:
lidarFrame: "livox_frame" baselinkFrame: "base_link" odometryFrame: "odom" mapFrame: "map"- 启动核心节点:
roslaunch faster_lio_sam run.launch- 在新终端播放数据集:
rosbag play --clock hku_campus_seq_00.bag5.2 实时监控与可视化
使用RViz进行实时可视化:
rosrun rviz rviz -d `rospack find faster_lio_sam`/config/rviz_config.rviz关键话题监控:
/faster_lio_sam/odometry:位姿估计输出/faster_lio_sam/mapping/cloud_registered:注册后的点云/tf:坐标变换树
5.3 性能调优参数
在params.yaml中,以下参数对性能影响较大:
| 参数名 | 默认值 | 建议范围 | 说明 |
|---|---|---|---|
point_filter_num | 1 | 1-5 | 点云降采样率 |
max_iteration | 4 | 3-6 | IEKF最大迭代次数 |
cube_side_length | 200.0 | 100.0-300.0 | 地图立方体边长(m) |
ivox_grid_resolution | 0.5 | 0.3-1.0 | IVox网格分辨率(m) |
laser_point_cov | 0.001 | 0.0005-0.005 | 激光点协方差 |
内存优化技巧:
- 减少
cube_side_length可以显著降低内存占用 - 增大
ivox_grid_resolution可以平衡精度和性能 - 在资源受限的设备上,设置
point_filter_num=3或更高
6. 高级调试与问题排查
即使按照上述步骤操作,仍可能遇到各种运行时问题。以下是常见问题的解决方案。
6.1 TF树配置检查
使用以下命令检查TF树是否完整:
rosrun tf view_frames evince frames.pdf确保存在从livox_frame到base_link再到odom的完整变换链。
6.2 点云同步问题
如果出现点云和IMU不同步的情况,在params.yaml中调整:
imu_time_offset: 0.0 # 尝试-0.1到0.1之间的值 lidar_time_offset: 0.06.3 性能瓶颈分析
使用rqt_graph查看计算图:
rosrun rqt_graph rqt_graph对于计算密集型节点,可以使用top命令监控CPU使用率:
top -H -p $(pgrep -d',' -f faster_lio_sam_node)6.4 内存泄漏排查
如果发现内存持续增长,可以使用valgrind工具检测:
valgrind --tool=memcheck --leak-check=full rosrun faster_lio_sam faster_lio_sam_node7. 实际部署经验分享
在多次项目部署中,我发现以下几个经验特别值得分享:
环境一致性:在不同机器上部署时,使用Docker容器可以避免环境差异导致的问题。制作包含所有依赖的基础镜像能节省大量调试时间。
参数持久化:对于特定场景(如室内、隧道、城市峡谷等),将调优后的参数保存为不同的配置文件,方便快速切换。
硬件加速:在支持CUDA的设备上,可以修改部分代码使用GPU加速。特别是IVox的最近邻搜索和IEKF的矩阵运算部分。
日志系统:在
launch文件中添加output="screen"参数,同时使用rosbag record记录关键话题,便于后期分析。实时性保障:对于高频率Livox雷达(如MID-70),需要调整ROS参数提高消息队列大小:
<param name="/rosdistro" value="melodic"/> <param name="/rosversion" value="1.14.13"/> <param name="/run_id" value="$(anon run_id)"/> <param name="/faster_lio_sam_node/sub_cloud/queue_size" value="100"/>
对于初次接触FASTER_LIO_SAM的开发者,建议从官方提供的HKU校园数据集开始,熟悉整个流程后再尝试自己的数据。当遇到编译问题时,耐心检查CMake输出的详细错误信息,往往比盲目搜索解决方案更有效率。
