3天跑通FAST-LIO:激光雷达惯性里程计在无人机建图与自主导航中的完整复盘
【免费下载链接】FAST_LIOA computationally efficient and robust LiDAR-inertial odometry (LIO) package项目地址: https://gitcode.com/gh_mirrors/fa/FAST_LIO
FAST-LIO 是一套计算高效、鲁棒的激光雷达惯性里程计(LIO)开源方案,融合雷达点云与 IMU 数据,让无人机实时输出位姿并构建三维地图。这篇复盘来自我三天从零跑通它的真实经历,涵盖安装配置、rosbag 验证、真机建图与导航衔接,新手可以直接照着走。
为什么我会盯上这套方案
先交代背景。我上一台无人机用的是纯视觉里程计,地下车库光线一暗就开始漂;换成纯激光配准,机身动作稍微剧烈一点轨迹就散架。FAST-LIO 的做法是用紧耦合的迭代扩展卡尔曼滤波,把 IMU 的高频测量和激光雷达特征点绑在一起互相修正,所以在快速运动、弱纹理、动态干扰这类"退化"场景里依然稳得住。也正因如此,它成了很多无人机建图与自主导航项目的首选前端 🚁。
动手前先清点:硬件与软件两张清单
硬件参考项目文档里那架小四旋翼就够用,我的配置是:
- 280mm 轴距机架,作为稳定飞行平台
- 内置 IMU 的 3D 激光雷达,我用的是 Livox Avia,70° 视场
- 机载计算机,i7-8550U 加 8GB 内存这个级别即可
- 电池与数传模块,负责续航和远程控制
软件侧门槛也不高:Ubuntu 18.04/20.04、ROS Melodic/Noetic、PCL 与 Eigen 是底线。另外一定记得装 livox_ros_driver,并且在编译和运行前都先 source 它,否则 launch 起来会找不到驱动。
第1天:装代码,三行命令见分晓
克隆项目、初始化子模块(ikd-Tree 依赖就是这么拉下来的)、编译,一气呵成:
git clone https://gitcode.com/gh_mirrors/fa/FAST_LIO git submodule update --init catkin_make source devel/setup.bash编译成功后会出现一个名为fastlio_mapping的节点,算法本体就在src/laserMapping.cpp里。不过真正让新手卡住的通常不是编译,而是后面一串细枝末节。
第1天晚:没有雷达,照样先把算法验证一遍
我的建议是别一上来就上真机。先下载一份官方 rosbag(Avia 采集的室内数据),用两个命令验证算法闭环:
roslaunch fast_lio mapping_avia.launch rosbag play 你的数据.bagrviz 里会实时出现彩色点云和一条蓝色轨迹。看到屏幕上的地图从无到有、轨迹稳稳贴合环境,你心里就有底了 ✅。这一步如果能跑通,说明环境、依赖、时间戳处理全都没问题。
第2天:读懂 avia.yaml,把关键参数讲透
config/avia.yaml是整个系统的"性格参数",我按踩坑顺序说:
lid_topic/imu_topic:雷达点云和 IMU 的话题名,换传感器时最先改这里lidar_type:1 代表 Livox 系列,2 是 Velodyne,3 是 Ouster,别选错extrinsic_T/extrinsic_R:IMU 与雷达的外参。注意 FAST-LIO 里定义的是"雷达在 IMU 坐标系下的位姿",方向搞反,地图立刻糊成重影time_sync_en:软件时间同步开关,只有在无法做硬件时间同步时才建议打开
launch 文件里还有两个高频参数:point_filter_num控制点云降采样间隔,数值越大越省算力;filter_size_map决定地图体素分辨率,从 0.5 起步比较稳妥。
第2天下午:把 FAST-LIO 装进无人机
真机部署和回放数据完全不是一回事。外参先通过 LI-Init 之类工具标定,或直接沿用官方标定值;上电后先确认雷达与 IMU 的时间戳对齐,再依次启动建图节点和雷达驱动:
roslaunch fast_lio mapping_avia.launch roslaunch livox_ros_driver livox_lidar_msg.launch这里有个我踩过的坑:Livox 驱动其实有两个 launch 文件,FAST-LIO 只认livox_lidar_msg.launch输出的 CustomMsg,因为它带有逐点时间戳,是运动畸变去除的关键。
第3天:从地图到导航,最后一步怎么接
建图只是前半段。FAST-LIO 会发布/Odometry和/path两个话题,位姿数据可以直接喂给路径规划器。我在一张测试地图上跑了闭环,无人机会沿规划好的方形路径自主移动,意味着"在线建图 + 自主导航"这条链路已经打通 🧭。
想离线保存地图也很省事:把config里的pcd_save_en设为 true,程序退出后所有全局点云会自动汇总到FAST_LIO/PCD/scans.pcd,用pcl_viewer scans.pcd就能慢慢端详。
三天里踩过的坑:给后来者的排错清单
- 日志里出现 "Failed to find match for field 'time'",说明点云数据丢了逐点时间戳,前向/后向传播都会受影响,先查数据来源,别急着调参数
- 地图分层、重影、漂移,优先怀疑外参和时间同步,而不是滤波噪声参数
- 担心嵌入式板子跑不动?FAST-LIO 对 ARM 平台做过针对性优化,点云率能到 100Hz 以上
extrinsic_est_en是外参在线估计开关,外参已知时建议关掉,避免两个来源互相打架
性能复盘:它凭什么配得上"实时"两个字
项目文档里有张真机实验图,Intel i7 下单帧平均处理时间约 1.82ms,ARM 平台约 5.23ms,而扫描速率是 100Hz,算力冗余很充足 💡。这也是它能同时扛住建图、导航、巡检等实时任务的原因。
我把同样的流程拿到户外植被环境跑了一遍,点云稠密、结构清晰,场景适应性比想象中好。
跑通之后,还能往哪走
如果你也跑通了上面这套流程,后面其实有很丰富的路:
- 需要重定位,可以看 FAST-LIO-LOCALIZATION,它把重定位模块接在 LIO 输出之后
- 想要视觉加持,FAST-LIVO 系列做了雷达-惯性-视觉三传感器融合
- 想做规划控制,项目仓库里有无人机动态避障和轨迹规划的落地示例
我的建议是别急着堆功能。先把 rosbag 回放、真机建图、PCD 保存这三件事各完整跑一遍,你就已经算"会用"FAST-LIO 了,剩下的都是在它之上叠加自己的想法。今晚不妨就从下载一个 rosbag 开始。
【免费下载链接】FAST_LIOA computationally efficient and robust LiDAR-inertial odometry (LIO) package项目地址: https://gitcode.com/gh_mirrors/fa/FAST_LIO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考