最新的evo工具支持的Python环境为Python 3.8+
,有下面两种方法安装最新版本的evo:
1.命令行利用pip工具直接安装
pip install evo --upgrade --no-binary evo
2.源代码安装
git clone https://github.com/MichaelGrupp/evo.git
cd evo
pip install --editable . --upgrade --no-binary evo
TUM数据集官网下载地址,TUM数据集里面有深度图像和RGB图像。当使用单目模式时,仅用到rgb文件夹里的图片;当使用RGB-D模式时,需要用到depth和rgb两个文件夹里的图片,而且需要associate.py脚本文件关联 RGB 图像和深度图像。我们以rgbd_dataset_freiburg3_long_office_household
数据集为例。
在这步中我们需要使用RGB 图像和深度图像的关联文件,ORB-SLAM2的作者在examples/RGB-D/associations/路径下提供了某些序列的关联文件。我们也可以使用 TUM官网提供的python 脚本associate.py关联 RGB 图像和深度图像。将associate.py脚本放到下载并且解压好的rgbd_dataset_freiburg3_long_office_household/路径下,执行以下命令:
python associate.py rgb.txt depth.txt > associations.txt
上面命令的含义就是对齐彩色图像和深度图像的时间戳,然后关联结果写入到associations.txt
中。
接下来执行运行命令,最熟悉不过了:
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
将TUMX.yaml改为TUM1.yaml,TUM2.yaml或TUM3.yaml,分别用于freiburg1,freiburg2和freiburg3序列。将PATH_TO_SEQUENCE_FOLDER
改为解压好的数据集文件夹路径。将ASSOCIATIONS_FILE
改为相应关联文件的路径。
简单来说命令分为五个部分:
rgbd_tum程序运行完成之后,会保存相机和关键帧轨迹文件到ORB_SLAM2根目录下。
绘制单个轨迹,groundtruth.txt是数据集的真实轨迹,-p
表示绘制图像。
evo_traj tum groundtruth.txt -p
xyz坐标系的视图,显示各个时间下相机的x、y、z坐标,纵轴单位为m,横轴单位为s。
rpy视图,显示各个时间下相机的r、p、y坐标,纵轴单位为deg,横轴单位为s。
绘制多个轨迹:真实轨迹和刚刚运行得到的相机轨迹。
evo_traj tum groundtruth.txt CameraTrajectory.txt -p
上面的轨迹在旋转和平移上不对齐,可以通过--ref
参数指定参考轨迹,并且添加参数-a来对齐轨迹
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -a
可以看到运行轨迹和真实轨迹几乎一致,看不出来又两根线,ORB_SLAM2强大的后端优化和闭环在这里就体现出来了。
轨迹图都如此的吻合,xyz坐标必然也很精确,相比而言z坐标误差较大。
如果是单目程序,还需要添加一个参数-s
进行尺度上面的对齐
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -a -s
或者直接使用参数-as
同时使用旋转和平移以及尺度上面的对齐
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as
通过观察,上面的轨迹在x和y轴上面变化不大,可以添加参数--plot_mode=xz
将轨迹压缩在xz平面上。
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as --plot_mode=xz
大多数情况下,还是选择将轨迹投影到xy平面上,就是俯视图。
通过上面的实践,我们总结常用的命令格式如下:
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as --plot_mode=xy
evo_ape tum groundtruth.txt CameraTrajectory.txt -p -as
max:表示最大误差;mean:平均误差;median:误差中位数;min:最小误差;rmse:均方根误差;sse:和方差/误差平方和;std:标准差。
APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)
max 0.025939
mean 0.009091
median 0.008388
min 0.000931
rmse 0.009895
sse 0.243401
std 0.003906
和绝对轨迹误差参数相同,使用相机轨迹的原因在于它包含了关键帧轨迹,反映的是全局一致的地图。
evo_rpe tum groundtruth.txt CameraTrajectory.txt -p -as
RPE w.r.t. translation part (m)
for delta = 1 (frames) using consecutive pairs
(with Sim(3) Umeyama alignment)
max 0.030021
mean 0.004404
median 0.003749
min 0.000176
rmse 0.005210
sse 0.067444
std 0.002783
照片本质上是拍照时的场景在相机的成像平面上留下的一个投影。它以二维的形式反映了三维的世界。显然,这个过程丢掉了场景的一个维度,也就是所谓的深度(或距离)。