当前位置:首页 > 系统教程 > 正文

从零开始:Ubuntu20.04下使用KITTI-00数据集运行LeGO-LOAM算法并利用evo进行精度评测(保姆级实战教程)

从零开始:Ubuntu20.04下使用KITTI-00数据集运行LeGO-LOAM算法并利用evo进行精度评测(保姆级实战教程)

从零开始:Ubuntu20.04下使用KITTI-00数据集运行LeGO-LOAM算法并利用evo进行精度评测(保姆级实战教程) LeGO-LOAM  KITTI数据集 evo评测 Ubuntu20.04 第1张

欢迎来到这个专为初学者设计的实战教程。在机器人定位与建图(SLAM)领域,LeGO-LOAM 因其轻量级和地面优化特性而广受欢迎-8。然而,在 Ubuntu20.04 系统上成功运行它,并使用 KITTI数据集 进行测试,最后用 evo工具 对结果进行量化评估,对于新手来说往往布满荆棘。本文将手把手带你走过每一步,从环境搭建到最终的 evo评测,确保你不仅能跑通算法,还能看懂精度指标。

第一步:准备工作——搭建坚固的地基

1.1 安装ROS Noetic

LeGO-LOAM 是基于ROS开发的。Ubuntu20.04 对应的是ROS Noetic版本。请务必参照官方指南完成安装,并确保安装了所需依赖,例如使用命令 sudo apt-get install libboost-all-dev cmake 安装Boost和CMake-5。

1.2 安装GTSAM优化库

LeGO-LOAM 的后端优化依赖于GTSAM。为了避免版本冲突,建议编译安装4.0.0-alpha2版本-2。可以按照以下步骤操作:下载源码,然后编译安装。

第二步:获取并适配LeGO-LOAM源码

2.1 创建工作空间与下载源码

打开终端,逐行输入以下命令:

mkdir -p ~/lego_loam/srccd ~/lego_loam/srcgit clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.gitcd ..

2.2 修改源码以适配KITTI数据集和解决编译错误

关键步骤:KITTI数据集使用的是64线激光雷达,而LeGO-LOAM默认是为16线雷达设计的。我们需要修改配置文件 LeGO-LOAM/include/utility.h-1:

  • 原代码(注释掉): //extern const int N_SCAN = 16;//extern const int Horizon_SCAN = 1800;
  • 修改为(适配KITTI): extern const int N_SCAN = 64;extern const int Horizon_SCAN = 2083;extern const float ang_res_x = 360.0/float(Horizon_SCAN);extern const float ang_res_y = 26.8/float(N_SCAN-1);extern const float ang_bottom = 24.8;extern const int groundScanInd = 55;
  • 同时,修改雷达话题名:在 imageProjection.cpp 中,将点云订阅话题改为 /kitti/velo/pointcloud-1。

此外,Ubuntu20.04编译时常会遇到一些错误,例如Eigen的Index问题。需要修改 /usr/include/pcl-1.10/pcl/filters/voxel_grid.h 文件,将第340行和669行的 Eigen::Index 改为 int-2。

完成所有修改后,在工作空间根目录 ~/lego_loam/ 下运行 catkin_make 进行编译。

第三步:准备KITTI-00数据集并转为bag包

3.1 下载数据集

前往KITTI官网下载Odometry数据集,我们只需要00序列的“synced+rectified data”和“calibration”文件。

3.2 使用kitti2bag工具转换

安装kitti2bag:pip install kitti2bag-1。在解压后的数据集目录(包含2011_10_03_drive_0027_sync等文件夹)中打开终端,执行:kitti2bag -t 2011_10_03 -r 0027 raw_synced。这将生成一个名为 kitti_2011_10_03_drive_0027_synced.bag 的bag文件。

第四步:运行LeGO-LOAM并记录轨迹

4.1 启动LeGO-LOAM

在第一个终端中:

cd ~/lego_loamsource devel/setup.bashroslaunch lego_loam run.launch

如果Rviz中无法显示话题,可能需要将源码中相关Topic前的斜杠去掉-2。

4.2 播放数据集

在第二个终端中,进入bag包所在目录,执行:rosbag play --clock kitti_2011_10_03_drive_0027_synced.bag

4.3 保存估计轨迹

为了进行 evo评测,我们需要保存算法估计的位姿。可以通过修改源码或在终端中监听话题来实现。最简单的方法是使用 rostopic echo 命令将 /laser_odometry_to_init 话题的消息保存为文本文件,或者修改 transformFusion.cpp 添加文件写入功能-1。假设我们最终得到了一个名为 estimated_pose.txt 的轨迹文件。

第五步:使用evo进行精度评测

5.1 安装evo工具

Python环境下的安装非常简单:pip install evo

5.2 准备真实轨迹

KITTI数据集自带了真实轨迹(ground truth)。我们需要将其转换为evo支持的格式(如TUM或KITTI格式)。

5.3 执行评估命令

evo提供了丰富的评估指标,最常用的是绝对轨迹误差(ATE)相对位姿误差(RPE)-4-10。打开终端,进入轨迹文件所在目录。

  • 评估ATE并显示结果: evo_ape kitti ground_truth.txt estimated_pose.txt -va --plot
  • 评估RPE并显示结果: evo_rpe kitti ground_truth.txt estimated_pose.txt -va --plot
  • 同时绘制多条轨迹进行对比: evo_traj kitti ground_truth.txt --ref=estimated_pose.txt -p

执行命令后,evo会计算均方根误差(RMSE)、均值、中位数等指标,并绘制出轨迹对比图。通过这些量化指标,你可以直观地看到 LeGO-LOAMKITTI-00数据集 上的实际表现。至此,你已经完成了从零运行算法到专业 evo评测 的整个流程。