欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?

程序员文章站 2022-04-16 21:25:14
...

轨迹可视化

视觉SLAM十四讲系列之轨迹可视化
把ORB_SLAM2生成轨迹拷贝过去执行就可以了。

安装pip

pip 是官方推荐的标准库管理工具是 Python 的标配。
pip 更新库

pip install --upgrade 库名
pip install -U <包名>

安装库

pip install 库名
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple 

安装 pip3

wget http://bootstrap.pypa.io/get-pip.py
sudo python3.5 get-pip.py
查看pip3安装的位置
whereis pip3
pip3: /usr/local/bin/pip3.5 /usr/local/bin/pip3
就可以安装了,但是前提是已经安装了python3.5的版本
查看python 版本命令:
python -V
python3 -V

安装 jupyter

Jupyter Notebook 快速入门(上)
Jupyter Notebook 快速入门(下)

Ubuntu 16.04 安装 jupyter

sudo pip3 install jupyter
ERROR: jsonschema 3.0.1 has requirement six>=1.11.0, but you'll have six 1.10.0 which is incompatible.
sudo pip install six==1.11.0
sudo pip3 install jupyter
查看安装位置
whereis jupyter
启动 jupyter,想差看那个路径下的文件就在那个路径的终端下输入如下命令
jupyter notebook

查看python和numpy的版本及版本更新和安装位置

1、查看python版本
python -V
python -version  
2、查看python安装位置
python -c "import sys; print sys.executable"
python -c "import os; print os.sys.executable"
python -c "import os; path = os.sys.executable;folder=path[0 : path.rfind(os.sep)]; print folder"
3、查看Numpy版本
python -c "import numpy; print numpy.version.version"
python -c "import numpy; print numpy.__version__"
4、查看Numpy安装路径
python -c "import numpy; print numpy.__file__"

安装evo

下载 evo源代码

https://github.com/MichaelGrupp/evo

安装evo依赖

pip install --upgrade pip
sudo apt install python-pip
sudo apt-get install python-scipy

pip install numpy --upgrade --user
sudo apt-get install python-numpy
sudo apt-get install python-scipy
sudo apt-get install python-matplotlib
sudo apt-get install python-pandas
sudo apt-get install python-sklearn

源代码目录下编译evo:

pip install --editable . --upgrade --no-binary evo

实践详细步骤

测试数据集

cd test/data
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

这是KITTI数据集ORB、SPTAM算法生成的轨迹和KITTI数据集真实轨迹的对比
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?这是KITTI数据集ORB、SPTAM算法生成的轨迹的xyz视角和KITTI数据集真实轨迹的xyz视角对比
可以看到机器人在y轴上的运动变化
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?这是KITTI数据集ORB、SPTAM算法生成的轨迹的rpy视角和KITTI数据集真实轨迹的rpy视角对比
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
将 EuRoC 数据集中 .csv 文件形式的 groundtruth 位姿轨迹转换为 TUM 形式的轨迹文件

evo_traj euroc data.csv --save_as_tum

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
TUM 形式的轨迹文件格式:每行8个数,用空格分隔,包含时间戳(单位:秒)、位置和旋转(四元素表示)

timestamp x y z q_x q_y q_z q_w

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?

多轨迹显示(轨迹未对齐)
(a)上面将 EuRoC 数据集中 MH_04_difficult 序列的 groundtruth(.csv文件) 转换为 TUM 形式的轨迹文件,文件名为 data.tum

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
(b)通过双目 ORB_SLAM2 跑 MH_04_difficult 数据集得到 TUM 形式的轨迹文件,文件名为 FrameTrajectory_TUM_Format.txt

cd /ORB_SLAM2
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/q/projects/ORB_SLAM2/EuRoC_Dataset/mav0/cam0/data /home/q/projects/ORB_SLAM2/EuRoC_Dataset/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH04.txt

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
将两个 TUM 形式的轨迹文件放入同一个文件夹 (test_evo) 中

cd /test_evo
evo_traj tum CameraTrajectory.txt --ref=data.tum -p

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?

计算绝对位姿误差实践详细步骤

计算绝对位姿误差(轨迹对齐)

evo_ape tum data.tum CameraTrajectory.txt -va --plot

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?
如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?

不同格式的轨迹文件及相互转换:https://github.com/MichaelGrupp/evo/wiki/Formats
问题汇总:https://github.com/MichaelGrupp/evo/issues?q=is%3Aissue+is%3Aclosed

使用方法
evo_traj用于分析,绘制或导出一个或多个轨迹的工具
evo_ape轨迹误差
evo_res用于比较evo_apeevo_rpe中的一个或多个结果文件的工具
evo_fig用于重新打开序列化图的(实验性)工具(使用–serialize_plot保存)
evo_config用于全局设置和配置文件操作的工具
tool工具执行参数参考:
evo_traj --help

轨迹误差计算原理

可以先看一下这篇文章
视觉SLAM十四讲系列之真实轨迹和估计轨迹均方根误差

绝对轨迹误差直接计算相机位姿的真实值与SLAM系统的估计值之间的差,
程序首先根据位姿的时间戳将真实值和估计值进行对齐,
然后计算每对位姿之间的差值, 并最终以图表的形式输出,
该标准非常适合于评估视觉 SLAM 系统的性能。

相对位姿误差用于计算相同两个时间戳上的位姿变化量的差, 同样,
在用时间戳对齐之后, 真实位姿和估计位姿均每隔一段相同时间计算位姿的变化量,
然后对该变化量做差, 以获得相对位姿误差, 该标准适合于估计系统的漂移。

两种突出的方法是绝对轨迹误差(ATE)和相对姿态误差(RPE)。
ATE适合评估视觉SLAM系统的性能。
相比之下,RPE适合评估视觉里程计的漂移量,例如每秒的漂移量。

evaluate_ate.py

绝对轨迹误差脚本直接测量真实轨迹和估计轨迹的点之间的差异。

作为预处理步骤,我们使用时间戳将估计的姿势与地面真实姿势相关联。
基于此关联,我们使用奇异值分解来对齐真实轨迹和估计轨迹。

最后,我们计算每对姿势之间的差异,并输出这些差异的均值/中值/标准差。
此外,脚本还可以将两个轨迹绘制到png或pdf文件,这样一来可以更加直观的看到差异。

如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?如何显示ORB_SLAM2生成的关键帧轨迹以及如何使用evo工具评估EuRoCDataset真实际位姿轨迹和ORB_SLAM2算法的估计位姿轨迹?

相关标签: ORB_SLAM2源码解读