在Ubuntu 20.04上部署FAST LIO2之前,需要先搭建好基础环境。我建议使用全新安装的Ubuntu系统,避免因已有环境导致的依赖冲突。实测在联想小新Pro 16(i7-12700H + 32GB内存)上运行流畅,但配置更低的设备也能胜任。
首先更新系统软件包:
bash复制sudo apt update && sudo apt upgrade -y
安装核心编译工具链:
bash复制sudo apt install -y build-essential cmake git wget
ROS Noetic是FAST LIO2推荐的框架,安装时记得选择完整版:
bash复制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-noetic-desktop-full
Livox激光雷达驱动是必备组件,安装时要注意版本匹配:
bash复制git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
我习惯在~/catkin_ws目录下创建工作空间,这个路径方便记忆且不易出错。实际操作中你可以选择任意位置:
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash
接下来部署livox_ros_driver功能包。这里有个小技巧:直接从国内镜像克隆速度更快:
bash复制cd ~/catkin_ws/src
git clone https://gitee.com/maxibooksiyi/livox_ros_driver.git
编译时可能会遇到PCL库版本问题,这是常见坑点。解决方法:
bash复制sudo apt install -y libpcl-dev pcl-tools
cd ~/catkin_ws
catkin_make -j$(nproc)
获取FAST LIO2源码时,建议使用国内镜像源:
bash复制cd ~/catkin_ws/src
git clone https://gitee.com/maxibooksiyi/FAST_LIO.git
ikd-Tree子模块的处理是关键步骤。我遇到过多次下载失败的情况,最终采用的解决方案是:
bash复制cd FAST_LIO
git clone https://gitee.com/maxibooksiyi/ikd-Tree.git
cp -r ikd-Tree/ikd-Tree include/
这里要特别注意:必须确保ikd-Tree文件夹的层级关系正确。错误的目录结构会导致编译时出现"找不到头文件"的错误。正确的目录树应该是:
code复制FAST_LIO/
├── include/
│ └── ikd-Tree/
│ ├── ikd_Tree.h
│ └── ...
└── ...
开始编译前,建议先检查依赖是否完整:
bash复制sudo apt install -y ros-noetic-tf2-sensor-msgs ros-noetic-libg2o
正式编译时使用以下命令:
bash复制cd ~/catkin_ws
catkin_make -j$(nproc)
常见错误及解决方案:
bash复制sudo apt install -y libeigen3-dev
sudo cp -r /usr/include/eigen3/Eigen /usr/local/include/
bash复制pcl-config --version
bash复制cd ~/catkin_ws
catkin_make --force-cmake
启动建图节点:
bash复制roslaunch fast_lio mapping_avia.launch
播放数据集时建议限制CPU占用:
bash复制rosbag play --clock YOUR_DOWNLOADED.bag --rate=0.5
如果遇到RViz卡顿,可以调整点云显示参数:
查看位姿输出:
bash复制rostopic echo /Odometry
对于长期运行场景,建议修改launch文件中的参数:
xml复制<param name="max_iteration" type="int" value="4"/>
<param name="cube_side_length" type="double" value="1000"/>
在真实机器人上部署时,我总结了几点经验:
-j2避免内存溢出cube_side_length设为50米性能监控命令:
bash复制htop # 查看CPU占用
nvidia-smi # 查看GPU使用情况
free -h # 内存监控
遇到难以解决的问题时,可以启用调试模式:
bash复制roslaunch fast_lio mapping_avia.launch output:="screen"
关键日志信息包括:
对于算法层面的调整,建议修改以下文件:
code复制~/catkin_ws/src/FAST_LIO/src/preprocess.cpp
~/catkin_ws/src/FAST_LIO/include/parameters.h
保存轨迹并评估精度:
bash复制rosrun fast_lio save_pose.py
evo_ape tum groundtruth.txt estimated.txt -p
将FAST LIO2与其他ROS节点集成时,注意坐标变换关系。我通常在URDF中添加如下静态变换:
xml复制<node pkg="tf" type="static_transform_publisher" name="base_to_lidar"
args="0 0 0 0 0 0 base_link livox_frame 100"/>
对于多传感器融合场景,建议修改image_projection.cpp文件中的时间同步阈值:
cpp复制#define TIME_DIFF_THRESHOLD 0.003
内存管理方面,定期检查ikd-Tree的内存占用:
cpp复制tree.omp_set_num_threads(2); // 限制线程数
tree.set_balance_criterion(0.7); // 调整平衡阈值