evo是一个很好的测评工具,它可以根据时间戳将轨迹进行对齐,同时可以将不同尺度的轨迹按照你指定的标准轨迹进行拉伸对齐,并可以算出均方差等评定参数,用于测评slam算法性能
evo共有两种安装方式
pip install evo --upgrade --no-binary evo
git clone https://github.com/MichaelGrupp/evo.git
然后进入evo文件夹
pip install --editable . --upgrade --no-binary evo
1.安装的时候可能需要安装一些python的package,(有的用户可能已经安装过了就会很快跳过这一步),这些是需要通过pip安装的,注意是python2.7下的,可能会出现下载时间巨长的情况,这时候需要更改python的pip源,
在pip 语句后面增加指定源路径,如下
pip install --editable . --upgrade --no-binary evo -i https://pypi.tuna.tsinghua.edu.cn/simple
这里增加了清华源,下载速度飞升,当然这只是一种简易方法,如果想长期提升pip下载速度,可以看
2.直接使用pip下载会出现无权限等问题,如下
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib/python2.7/dist-packages/dateutil/relativedelta.pyc'
Consider using the `--user` option or check the permissions
在pip语句后面增加 --user
pip install --editable . --upgrade --no-binary evo --user
3.安装后虽然成功,但是报错numpy版本低,最低要求为1.12.0,而当前的为1.11.0,如下
raise VersionConflict(dist, req).with_context(dependent_req)
ContextualVersionConflict: (numpy 1.11.0 (/usr/lib/python2.7/dist-packages), Requirement.parse('numpy>=1.12.0'), set(['pandas']))
[ERROR] evo module evo.main_traj crashed - no logfile written (disabled)
这时只需将numpy的版本手动升级即可
pip install numpy --upgrade --user
有的小伙伴可能会遇到下载更新后不通过的问题,要求python版本大于3.5,如下(不要用pip3,不然安完也无法使用,解决方法看下面)
Looking in indexes: http://pypi.douban.com/simple
Collecting numpy
Downloading http://pypi.doubanio.com/packages/ff/59/d3f6d46aa1fd220d020bdd61e76ca51f6548c6ad6d24ddb614f4037cf49d/numpy-1.17.4.zip (6.4MB)
|████████████████████████████████| 6.4MB 2.3MB/s
ERROR: Command errored out with exit status 1:
command: /usr/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ir0cOk/numpy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ir0cOk/numpy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-ir0cOk/numpy/pip-egg-info
cwd: /tmp/pip-install-ir0cOk/numpy/
Complete output (5 lines):
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-install-ir0cOk/numpy/setup.py", line 31, in
raise RuntimeError("Python version >= 3.5 required.")
RuntimeError: Python version >= 3.5 required.
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
这是由于你所在的源中numpy版本过高,适用于python3,所以更改你的源或者直接下载稍低版本的numpy
我这里使用的清华源下载的1.16.5版本的numpy,亲测可用
4.使用涉及到画图的功能时,报错,如下
File "/home/wyt/evo/evo/tools/plot.py", line 150, in tabbed_tk_window
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
ImportError: cannot import name NavigationToolbar2Tk
[ERROR] evo module evo.main_traj crashed - no logfile written (disabled)
这是由于缺少TK工具导致的,我没有去下载这个python工具,而是直接更改evo的setting
cd ~/.evo
sudo gedit settings.json
然后将"plot_backend"后面的值改为"QT5Agg",
"plot_backend": "QT5Agg",
然后就可以正常使用了。
evo支持一下几种数据格式:
TUM 轨迹文件
KITTI 位姿
EUROC .csv和.txt文件
ROS bag文件
在使用evo的时候都要在工具后面先给出想要处理的数据格式如
evo_traj tum -h(查看帮助)
如:
evo_traj tum myslam.txt -p
也可以将多个轨迹画到一起
evo_traj tum data.txt vins_data.txt --ref data.txt -va -p
图如下:
其中ref是参考轨迹,-va是对齐后的详细信息,-p是画出图像,也可以使用
–plot_mode {xy,xz,yx,yz,zx,zy,xyz}
来选择单独绘制某个平面的信息
如:
evo_ape tum data.txt vins_data.txt -va -p
结果如下
使用ape的时候无需给出–ref 的文件,tum 后第一个文件即为标准文件,
这里标准文件为data.txt
其使用方法与ape基本一致
将文件保存为其他类型的文件,可以使用如下句柄
--save_as_tum save trajectories in TUM format (as *.tum)
--save_as_kitti save poses in KITTI format (as *.kitti)
--save_as_bag save trajectories in ROS bag as .bag
保存图片
--save_plot “保存的路径”
合并轨迹
--merge
给出数据的最大时间戳差异
--t_max_diff “具体差异”
具体其他参数请参考不同工具后的-h(–help)