1. 项目概述
在机器人定位与导航领域,激光雷达与IMU的融合算法一直是研究热点。FAST-LIO2作为当前最先进的激光雷达-IMU紧耦合算法之一,凭借其高效的迭代卡尔曼滤波框架,在计算效率和定位精度方面都表现出色。本文将针对RK3588开发板(搭载Ubuntu20.04系统)和Livox MID360激光雷达,详细介绍FAST-LIO2的完整部署流程。
提示:RK3588作为一款高性能ARM处理器,其计算能力足以支持FAST-LIO2的实时运行需求,但需要注意系统依赖和编译优化。
2. 环境准备与依赖安装
2.1 系统基础环境配置
在开始前,请确保RK3588开发板已安装Ubuntu20.04系统,并完成基础配置:
- 更新系统软件包:
bash复制sudo apt update && sudo apt upgrade -y
- 安装必要的开发工具:
bash复制sudo apt install -y git cmake build-essential
- 配置交换空间(可选,内存小于8GB建议配置):
bash复制sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2.2 ROS Noetic安装
FAST-LIO2基于ROS1开发,需要安装ROS Noetic版本:
- 设置ROS仓库:
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
- 安装ROS基础包:
bash复制sudo apt update
sudo apt install -y ros-noetic-desktop-full
- 初始化rosdep:
bash复制sudo rosdep init
rosdep update
- 设置环境变量:
bash复制echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 安装ROS构建工具:
bash复制sudo apt install -y python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
3. 创建工作空间与依赖安装
3.1 创建ROS工作空间
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash
3.2 安装Livox-SDK2
Livox MID360需要Livox-SDK2支持:
- 克隆SDK源码:
bash复制cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/Livox-SDK2.git
- 编译安装:
bash复制cd Livox-SDK2
mkdir build && cd build
cmake .. && make -j$(nproc)
sudo make install
- 验证安装:
bash复制ls /usr/local/include/livox_sdk2.h
4. 源码下载与适配
4.1 下载livox_ros_driver2
bash复制cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver2.git
cd livox_ros_driver2
./build.sh ROS1
4.2 下载FAST-LIO2源码
bash复制cd ~/catkin_ws/src
git clone https://github.com/hku-mars/FAST_LIO.git
cd FAST_LIO
git submodule update --init
4.3 代码适配修改
需要修改4处关键位置以适配livox_ros_driver2:
- 修改CMakeLists.txt:
cmake复制# 修改前
find_package(catkin REQUIRED COMPONENTS
...
livox_ros_driver
...
)
# 修改后
find_package(catkin REQUIRED COMPONENTS
...
livox_ros_driver2
...
)
- 修改package.xml:
xml复制<!-- 修改前 -->
<build_depend>livox_ros_driver</build_depend>
<run_depend>livox_ros_driver</run_depend>
<!-- 修改后 -->
<build_depend>livox_ros_driver2</build_depend>
<run_depend>livox_ros_driver2</run_depend>
- 修改头文件引用:
cpp复制// 修改前
#include <livox_ros_driver/CustomMsg.h>
// 修改后
#include <livox_ros_driver2/CustomMsg.h>
- 修改命名空间:
cpp复制// 修改前
livox_ros_driver::
// 修改后
livox_ros_driver2::
5. 编译与问题排查
5.1 编译顺序优化
bash复制# 临时移出FAST_LIO
mv ~/catkin_ws/src/FAST_LIO ~/
# 单独编译livox_ros_driver2
cd ~/catkin_ws
catkin_make -DCATKIN_WHITELIST_PACKAGES="livox_ros_driver2"
# 移回FAST_LIO
mv ~/FAST_LIO ~/catkin_ws/src/
# 完整编译
catkin_make
5.2 常见编译问题
- 找不到PCL库:
bash复制sudo apt install -y libpcl-dev
- Eigen3版本冲突:
bash复制sudo apt install -y libeigen3-dev
- 缺少yaml-cpp:
bash复制sudo apt install -y libyaml-cpp-dev
6. 硬件配置与网络设置
6.1 Livox MID360网络配置
- 设置静态IP:
bash复制sudo nmcli con mod "有线连接" ipv4.addresses 192.168.1.5/24
sudo nmcli con mod "有线连接" ipv4.gateway 192.168.1.254
sudo nmcli con mod "有线连接" ipv4.method manual
sudo nmcli con up "有线连接"
- 配置MID360参数文件:
json复制{
"lidar_config": {
"ip": "192.168.1.185",
"pcl_data_type": 1,
"pattern_mode": 0,
"extrinsic_parameter": {
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0,
"x": 0.0,
"y": 0.0,
"z": 0.0
}
},
"host_net_info": {
"cmd_data_ip": "192.168.1.5",
"cmd_data_port": 56101,
"push_msg_ip": "192.168.1.5",
"push_msg_port": 56201,
"point_data_ip": "192.168.1.5",
"point_data_port": 56301,
"imu_data_ip": "192.168.1.5",
"imu_data_port": 56401
}
}
7. 运行与测试
7.1 启动激光雷达驱动
bash复制roslaunch livox_ros_driver2 msg_MID360.launch
7.2 启动FAST-LIO2
bash复制roslaunch fast_lio mapping_mid360.launch
7.3 RVIZ可视化配置
- 添加PointCloud2显示
- 设置Topic为/cloud_registered
- 添加TF显示
8. 性能优化与调试
8.1 RK3588性能调优
- 启用CPU性能模式:
bash复制sudo apt install -y cpufrequtils
sudo cpufreq-set -g performance
- 调整ROS参数:
xml复制<param name="mapping/process_rate" value="10.0"/>
<param name="mapping/max_iteration" value="3"/>
8.2 常见问题排查
- 无点云显示:
- 检查网络连接
- 验证激光雷达供电
- 确认IP配置正确
- 定位漂移:
- 检查IMU数据质量
- 调整噪声参数
- 验证时间同步
9. 实际应用建议
- 对于室内场景,建议降低点云密度:
bash复制rosrun topic_tools throttle messages /livox/lidar 10.0
- 长期运行时,启用日志记录:
bash复制rosbag record -O fastlio.bag /cloud_registered /odometry
- 多传感器融合时,注意时间同步:
bash复制sudo apt install -y chrony
sudo service chrony restart
10. 扩展功能
10.1 地图保存与加载
bash复制# 保存地图
rosservice call /save_map "resolution: 0.05
destination: '/home/ubuntu/map.pcd'"
# 加载地图
roslaunch fast_lio mapping_mid360.launch map_path:=/home/ubuntu/map.pcd
10.2 与其他ROS节点集成
python复制#!/usr/bin/env python
import rospy
from nav_msgs.msg import Odometry
def odom_callback(data):
# 处理定位数据
pass
rospy.init_node('fastlio_processor')
rospy.Subscriber("/odometry", Odometry, odom_callback)
rospy.spin()
11. 系统监控与维护
11.1 资源监控
bash复制# CPU使用率
top -b -n 1 | grep fastlio
# 内存使用
free -h
# 网络延迟
ping 192.168.1.185
11.2 自动启动脚本
创建启动脚本start_fastlio.sh:
bash复制#!/bin/bash
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash
roslaunch livox_ros_driver2 msg_MID360.launch &
sleep 5
roslaunch fast_lio mapping_mid360.launch
12. 进阶配置
12.1 参数调优指南
- 调整滤波参数:
xml复制<param name="mapping/point_filter_num" value="2"/>
<param name="mapping/filter_size_surf" value="0.5"/>
- IMU噪声参数:
xml复制<param name="mapping/gyr_cov" value="0.1"/>
<param name="mapping/acc_cov" value="0.1"/>
12.2 多雷达配置
修改MID360_config.json:
json复制{
"lidar_config": [
{
"ip": "192.168.1.185",
"pcl_data_type": 1
},
{
"ip": "192.168.1.186",
"pcl_data_type": 1
}
]
}
13. 开发建议
- 代码结构分析:
laserMapping.cpp:主算法实现preprocess.cpp:点云预处理ikd-Tree:高效点云数据结构
- 调试技巧:
bash复制# 查看TF树
rosrun rqt_tf_tree rqt_tf_tree
# 可视化点云
rosrun rviz rviz -d $(rospack find fast_lio)/rviz_cfg/loam_livox.rviz
14. 性能评估
- 实时性测试:
bash复制rostopic hz /odometry
- 精度评估:
- 使用地面真值系统对比
- 计算ATE(绝对轨迹误差)
- 分析回环检测效果
15. 系统集成案例
15.1 与SLAM系统集成
python复制from geometry_msgs.msg import PoseStamped
def publish_pose():
pub = rospy.Publisher('/slam_pose', PoseStamped, queue_size=10)
pose = PoseStamped()
pose.header.stamp = rospy.Time.now()
pose.pose.position.x = 1.0
pub.publish(pose)
15.2 与导航栈集成
xml复制<node pkg="move_base" type="move_base" name="move_base">
<remap from="odom" to="/odometry"/>
</node>
16. 维护与更新
- 定期更新代码:
bash复制cd ~/catkin_ws/src/FAST_LIO
git pull origin master
git submodule update
- 备份配置文件:
bash复制tar -czvf fastlio_config.tar.gz ~/catkin_ws/src/FAST_LIO/config/
17. 社区资源
- 官方文档:
- FAST-LIO2: https://github.com/hku-mars/FAST_LIO
- Livox-SDK2: https://github.com/Livox-SDK/Livox-SDK2
- 论坛支持:
- ROS Answers
- GitHub Issues
18. 硬件选型建议
- 推荐IMU型号:
- BMI088
- ICM-42688
- ADIS16470
- 计算平台选择:
- NVIDIA Jetson系列
- Intel NUC
- 定制工控机
19. 实际部署经验
- 安装注意事项:
- 确保IMU与激光雷达刚性连接
- 避免振动导致的误差
- 注意散热问题
- 校准技巧:
- 使用开源工具进行标定
- 采集静态数据校准零偏
- 多位置采集提高精度
20. 未来扩展方向
- 算法改进:
- 引入深度学习前端
- 优化回环检测
- 多传感器融合
- 应用场景:
- 自动驾驶
- 无人机导航
- AR/VR定位
在实际部署过程中,我发现RK3588的性能完全能够满足FAST-LIO2的实时性要求,但需要注意散热问题。建议在长期运行时添加散热风扇,并定期检查系统温度。对于Livox MID360,其独特的非重复扫描模式在室内环境中表现优异,但在强光环境下需要注意点云质量。