因为之前已经运行过LIO-SAM了,所以工作空间什么的已经创建了,直接拉源码 + 编译 。
编译
cd ~/catkin_ws/src
# 克隆 FAST-LIO(包含 FAST-LIO2 分支/代码)
git clone https://github.com/hku-mars/FAST_LIO.git
cd FAST_LIO
git submodule update –init –recursive
cd ../..
# 安装可能缺的依赖(可跳过,如果你确认都有)
sudo apt install libeigen3-dev libpcl-dev libyaml-cpp-dev libgoogle-glog-dev
# 编译
catkin_make -DCMAKE_BUILD_TYPE=Release
source devel/setup.bash
解释:
1. git submodule update –init –recursive
-
作用:下载主仓库里引用的子仓库(submodule)。
-
FAST-LIO2 用到的 ikd-Tree 和一些第三方库就是作为 submodule 存在的,如果不更新,编译会报错找不到这些源码。
-
参数解释:
-
–init:如果是第一次拉子模块,把它们初始化。
-
–recursive:如果子模块里还有子模块(嵌套),也一并拉下来。
-
update:把子模块更新到主仓库当前版本指定的 commit。
-
-
为什么必须做: FAST-LIO2 源码里并不直接包含 ikd-Tree 全部代码,只是一个“链接”指向另一个仓库,必须用这条命令拉取。
等价过程可以用:
git submodule init git submodule update –recursive
只是这里写成一行方便。
2. cd ../..
-
作用:切换回catkin 工作区根目录。
-
逻辑是这样的:
-
现在在 ~/catkin_ws/src/FAST_LIO 里(刚 clone 完)。
-
编译要在工作区根目录(~/catkin_ws)执行 catkin_make。
-
cd .. 从 FAST_LIO 回到 src。 再 cd .. 从 src 回到 catkin_ws。
-
所以 cd ../.. 就是一次性回到 catkin_ws 目录。
总结:
git submodule update –init –recursive → 把 FAST-LIO2 的依赖源码都拉下来。
cd ../.. → 回到 catkin 工作区根目录,方便后面 catkin_make 编译。
报错:
1、缺pcl_ros 包

CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "pcl_ros"
是因为 ROS 缺少 pcl_ros 这个包。 这个包是 ROS 中用于将 PCL(Point Cloud Library)集成到 ROS 系统的中间层,不是 PCL 本体,而是 pcl_ros 这个 ROS package。
解决方法:
只需要安装对应的 ROS Noetic 版本下的 pcl_ros 即可:
sudo apt update
sudo apt install ros-noetic-pcl-ros
注意事项
如果你之前手动编译过 PCL 并放在 /usr/local 下,建议不要混用 apt 安装的 ROS 包和手动编译的 PCL,否则可能会出现 runtime 链接冲突。
2、缺Livox ROS 驱动包

CMake Error: Could NOT find livox_ros_driver
这是因为没有安装 Livox ROS 驱动包(livox_ros_driver),它是 Livox 激光雷达在 ROS 中的官方驱动,不是 apt 直接提供的,需要手动 clone 并编译。
解决方法:
1. 创建工作空间(如果你还没建)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
2. 下载 livox_ros_driver 源码
git clone https://github.com/Livox-SDK/livox_ros_driver.git
注意:这个仓库依赖 Livox-SDK 的 C++ 驱动,但 livox_ros_driver 里已经包含了预编译好的库,一般不需要单独安装 SDK。
3. 编译
cd ~/catkin_ws
catkin_make
3、找不到静态库文件

