zl程序教程

您现在的位置是:首页 >  其它

当前栏目

RGB-D基准测试工具:绝对轨迹误差 (ATE)、相对位姿误差 (RPE)和从图像生成点云

生成 图像 测试工具 点云 绝对 rgb 相对 轨迹
2023-09-27 14:27:34 时间

在估计RGB-D相机轨迹并将其保存到文件中后,我们需要通过将其与地面事实进行比较来评估估计轨迹中的误差。有不同的错误指标。两种突出的方法是绝对轨迹误差(ATE)和相对姿势误差(RPE)。ATE非常适合测量可视 SLAM 系统的性能。相比之下,RPE非常适合测量视觉里程计系统的漂移,例如每秒漂移。

一、准备工作

1.运行rgb-d数据集

(base) dzh@dzh-Lenovo-Legion-Y7000:~$ cd slambook/
(base) dzh@dzh-Lenovo-Legion-Y7000:~/slambook$ cd ORB_SLAM2/
(base) dzh@dzh-Lenovo-Legion-Y7000:~/slambook/ORB_SLAM2$ ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../TUM_DataSet/freiburg3_walking_xyz ../TUM_DataSet/freiburg3_walking_xyz/associations.txt 

运行结束后,可以看到相机的轨迹被保存到了CameraTrajectory.txt;关键帧的轨迹被保存到了KeyFrameTrajectory.txt

在这里插入图片描述

2.复制文件

我们可以在ORB-SLAM2的根目录下找到这两个轨迹文件。

在这里插入图片描述
然后将运行得到的轨迹文件和数据集自带的groundtruth文件复制到一个文件夹中,然后是两个python脚本,便于操作。

在这里插入图片描述

3.解决报错

打开终端输入运行脚本的命令python evaluate_ate.py groundtruth.txt CameraTrajectory.txt,我的base环境是Python3.9,而评估脚本都是python2的代码,所以运行会出现以下报错并修改脚本:

(base) dzh@dzh-Lenovo-Legion-Y7000:~/slambook/Evaluation$ python evaluate_ate.py groundtruth.txt CameraTrajectory.txt 
  File "/home/dzh/slambook/Evaluation/evaluate_ate.py", line 153
    print "compared_pose_pairs %d pairs"%(len(trans_error))
          ^
SyntaxError: invalid syntax

python2和python3print的格式不同,python3必须要加上()。

(base) dzh@dzh-Lenovo-Legion-Y7000:~/slambook/Evaluation$ python evaluate_ate.py groundtruth.txt CameraTrajectory.txt 
Traceback (most recent call last):
  File "/home/dzh/slambook/Evaluation/evaluate_ate.py", line 45, in <module>
    import associate
ModuleNotFoundError: No module named 'associate'

复制associate.py到当前文件夹。

(base) dzh@dzh-Lenovo-Legion-Y7000:~/slambook/Evaluation$ python evaluate_ate.py groundtruth.txt CameraTrajectory.txt 
Traceback (most recent call last):
  File "/home/dzh/slambook/Evaluation/evaluate_ate.py", line 129, in <module>
    first_list = associate.read_file_list(args.first_file)
TypeError: read_file_list() missing 1 required positional argument: 'remove_bounds'

def read_file_list(filename,remove_bounds=‘False’):

(yolov5) dzh@dzh-Lenovo-Legion-Y7000:~/slambook/Evaluation$ python evaluate_ate.py groundtruth.txt CameraTrajectory.txt 
Traceback (most recent call last):
  File "evaluate_ate.py", line 144, in <module>
    first_stamps.sort()
AttributeError: 'dict_keys' object has no attribute 'sort'

sorted(first_stamps)

Traceback (most recent call last):
  File "/home/dzh/slambook/Evaluation/evaluate_ate.py", line 182, in <module>
    plot_traj(ax,first_stamps,first_xyz_full.transpose().A,'-',"black","ground truth")
  File "/home/dzh/slambook/Evaluation/evaluate_ate.py", line 95, in plot_traj
    interval = numpy.median([s-t for s,t in zip(stamps[1:],stamps[:-1])])
TypeError: 'dict_keys' object is not subscriptable

list(stamps)[1:]

二、绝对轨迹误差 (ATE)

  1. 仅输出RMSE/cm误差,执行如下命令:
python evaluate_ate.py groundtruth.txt CameraTrajectory.txt
  1. 输出真实轨迹和预测轨迹以及误差,并直观显示,执行如下命令:
python evaluate_ate.py groundtruth.txt CameraTrajectory.txt --plot result.png
  1. 输出所有误差,包含平均值,中值等, 执行如下命令:
python evaluate_ate.py groundtruth.txt CameraTrajectory.txt --verbose

在这里插入图片描述
在这里插入图片描述

三、相对位姿误差 (RPE)

python evaluate_rpe.py groundtruth.txt KeyFrameTrajectory.txt --fixed_delta --plot rpe2.png

在这里插入图片描述

四、从图像生成点云

python generate_pointcloud.py path_rgb path_depth path_ply

打开meshlab,然后import mesh,可以查看到数据集第一帧的3D点云。
在这里插入图片描述

SLAM是一项和实践紧密相关的技术,再漂亮的数学理论,如果不能转化为可以运行的代码,那就仍是可望而不可及的空中楼阁,没有实际意义。实践出真知,实践出真爱。