手把手教你编译 MULLS:Ubuntu 下 PCL、Glog、Ceres 等 8 大依赖库安装避坑全攻略
【免费下载链接】MULLS🤔 MULLS: Versatile LiDAR SLAM via Multi-metric Linear Least Square [ICRA 21]项目地址: https://gitcode.com/gh_mirrors/mu/MULLS
MULLS 是 ICRA 2021 论文《Versatile LiDAR SLAM via Multi-metric Linear Least Square》的开源实现,一款高效、低漂移、多场景适用的 LiDAR SLAM(激光雷达同步定位与建图)系统。不过,编译 MULLS 之前必须先装好 PCL、Glog、Gflags、Eigen3、Ceres、OpenCV、HDF5、TEASER++ 这 8 大依赖库,而这一步正是新手最容易踩坑的地方。本文整理了一份 Ubuntu 环境下的 MULLS 依赖库安装与编译完整攻略,从零开始带你一次通过。
MULLS 是什么?为什么值得动手编译
MULLS(Multi-metric Linear Least Square)由 ETH 团队提出,核心思路是用多度量线性最小二乘完成点云特征提取、匹配与位姿解算,让 LiDAR SLAM 在城区、高速、校园等不同场景下都能保持低漂移与实时性,同时前后端(回环检测、位姿图优化)齐备。
- 🧭 前端:多度量特征提取 + 线性最小二乘位姿估计
- 🔁 后端:回环检测 + 位姿图优化,支持 Ceres / g2o / GTSAM
- 📊 支持 PCD、LAS、TXT、H5、BIN 等多种点云格式
- 🐧 官方在 Ubuntu 16.04 / 18.04 / 20.04 上测试通过
编译 MULLS 前,先认识 8 大依赖库
打开项目根目录的 CMakeLists.txt 可以看到,MULLS 的依赖分为「必需」与「可选(默认开启)」两类,合计正好 8 个:
| 依赖库 | 在 MULLS 中的作用 | 类别 |
|---|---|---|
| Eigen3 | 矩阵与线性代数运算基石 | 必需 |
| PCL | 点云滤波、特征提取与可视化 | 必需 |
| Glog | 日志系统 | 必需 |
| Gflags | 命令行参数解析 | 必需 |
| Ceres | 位姿图非线性优化(官方推荐) | 可选·默认开 |
| OpenCV | 二维地图、扫描图、BEV 图像生成 | 可选·默认开 |
| HDF5 | H5 格式点云数据读写 | 可选·默认开 |
| TEASER++ | 全局配准加速(否则退化为 RANSAC) | 可选·默认开 |
此外,编译还需要 Boost、OpenMP 与 CMake 作为基础支撑。下面我们分两步走:先搭基础环境,再逐个安装依赖。
第一步:搭建基础编译环境
无论用哪种安装方式,下面这些工具都是必须的,一条命令全部搞定:
sudo apt-get update sudo apt-get install -y cmake cmake-curses-gui build-essential git wget checkinstall💡
checkinstall是 MULLS 官方安装脚本用来把源码打包成 .deb 再安装的工具,必须安装,否则 install_dep_lib.sh 会在编译源码型依赖(Ceres、TEASER++ 等)时报错。若 apt 里的 CMake 版本低于 3.10,编译 TEASER++ 会失败,建议通过官方 PPA 升级到新版本。
第二步:8 大依赖库逐个安装
1. Eigen3:一切矩阵运算的基石
MULLS 的线性最小二乘解算重度依赖 Eigen,直接安装系统包即可:
sudo apt-get install -y libeigen3-dev pkg-config --modversion eigen3 # 验证版本⚠️ 如果你同时装了 Anaconda,注意 conda 环境里的 Eigen 可能干扰编译,建议编译 MULLS 时切换到系统默认环境。
2. PCL:点云处理的核心库
PCL 是 MULLS 最核心的依赖(版本需 >= 1.7),安装时它的子依赖 Boost、FLANN、VTK 会一并装好:
sudo apt-get install -y libpcl-dev libproj-dev3. Glog:日志库
MULLS 大量使用 Glog 输出运行日志(运行脚本中的-log_dir ./log/test就是 Glog 参数),安装命令:
sudo apt-get install -y libgoogle-glog-dev4. Gflags:命令行参数库
Gflags 负责解析--flagfile=xxx这类运行参数,与 Glog 是"黄金搭档",常一起安装:
sudo apt-get install -y libgflags-dev5. Ceres:位姿图优化首选
Ceres 用于回环检测后的位姿图优化,MULLS 官方明确推荐它(g2o、GTSAM 三选一即可)。先装好它的数学库依赖:
sudo apt-get install -y libatlas-base-dev libsuitesparse-devUbuntu 20.04 可直接sudo apt-get install -y libceres-dev;若版本较老,建议源码编译 2.0.0 版本,编译命令可参考官方脚本 install_dep_lib.sh 中的 ceres 段落。
6. OpenCV:二维地图与 BEV 图像
默认开启的BUILD_WITH_OPENCV选项需要 OpenCV 来生成二维地图和鸟瞰图,一键安装:
sudo apt-get install -y libopencv-dev7. HDF5:H5 点云数据读写
若你打算用 H5 格式的点云数据(pc_format=h5),需要 HDF5 及其 MPI 支持:
sudo apt-get install -y libhdf5-serial-dev libopenmpi-dev openmpi-bin libhdf5-openmpi-dev8. TEASER++:全局配准加速
TEASER++ 用于 MULLS-Registration 的全局配准,必须源码编译且CMake >= 3.10,官方脚本中按以下流程处理:clone 仓库 →mkdir build && cd build→cmake .. -DBUILD_TESTS=OFF→make→ 打包安装并sudo ldconfig。
💡 不想手动折腾?直接在 MULLS 目录下执行
bash script/tools/install_dep_lib.sh,脚本会自动完成上述 8 大依赖(外加 Sophus、LibLAS 等可选库)的安装,全程已验证通过,这是最省心的方式。
MULLS 依赖库安装避坑指南
这部分是无数人踩过的坑,请务必收藏:
- ❌Anaconda 干扰 HDF5 查找:CMakeLists 中特意注释了
find_package(HDF5),就是因为容易误找到 Anaconda 里的错误版本,最终硬编码为/usr/include/hdf5/serial。编译前建议屏蔽 conda 环境。 - ❌CMake 版本过低:TEASER++ 要求 CMake >= 3.10,Ubuntu 16.04 自带的旧版会导致编译失败,需先升级 CMake。
- ❌Eigen 版本过低:TEASER++ 需要较新的 Eigen,官方 Dockerfile 中甚至专门手动安装了 Eigen 3.3.7,遇到模板报错时可参考升级。
- ❌g2o 版本过新:如果选 g2o 而非 Ceres,必须用 2016 年及以前版本,新版 API 不兼容。
- ❌Ceres / g2o / GTSAM 重复安装:三者都用于位姿图优化,装一个即可,重复安装反而可能引发链接冲突。
- ❌修改 CMake 选项后不删 build:切换
BUILD_WITH_*选项后若编译报错,请删除build文件夹重新来过,否则 CMake 缓存会"赖着不走"。
三步完成 MULLS 编译
依赖装齐后,编译其实非常简单,先获取源码:
git clone https://gitcode.com/gh_mirrors/mu/MULLS然后进入项目目录,执行标准的三步编译:
cd MULLS mkdir build cd build cmake .. make -j$(nproc) cd ..编译成功后,可执行文件会输出到bin目录(mulls_slam、mulls_reg、replay_slam以及bin2pcd、txt2pcd等格式转换工具)。若需要调整可选依赖,可在build目录下用ccmake ..可视化勾选BUILD_WITH_*选项后重新编译。
编译成功后如何快速验证
项目自带 16 帧示例点云(位于 demo_data/pcd),无需任何修改即可验证编译成果:
# 验证 SLAM 模块 sh script/run_mulls_slam.sh # 验证点云配准模块 sh script/run_mulls_reg.sh运行后可在实时查看器中观察建图过程,结果(轨迹、地图、评估文件)会输出到demo_data/result目录。想要量化评估精度,可参考 python/kitti_eval.py 配合 python/requirements.txt 中的 evo 工具进行 APE / RPE 评测。MULLS 在 KITTI 上的整体表现可参考项目中的实验结果对比:
结语
编译 MULLS 的难点从来不在编译本身,而在 8 大依赖库的安装顺序与版本选择上。只要按照「基础环境 → Eigen3/PCL → Glog/Gflags → Ceres → OpenCV/HDF5 → TEASER++」的顺序安装,并避开 Anaconda、CMake 版本、build 缓存这几个经典大坑,就能顺利编译出属于自己的 LiDAR SLAM 系统。快动手试试吧!
【免费下载链接】MULLS🤔 MULLS: Versatile LiDAR SLAM via Multi-metric Linear Least Square [ICRA 21]项目地址: https://gitcode.com/gh_mirrors/mu/MULLS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考