EVO使用教程
我使用的环境为ubunut1604+ROS(Kinect)版本,环境是Python2的
1 EVO环境安装
1.1 二进制安装
pip install evo --upgrade --no-binary evo
1.2 源码安装
推荐使用源代码安装方式。,首先安装依赖项:
sudo pip install --upgrade pip
sudo pip install --user --upgrade
sudo apt-get install libfreetype6-dev gfortran
pip install matplotlib
pip install scipy
安装evo:
git clone -b python2 https://github.com/MichaelGrupp/evo.git
cd evo
pip install --editable . --upgrade --no-binary evo
出现以下情况则表示安装成功了
2 使用方法
EVO提供了绝对误差和相对误差评估命令和图形分析工具(暂且这样称呼它):
evo_ape - absolute pose error (绝对误差)
evo_rpe - relative pose error (相对误差)
Tools:
evo_traj - tool for analyzing, plotting or exporting one or more trajectories(用于分析一个或者多个曲线)
evo_res - tool for comparing one or multiple result files from evo_ape or evo_rpe
evo_fig - (experimental) tool for re-opening serialized plots (saved with --serialize_plot)
evo_config - tool for global settings and config file manipulation
这里需要注意一下 EUROC数据、TUM数据集、KITTI数据集使用的四元数顺序是不一样的,因此在使用命令的时候后续需要加参数予以区分,我们在自己保存算法输出的轨迹文件的时候应当注意这一点。
在evo的源码中 evo/test/data 目录下面有用于测试的数据集
2.1 TUM数据集上使用
TUM数据格式为:timestamp tx ty tz qx qy qz qw (每行有8个元素,结尾没有空格, 时间戳以秒为单位,精确到小数点后9位)
2.1.1 计算轨迹的绝对误差(evo_ape)
评估算法输出的曲线和真实值之间的绝对误差(absolute pose error)
mkdir results
evo_ape tum fr2_desk_groundtruth.txt fr2_desk_ORB.txt -va --plot --plot_mode xz --save_results results/ORB_fr2_desk.zip
执行命令以后,在终端中打印出RMSE等误差值
若出现错误: [ERROR] evo module evo.main_ape crashed - no logfile written (disabled)
则是由于matplotlib 的问题,需要升级一下 matplotlib
pip install matplotlib --upgrade
2.1.2 绘制多条曲线(evo_traj)
在一张图中绘制两个算法的输出曲线(rgbdslam-v2 和 orb-slam),其中 --ref的参数为指定的真是轨迹值。
evo_traj tum freiburg1_xyz-ORB_kf_mono.txt freiburg1_xyz-rgbdslam.txt --ref=freiburg1_xyz-groundtruth.txt -va --plot --plot_mode xy
在图片的界面中可以修改曲线的颜色等参数。
注意:多条曲线对齐的时候需要加上参数 -a
2.1.3 分析多条曲线(evo_res)
假设现在我使用2.1.1中命令生成了在fr1_xyz 和 fr2_desk两个序列上的Zip文件(这两个zip文件都在result目录下面)。此时我们使用 evo_res 命令分析算法在这两个序列上的性能
evo_res results/*.zip -p --save_table results/table.csv
这表示分析 results 目录下面所有的zip文件。
2.3 KITTI数据集上使用
KITTI数据集格式: r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz 存储变换矩阵的前三行 (每行12元素,空格隔开) 无时间戳
2.2.1 计算轨迹的绝对误差
这里会生成一个名为xxx.zi压缩文件,这个在绘制多条曲线会用到。
mkdir results
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/KITTI_00_ORB.zip
2.2.2 绘制多条曲线
将待绘制的曲线文件放置于同一个文件夹test中,
cd test/data
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
其中,KITTI_00_ORB.txt 表示第1个算法在序列上运行的文件,KITTI_00_SPTAM.txt* 表示第2个算法在序列上运行的文件,***–ref=KITTI_00_gt.txt*** 表示指定真实的groundtruth轨迹文件,***-p --plot_mode=xz*** 则命令参数,在XOZ平面绘制轨迹。
注意: 多条曲线对齐的时候需要加上参数 -a
2.2.3 分析多条曲线
evo_res results/*.zip -p --save_table results/table.csv
2.3 EUROC数据集上使用
EUROC数据格式为:timestamp,px,py,pz,qw,qx,qy,qz,vx,vy,vz,bwx,bwy,bwz,bax,bay,baz (每行17个元素,逗号隔开,时间以纳秒为单位,无小数)*
2.3.1 计算轨迹的绝对误差
评估算法输出的曲线和真实值之间的绝对误差(absolute pose error)
evo_ape euroc V102_groundtruth.csv V102.txt -va --plot --plot_mode xy --save_results results/EUROC.zip
其余两个命令与前面的操作一样,只需要将命令中的 euroc 和 kitti 替换成 tum 即可。
3 修改EVO 绘图配置
这部分参考博客[4]和官方教程[5],以及一个翻译的中文教程[6]
1调整字体大小
evo_config set plot_fontfamily serif plot_fontscale 1.5
2 调整图像大小
evo_config set plot_figsize 8 6
3 调整默认线宽度
evo_config set plot_linewidth 3
4 调整ref参考轨迹透明程度
默认在绘制groundtruth轨迹的时候会有点淡,这可以调整一下透明度
evo_config set plot_reference_alpha 0.75
5 修改背景的颜色
evo_config set plot_seaborn_style whitegrid
这是修改背景,其中whitegrid可以替换成darkgrid, whitegrid, dark, white, ticks,deep6.这里我还是使用的默认的whitegrid
6.修改线条颜色
evo_config set plot_seaborn_palette bright
这是修改线条,其中bright可以替换成deep, muted, bright, pastel, dark, colorblind
参考资料
[1] 官方教程:https://github.com/MichaelGrupp/evo
[2] https://blog.csdn.net/A_L_A_N/article/details/88708979
[3] https://blog.csdn.net/qq_37568167/article/details/104961523
[4] https://zhuanlan.zhihu.com/p/88223106
[5] http://wiki.ros.org/map_server#Map_format
[6] https://blog.csdn.net/hhaowang/article/details/105226136
如果文章对你有所帮助,请大家帮忙点个赞。O(∩_∩)O
欢迎大家在评论区交流讨论(cenruping@vip.qq.com)