/usr/bin/ld: 找不到 -llivox_sdk_static
说明 链接器找不到 Livox SDK 的静态库文件 liblivox_sdk_static.a。 虽然 livox_ros_driver 仓库里自带了预编译好的库,但可能因为系统架构或编译器版本差异,导致找不到。————>正确安装 Livox SDK 并重新编译 livox_ros_driver
git下来自带了一个build文件夹:
-
Livox-SDK 仓库里直接带了 build 文件夹,里面有 notes.txt 说明这是他们“故意提交”的预置构建目录。
-
这种做法很少见,但他们可能为了方便快速入门,就把 build 文件夹放在 repo 里了。
这样带 build 文件夹的影响
-
不需要自己新建 build 文件夹,直接在已有 build 目录里运行 cmake 和 make 即可。
-
但是这个 build 目录可能已经有之前的缓存或配置,如果你之前操作过,GPT建议先清空这个目录再重新构建,以免冲突。
解决方法:
cd ~/catkin_ws/src/Livox-SDK
rm -rf build/*
// 也可以直接就在它自带的build里面编译
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
// 这一步会把静态库和头文件安装到 /usr/local/lib 和 /usr/local/include
配置环境变量,建议把这一行加到 ~/.bashrc 里,保持永久生效:
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
回到工作空间重新编译 livox_ros_driver 和 FAST-LIO2
cd ~/catkin_ws
catkin_make clean
catkin_make -j$(nproc)
source devel/setup.bash
4. 设置环境变量(每次开终端都需要,或写入 .bashrc)
source ~/catkin_ws/devel/setup.bash
验证是否成功
可以用以下命令确认:
rospack find livox_ros_driver
如果返回路径,说明安装成功。
4、rospack 找不到包

编译的是 ~/catkin_ws/src/livox_SDK(注意是 livox_SDK,而不是 livox_ros_driver),这就是为什么 rospack 找不到包的根本原因。
关键点解析
-
ROS 包名和目录名必须严格对应,大小写敏感。
-
官方 ROS 驱动包名字是 livox_ros_driver,目录也应叫 livox_ros_driver。
-
你现在的目录是 livox_SDK,这是 Livox 官方的 SDK(C++开发包),它不是 ROS 包,不包含 package.xml,所以 ROS 不识别,也不能用 rospack 找到。
解决方案
1. 下载并编译真正的 Livox ROS 驱动包
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
2. 编译工作空间
cd ~/catkin_ws
catkin_make -j$(nproc)
source devel/setup.bash
3. 确认 ROS 找到包
rospack find livox_ros_driver
这时就会找到正确的 ROS 驱动包。

额外说明
-
livox_SDK 是纯 SDK,不是 ROS 包,不能单独用 rospack 管理。
-
livox_ros_driver 是基于 SDK 封装的 ROS 驱动,才会被 ROS 管理。
总结
-
请确保在 src 下有 livox_ros_driver 包,而不是 livox_SDK。
-
两者配合使用:先编译并安装 SDK(livox_SDK),再编译 ROS 驱动(livox_ros_driver)。
-
ROS 命令如 rospack find 只能识别有 package.xml 的包(即真正的 ROS 包)。
运行公共数据集
数据集:https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP
roslaunch fast_lio mapping_avia.launch
rosbag play YOUR_DOWNLOADED.bag
rosbag play ~/catkin_ws/datasets/outdoor_Mainbuilding_100Hz_2020-12-24-16-46-29.bag


保存PCD文件
如何开启 PCD 保存功能?
需要在 launch 文件或者参数文件(avia.yaml)中添加或修改如下参数:
<param name="pcd_save_enable" type="bool" value="true" />
<param name="pcd_save_path" type="string" value="$(find fast_lio)/PCD/scans.pcd" />
修改版本示例
<launch>
<!– Launch file for Livox AVIA LiDAR –>
<arg name="rviz" default="true" />
<rosparam command="load" file="$(find fast_lio)/config/avia.yaml" />
<param name="feature_extract_enable" type="bool" value="0"/>
<param name="point_filter_num" type="int" value="3"/>
<param name="max_iteration" type="int" value="3" />
<param name="filter_size_surf" type="double" value="0.5" />
<param name="filter_size_map" type="double" value="0.5" />
<param name="cube_side_length" type="double" value="1000" />
<param name="runtime_pos_log_enable" type="bool" value="0" />
<!– 添加点云保存开启参数 –>
<param name="pcd_save_enable" type="bool" value="true" />
<param name="pcd_save_path" type="string" value="$(find fast_lio)/PCD/scans.pcd" />
<node pkg="fast_lio" type="fastlio_mapping" name="laserMapping" output="screen" />
<group if="$(arg rviz)">
<node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find fast_lio)/rviz_cfg/loam_livox.rviz" />
</group>
</launch>
使用说明
-
设置 pcd_save_enable 为 true,运行结束时程序会自动保存累积的点云到指定的 pcd_save_path 文件。
-
路径 $(find fast_lio)/PCD/scans.pcd 会在你的 fast_lio 包路径下生成 PCD 文件夹并保存文件;也可以改成绝对路径。
如何查看这个 .pcd 文件
使用 pcl_viewer
pcl_viewer 是 PCL(Point Cloud Library)自带的点云文件查看工具,支持多种查看和点云颜色显示模式。
可以用下面命令打开:
pcl_viewer scans.pcd


pcl_viewer 的快捷键颜色切换说明
运行时,按键盘数字键可以切换点云的颜色显示方式:
| 1 | 所有点随机颜色(彩色点云,方便区分) |
| 2 | 按 X 坐标值着色(红绿蓝渐变) |
| 3 | 按 Y 坐标值着色 |
| 4 | 按 Z 坐标值着色 |
| 5 | 按点云强度值着色(Intensity) |
这样可以更直观地分析点云分布和特征。
备份
代码层面备份
方式 1:Git 版本控制(推荐)
适合后续对比改动、分支管理。
# 进入你的 FAST-LIO2 目录
cd ~/catkin_ws/src/FAST_LIO
# 如果还没初始化 git 仓库
git init
git add .
git commit -m "FAST-LIO2 原版初始提交"
# 建一个实验分支做改动
git checkout -b intensity_multi_echo_dev
这样:
-
master 分支永远保留原版
-
在 intensity_multi_echo_dev 分支上做你的实验
-
如果改坏了,切回 master 再新建分支就能重新开始:
git checkout master git checkout -b new_experiment
方式 2:直接目录拷贝(最简单)
适合不熟悉 Git 的情况。
# 在代码上一级目录
cp -r FAST_LIO FAST_LIO_original
-
FAST-LIO2_original 就是原版,不要动
-
在 FAST-LIO2 里面改代码
-
出问题直接删掉 FAST-LIO2,再拷贝一份 FAST-LIO2_original
如果想完全隔离编译环境
虽然已经有 FAST_LIO_original,但这两个版本还是在同一个工作空间,编译时会同时出现。 要想编译时互不干扰,可以新建一个工作空间专门放原版:
mkdir -p ~/catkin_ws_fastlio/src
cp -r ~/catkin_ws/src/FAST_LIO_original ~/catkin_ws_fastlio/src/FAST_LIO
cd ~/catkin_ws_fastlio
catkin_make
之后:
-
原版运行:
source ~/catkin_ws_fastlio/devel/setup.bash
roslaunch fast_lio mapping.launch -
修改版运行:
source ~/catkin_ws/devel/setup.bash
roslaunch fast_lio_mod mapping.launch


