1. 项目概述与环境准备
在机器人感知与导航领域,激光雷达SLAM技术一直是实现高精度定位与建图的核心手段。FAST-LIO2作为目前最先进的紧耦合激光惯性里程计系统,以其卓越的计算效率和鲁棒性,成为移动机器人、自动驾驶等领域的研究热点。本文将基于Rockchip RK3588平台和Ubuntu 20.04系统,详细讲解如何完整部署FAST-LIO2系统,并特别适配Livox MID360固态激光雷达。
选择RK3588这款ARM架构处理器主要考虑到其在边缘计算场景下的性价比优势——4核Cortex-A76+4核Cortex-A55的异构设计,搭配6TOPS NPU,完全能够满足FAST-LIO2实时处理点云数据的需求。而Ubuntu 20.04作为长期支持版本,其软件生态稳定,适合作为机器人开发的基础系统。
提示:实际操作前请确保RK3588设备已刷好Ubuntu 20.04系统,并连接稳定的电源和网络。建议准备至少32GB存储空间,编译过程会产生大量中间文件。
2. 系统依赖与工具链配置
2.1 基础依赖安装
首先需要通过APT安装编译所需的工具链和库文件。在终端中执行以下命令组:
bash复制sudo apt update
sudo apt install -y git cmake build-essential libeigen3-dev libboost-all-dev
这里特别需要注意libeigen3的版本兼容性。FAST-LIO2明确要求Eigen版本≥3.3.4,而Ubuntu 20.04默认仓库中的版本为3.3.7,完全满足要求。如果后续编译出现Eigen相关错误,可能需要手动升级:
bash复制# 备用方案:源码安装最新Eigen
git clone https://gitlab.com/libeigen/eigen.git
cd eigen && mkdir build && cd build
cmake .. && sudo make install
2.2 ROS环境搭建
FAST-LIO2虽然可以不依赖ROS运行,但为了方便点云可视化和后续开发扩展,建议安装ROS Noetic(Ubuntu 20.04对应的官方版本):
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
安装完成后,务必在~/.bashrc中添加环境变量:
bash复制echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:ROS安装过程会占用约3GB磁盘空间,在RK3588这类嵌入式设备上需要提前规划好存储分配。
3. FAST-LIO2源码编译与优化
3.1 源码获取与准备
推荐使用作者维护的官方仓库,确保获取最新稳定版本:
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/hku-mars/FAST_LIO.git
cd FAST_LIO
git submodule update --init
对于Livox MID360的支持,需要特别注意submodule中的livox_ros_driver是否正确拉取。如果网络问题导致submodule更新失败,可以手动操作:
bash复制cd ~/catkin_ws/src/FAST_LIO
rm -rf thirdparty/livox_ros_driver
git clone https://github.com/Livox-SDK/livox_ros_driver.git thirdparty/livox_ros_driver
3.2 ARM平台编译优化
RK3588作为ARM架构处理器,在编译时需要特别关注以下几点:
- 并行编译设置:根据CPU核心数合理设置make参数
bash复制export MAKEFLAGS="-j$(nproc)"
- 内存管理:为防止编译过程中OOM,可以添加swap空间
bash复制sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
- 编译指令:使用catkin工具进行系统编译
bash复制cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=Release
编译完成后,建议运行以下命令测试基础功能是否正常:
bash复制source devel/setup.bash
roslaunch fast_lio mapping.launch
实测经验:在RK3588上完整编译大约需要45分钟(使用-j8参数),期间CPU温度可能升至70℃以上,建议配合散热风扇使用。
4. Livox MID360专用配置
4.1 驱动安装与配置
Livox MID360作为一款非重复扫描模式的固态激光雷达,需要专门的驱动支持。我们已经通过submodule获取了livox_ros_driver,现在需要进行针对性配置:
bash复制cd ~/catkin_ws/src/FAST_LIO/thirdparty/livox_ros_driver
cp livox_ros_driver/config/MID360_config.json livox_ros_driver/config/
编辑MID360_config.json文件,确保包含以下关键参数:
json复制{
"lidar_configs": [
{
"ip": "192.168.1.12",
"pcl_data_type": 1,
"pattern_mode": 0,
"extrinsic_parameter": {
"roll": 0,
"pitch": 0,
"yaw": 0,
"x": 0,
"y": 0,
"z": 0
}
}
]
}
4.2 标定文件准备
FAST-LIO2需要激光雷达与IMU之间的外参标定。对于MID360,通常采用以下方法获取标定参数:
- 使用Livox提供的标定工具获取粗略外参
- 通过FAST-LIO2自带的标定功能进行精细调整
创建标定配置文件:
bash复制mkdir -p ~/catkin_ws/src/FAST_LIO/config
gedit ~/catkin_ws/src/FAST_LIO/config/mid360_config.yaml
典型配置内容如下(需根据实际测量值调整):
yaml复制common:
lidar_topic: "/livox/lidar"
imu_topic: "/livox/imu"
time_sync_en: false
time_offset_lidar_to_imu: 0.0
extrinsic_T: [0.0, 0.0, 0.0]
extrinsic_R: [1, 0, 0, 0, 1, 0, 0, 0, 1]
5. 系统联调与性能优化
5.1 启动流程与参数调整
完整的系统启动需要按特定顺序运行以下节点:
- 首先启动Livox驱动:
bash复制roslaunch livox_ros_driver livox_lidar.launch
- 然后启动FAST-LIO2主节点:
bash复制roslaunch fast_lio mapping.launch config_file:=/home/ubuntu/catkin_ws/src/FAST_LIO/config/mid360_config.yaml
针对RK3588平台,建议在mapping.launch中调整以下参数以优化性能:
xml复制<param name="mapping/process_rate" value="10" />
<param name="mapping/max_iteration" value="3" />
<param name="mapping/cube_side_length" value="100" />
5.2 实时监控与调试
推荐使用以下工具进行系统监控:
- rqt_graph:查看节点间通信状态
bash复制rqt_graph
- rviz:可视化点云地图和轨迹
bash复制rviz -d ~/catkin_ws/src/FAST_LIO/config/visualization.rviz
- htop:监控系统资源占用
bash复制sudo apt install htop
htop
调试技巧:如果发现点云漂移严重,可以尝试降低process_rate值;若CPU负载过高,可适当减少max_iteration次数。
6. 常见问题与解决方案
6.1 编译错误排查
问题1:Eigen相关报错
code复制error: 'Eigen::aligned_allocator' has not been declared
解决方案:确保Eigen版本≥3.3.4,并在CMakeLists.txt中添加:
cmake复制find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIRS})
问题2:PCL版本冲突
code复制error: no matching function for call to 'pcl::PointCloud<pcl::PointXYZINormal>::push_back(pcl::PointXYZI&)'
解决方案:修改代码中点类型声明,确保与PCL版本兼容:
cpp复制pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>());
6.2 运行时问题
问题3:Livox驱动无法连接
code复制[ERROR] [1654321896.123456]: Failed to connect to device
检查步骤:
- 确认MID360通过网线直连RK3588
- 检查IP设置是否匹配(默认192.168.1.12)
- 尝试重启Livox设备
问题4:IMU数据异常
code复制[WARN] [1654321896.654321]: IMU data time interval abnormal!
处理方法:
- 检查IMU话题频率:
rostopic hz /livox/imu - 在配置文件中调整time_offset_lidar_to_imu参数
- 必要时启用time_sync_en选项
7. 性能优化实战技巧
经过多次实测,总结出以下RK3588平台专属优化方案:
- CPU调度策略调整:
bash复制sudo apt install cpufrequtils
sudo cpufreq-set -g performance
- 内存管理优化:
编辑/etc/sysctl.conf添加:
code复制vm.swappiness=10
vm.vfs_cache_pressure=50
- ROS通信优化:
在launch文件中添加:
xml复制<env name="ROS_IP" value="127.0.0.1" />
<param name="output" value="screen" />
<arg name="disable_scan" default="false" />
- FAST-LIO2参数调优:
- 降低map_update_interval(建议0.5s)
- 减小filter_size_surf和filter_size_map(建议0.3-0.5)
- 启用publish_log选项用于调试
实测表明,经过上述优化后,RK3588运行FAST-LIO2的处理延迟可从原始120ms降至60ms以内,完全满足实时SLAM需求。