news 2026/6/13 2:13:08

保姆级教程:用LIO_SAM复现KITTI 08序列,从数据下载到evo评估全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:用LIO_SAM复现KITTI 08序列,从数据下载到evo评估全流程

从零实现LIO-SAM在KITTI 08序列的完整评测流程

刚接触激光SLAM的研究者常常面临一个困境:论文中提到的算法效果看起来很好,但自己复现时却遇到各种数据格式、环境配置的问题。本文将带你完整走通LIO-SAM在KITTI 08序列上的全流程,从原始数据获取到最终轨迹评估,每个步骤都包含可立即执行的命令和常见问题解决方案。

1. 环境准备与数据获取

1.1 基础环境配置

推荐使用Ubuntu 20.04系统,这是目前ROS社区支持最完善的版本。首先安装ROS Noetic和必要的依赖:

sudo apt-get install -y ros-noetic-navigation ros-noetic-robot-localization ros-noetic-velodyne-simulator

LIO-SAM需要较新版本的gtsam库,建议从源码编译安装:

git clone https://github.com/borglab/gtsam.git cd gtsam && mkdir build && cd build cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF .. make -j$(nproc) sudo make install

注意:如果遇到Eigen3版本冲突问题,可以尝试指定Eigen3路径:cmake -DEigen3_DIR=/usr/include/eigen3/

1.2 KITTI数据下载与解析

KITTI数据集有多个子集,我们需要同时下载odometry和raw data两部分:

  1. 从 KITTI Odometry 下载数据序列08的激光雷达数据(约1.4GB)
  2. 从 KITTI Raw 下载对应的2011_09_30_drive_0028序列(约22GB)

关键数据对应关系如下表:

