本文面向使用 Velodyne 等多线雷达的在线建图与定位(SLAM/Localization)场景,介绍 Lightning-LM 的主要功能与优势,并给出在 ROS1 下的快速使用方法与关键参数说明。文末注明原始项目与作者信息,本仓库在其基础上完成了 ROS1 改造与适配。
推荐读者先跑通默认配置,再结合数据集/传感器逐步微调参数。

1. 方法概览
Lightning-LM 采用"激光-惯性紧耦合前端 + 回环检测 + 位姿图优化"的经典框架,既可在线建图,也可在已有地图上进行定位:
- 前端里程计(fasterlio):基于 Fast-LIO 思想,利用 iVox/体素索引与点到面约束,实时性高、漂移低。
- 地图维护:在线构建局部/全局地图,支持滤波与 ROI 约束。
- 回环检测与图优化(loop + PGO):检测几何一致性候选回环,通过 NDT 等策略验证并触发全局位姿图优化,消除累计误差。
- 定位模式(Localization):加载已有地图,结合里程计/粗搜/特征匹配实现快速收敛与稳健定位。
- 可视化与工具:发布 TF,提供 UI/2.5D 地面估计(g2p5)与相关调试开关,便于工程集成。
支持 Livox、Velodyne、Ouster 等主流雷达,参数组织清晰,侧重"快速上手 + 实用工程"。
2. 主要功能与优势
- 激光-惯性前端(fasterlio)
- 传感器类型一键切换:1-Livox,2-Velodyne,3-Ouster
- 支持设置扫线数、盲区、体素/邻域参数、外参固定/估计
- 回环与图优化(loop_closing + pgo)
- 可配置回环触发间隔、搜索范围、NDT 得分阈值
- 图优化支持多类噪声设置与收敛阈值控制
- 定位(lidar_loc)
- 强度/高度/2D 等多种过滤策略
- 支持栅格角度粗搜、快启策略与置信度门限
- 地图与动态云(maps)
- 动态云加载/保存策略、分块大小、装载/卸载窗口
- ROI + 可视化(roi/ui/system)
- 有效高度/距离裁剪,车辆模型尺度可视,TF 发布
优势摘要:
- 实时性与稳定性兼顾,长航程低漂移
- 适配常见多线雷达与 IMU,工程集成友好
- "在线建图 + 仅定位"双模式一体化
3. 工程目录与关键文件
- 配置:
config/velodyne_online.yaml - 启动:
- SLAM(在线建图):
launch/run_slam_velodyne_online.launch - 定位(已有地图上):
launch/run_loc_velodyne_online.launch
- SLAM(在线建图):
- 说明文档目录:
doc/
若需要替换传感器话题/线数/外参等,请优先在
velodyne_online.yaml中调整。
4. 快速使用(Velodyne 在线)
前置条件:
- ROS1(如 Melodic/Noetic)与常用依赖(PCL、Eigen 等)
- 雷达点云与 IMU 正常发布且时间同步合理
常见话题(示例,按实际数据修改):
- 点云:
/velodyne_points(类型:sensor_msgs/PointCloud2) - IMU:
/imu/data
启动示例 1:直接使用 roslaunch
bash
# 在线建图(SLAM)
roslaunch lightning run_slam_velodyne_online.launch
# 仅定位(Localization)
roslaunch lightning run_loc_velodyne_online.launch
启动示例 2:先加载参数再运行节点
bash
# 将配置载入参数服务器(命名空间 lightning 可按需修改)
rosparam load src/lightning-lm/config/velodyne_online.yaml lightning
# 启动对应可执行(以你的安装为准)
rosrun lightning run_slam_online --config $(rospack find lightning)/config/velodyne_online.yaml
# 或
rosrun lightning run_loc_online --config $(rospack find lightning)/config/velodyne_online.yaml
离线回放(可选):
bash
# 若使用离线包回放
rosparam set use_sim_time true
rosbag play your_data.bag --clock -r 1.0
5. 关键参数速查(节选自 velodyne_online.yaml)
common 节:
lidar_topic: 默认示例为/livox_points,请改为你的 Velodyne 点云话题,如/velodyne_pointsimu_topic: 默认示例为/livox/imu,请改为你的 IMU 话题,如/imu/datalivox_lidar_topic: 对于 Velodyne 留空(只订阅 PointCloud2)
fasterlio 节(前端里程计):
lidar_type: 2→ Velodynescan_line: 32→ 根据传感器设置 16/32/64blind: 0.5→ 忽略近距离噪点(米)time_scale: 1e-3→ Velodyne 常见时间戳 ms→s,如已是秒级请改为1.0filter_size_scan / filter_size_map / ivox_grid_resolution→ 控制滤波与体素分辨率extrinsic_est_en: false→ 默认固定外参;外参由extrinsic_T/R指定(雷达到 IMU)
system 节(系统级开关):
with_loop_closing: true→ 启用回环with_ui: true→ 可视化界面with_g2p5: true→ 2.5D 地面估计map_path: data/new_map/→ 地图保存目录(相对lightning包路径)pub_tf: true→ 发布 TF
loop_closing 节(回环检测):
max_range, ndt_score_th, loop_kf_gap等控制回环触发与验证强度
lidar_loc 节(定位):
grid_search_angle_range/step、init_with_fp、min_init_confidence影响初始化与收敛filter_intensity_* / filter_z_*过滤异常强度与高度
roi 节(关注区域):
range_min/max与height_min/max限制有效空间以提升效率
6. 常见问题排查
- 话题不匹配
- 请确保点云/IMU 话题名与消息类型与配置一致;可用
rostopic echo/rostopic list检查。
- 请确保点云/IMU 话题名与消息类型与配置一致;可用
- 时间尺度错误
- Velodyne 常用 ms 级戳:
time_scale=1e-3;若已是秒,请改为1.0,否则位姿会"拖影/抖动"。
- Velodyne 常用 ms 级戳:
- 外参误差
- 轨迹偏移或抖动明显时,先离线标定雷达-IMU 外参;必要时尝试开启
extrinsic_est_en做在线微调。
- 轨迹偏移或抖动明显时,先离线标定雷达-IMU 外参;必要时尝试开启
- 回环过密/过稀
- 调整
loop_closing的max_range、ndt_score_th、loop_kf_gap等,平衡鲁棒性与触发频率。
- 调整
- 定位初始化困难
- 适当增大
grid_search_angle_range或启用init_with_fp;提高min_init_confidence下限辅助收敛。
- 适当增大
- 性能优化
- 增大 ROI 限制、适当增大
filter_size_*,或降低可视化负载(with_ui=false)。
- 增大 ROI 限制、适当增大
7. 进阶:切换不同雷达
- Livox
lidar_type: 1;如使用 Livox CustomMsg,请设置livox_lidar_topic并订阅对应消息类型。
- Ouster
lidar_type: 3;按型号调整scan_line和time_scale。
- 不同线数/型号
- 合理设置
scan_line与ivox_grid_resolution;视点云密度调节 ROI 与滤波半径。
- 合理设置
8. 可视化示意(可选)
- 在线 SLAM 演示(示意图):
doc/slam_vbr.gif - 定位演示(示意图):
doc/lm_loc1_nclt.gif,doc/lm_loc2_nclt.gif
以上资源位于
doc/目录下,实际显示效果取决于运行数据与参数。
9. 许可与致谢
- 原始代码作者:高翔
项目地址:https://github.com/gaoxiang12/lightning-lm - 本仓库在其原始代码基础上进行了 ROS1 版本的改造与适配,仅作为学习与科研交流使用。