数据类型文件路径用途
LiDAR点云odometry/data/velodyne/08/*.bin主要输入数据
IMU数据raw/2011_09_30_drive_0028_extract/oxts/data/*.txt惯性测量单元数据
真值轨迹odometry/poses/08.txt轨迹评估基准

2. 数据预处理与格式转换

2.1 时间戳对齐问题

KITTI数据集存在两个常见问题需要处理:

  1. odometry数据与raw data时间基准不同
  2. 不同传感器数据采样频率不一致

使用以下Python脚本提取并同步时间戳:

import numpy as np # 从oxts数据提取IMU时间戳 imu_timestamps = np.loadtxt('oxts/timestamps.txt', dtype=str) imu_unixtime = [float(time.mktime(datetime.strptime(ts, "%Y-%m-%d %H:%M:%S").timetuple())) for ts in imu_timestamps] # 从velodyne数据提取LiDAR时间戳 lidar_timestamps = np.loadtxt('velodyne_points/timestamps.txt', dtype=str) lidar_unixtime = [...] # 类似处理

2.2 生成ROS bag文件

推荐使用kitti2bag工具将原始数据转换为ROS bag格式:

pip install kitti2bag kitti2bag -t 2011_09_30 -r 0028 raw_synced

常见问题处理:

  • 如果遇到ImportError: No module named 'pykitti',需要先安装pykitti:pip install pykitti
  • 时间戳异常可以添加--skip 30参数跳过前30帧

3. LIO-SAM配置与优化

3.1 安装与编译

从GitHub克隆最新版LIO-SAM并编译:

cd ~/catkin_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd .. && catkin_make -DCMAKE_BUILD_TYPE=Release

3.2 关键参数调整

修改params.yaml中以下关键参数以适应KITTI数据:

# LiDAR参数 sensor: velodyne N_SCAN: 64 Horizon_SCAN: 1800 downsampleRate: 1 # IMU参数 imuTopic: "/imu_raw" imuAccNoise: 1e-2 imuGyrNoise: 1e-4

重要提示:KITTI的IMU数据频率为10Hz,需要将imuFrequency参数相应调整

3.3 运行与实时监控

启动LIO-SAM节点:

roslaunch lio_sam run.launch

使用rviz实时监控建图效果:

rviz -d $(rospack find lio_sam)/launch/include/module.rviz

常见性能优化技巧:

  • laserMapping.cpp中调整mapFrameNum参数控制关键帧数量
  • 使用ndt_omp替代默认的ICP匹配算法可能提升速度

4. 轨迹评估与结果分析

4.1 轨迹格式转换

LIO-SAM默认输出为TUM格式,而KITTI真值是12列的KITTI格式。使用evo工具进行转换:

# 将KITTI真值转换为TUM格式 evo_traj kitti ground_truth.txt --save_as_tum # 将LIO-SAM输出转换为相同时间基准 python align_timestamps.py lio_sam_result.txt ground_truth.tum

4.2 定量评估指标

使用evo计算绝对位姿误差(APE)和相对位姿误差(RPE):

evo_ape tum ground_truth.tum lio_sam_result.tum -r trans_part --align evo_rpe tum ground_truth.tum lio_sam_result.tum -r trans_part --delta 10 --delta_unit m

典型评估结果指标解读:

指标优秀值可接受值说明
APE (m)<0.5<1.5绝对位置误差
RPE (%)<1<3相对运动误差
轨迹长度 (m)--验证完整性

4.3 可视化对比

生成轨迹对比图:

evo_traj tum lio_sam_result.tum --ref=ground_truth.tum -p --plot_mode=xz

保存结果为PDF:

evo_ape tum ground_truth.tum lio_sam_result.tum -r trans_part --align --save_plot results.pdf

5. 进阶技巧与问题排查

5.1 提升精度的实用技巧

  1. IMU标定补偿:使用imu_utils工具标定IMU噪声参数

    roslaunch imu_utils kitti_imu.launch
  2. 点云去畸变:在imageProjection.cpp中启用deskewFlag

    pcl::PointCloud<PointXYZIRT>::Ptr deskewedCloud(new pcl::PointCloud<PointXYZIRT>());
  3. 回环检测优化:调整loopClosureFrequency参数平衡精度与速度

5.2 常见错误排查

问题1:点云显示异常,出现条纹状 artifacts

  • 解决方案:检查N_SCAN参数是否与激光雷达线数匹配

问题2:轨迹严重漂移

  • 检查步骤
    1. 确认IMU数据是否正确接入
    2. 检查imuTopic参数是否与bag文件中的topic一致
    3. 验证时间戳同步是否准确

问题3:建图出现重影

  • 可能原因:回环检测失败
  • 调试方法
    rostopic echo /lio_sam/mapping/loop_closure_constraint

实际项目中,我发现最影响精度的往往是时间戳同步这种基础问题。建议在数据处理阶段多花些时间验证时间对齐效果,可以节省后期大量调试时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 2:13:04

[深度学习]Kaggle:Digital Extraction

实验目的:提取银行卡数字 等待输入&#xff08;Your DataSet&#xff09; 输入加载完成&#xff08;Update Status&#xff09; 图像CV展示失败 问题解决Easy 边缘识别算法&#xff1a; def extract_card_number(image_path):img cv2.imread(image_path)if img is None:print(…

作者头像 李华
网站建设 2026/6/13 2:12:38

AdS-Teo虫洞几何与量子化模基础解析

1. AdS-Teo虫洞几何与量子化模基础在当代理论物理研究中&#xff0c;AdS-Teo虫洞模型提供了一个独特的平台&#xff0c;用于探索广义相对论与量子场论的深层联系。这种特殊的时空结构具有几个关键几何特征&#xff1a;首先&#xff0c;径向度规函数f(r)g^rr(r)在喉部位置rr_0处…

作者头像 李华
网站建设 2026/6/13 2:10:51

微信跳一跳全自动辅助工具(Python实现,兼容安卓与iPhone)

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;用微信跳一跳游戏自动通关的Python脚本合集&#xff0c;通过ADB命令抓取安卓屏幕图像、用WebDriverAgent获取iOS画面&#xff0c;再结合OpenCV识别棋子与目标平台位置&#xff0c;计算跳跃距离后模拟按压时长完…

作者头像 李华
网站建设 2026/6/13 2:07:56

烟台开发区少儿编程怎么找靠谱的

烟台开发区许多家长为孩子选少儿编程班时&#xff0c;常因机构多、课程杂而困惑。判断机构是否靠谱&#xff0c;关键看三点&#xff1a;课程体系是否系统、师资背景是否专业、学习成果是否实在。首先&#xff0c;课程应覆盖孩子成长全阶段。不少机构只针对特定年龄段&#xff0…

作者头像 李华