一、EVO简介
EVO是用于处理、评估和比较里程计和SLAM算法的轨迹输出的工具
GitHub项目地址
二、轨迹
EVO进行轨迹对比时,对输出的轨迹格式有一定的限制和规定。在使用evo_traj等工具时需要事先给出轨迹的对应类型。
支持的轨迹格式
-
ros——ROS数据包
当数据包中含有topic:geometry_msgs/PoseStamped, geometry_msgs/TransformStamped, geometry_msgs/PoseWithCovarianceStamped 和nav_msgs/Odometry,可以使用EVO工具进行轨迹对比。
在v1.9版本之后,TF类topic也同样支持EVO评估。 -
euroc——EuRoC MAV数据集
本身EuRoC数据集不支持EVO工具的直接使用,需要转换成TUM类型数据集进行评估。
EuRoC数据集中以csv结尾的文件存储了地面真值信息。
使用EuRoC数据集时要注意坐标系,ground truth,IMU和Camera之间有着不同的轴约定。 -
kitti——KITTI数据集
KITTI数据集输出的轨迹数据中不包含时间戳信息。KITTI轨迹的文件中存储12个描述数据,是齐次位姿矩阵SE(3)的前三行//SE(3) a b c d e f g h i j k l 0 0 0 1 //kitti traj file a b c d e f g h i j k l
-
tum——TUM RGB-D数据集
每行有8个条目,包含时间戳(以秒为单位)、位置和方向(四元数),每个值由空格分隔,结尾没有空格timestamps x y z q_x q_y q_z q_w
轨迹之间的转换
不同类型的轨迹之间有的可以互相转换有的则不可以,下表给出了轨迹类型之间的转换关系
–save_as_bag | –save_as_kitti | –save_as_tum | |
---|---|---|---|
bag | yes | yes | yes |
euroc | yes | yes | yes |
kitti | no | yes | no |
tum | yes | yes | yes |
//Example
// export a EuRoC groundtruth file to a TUM trajectory
evo_traj euroc data.csv --save_as_tum
//(will be saved as data.tum)
//export TUM trajectories to KITTI format
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
//(will be saved as *.kitti)
//export TUM trajectories to ROS bagfile
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag
//(will be saved as <timestamp>.bag with topics traj_1, traj_2 and traj_3)
三、常用命令
evo工具主要有6个常用命令
- evo_ape:用于评估绝对位姿误差
- evo_rpe:用于评估相对位姿误差
- evo_traj:用于画轨迹、输出轨迹文件、转换轨迹数据格式
- evo_res:比较来自evo_ape和evo_rpe生成的一个或多个结果文件的工具
- evo_fig:(不常用)用于重新打开序列化图
- evo_config:(不常用)evo工具全局设置和配置文件操作
3.1 evo_ape
用于评估两个轨迹的绝对轨迹误差,最简单的使用方法如下
evo_ape kitti 1.txt 2.txt
在这里两条轨迹的数据格式必须相同!!。上述命令运行之后会在终端输出统计信息(单位:米)
max:最大误差
mean:误差均值
median:误差中位数
min:最小误差
rmse:均方根误差
sse:方差
std:标准差
更为常用的命令为
evo_ape tum 1.txt 2.txt -a -p -s
在这里-a,-s是对两个轨迹进行尺度和位姿的对齐,他会直接对齐到第一个的轨迹。-p则是将轨迹画出来显示。
-a/–align的使用注意:
在kitti数据格式时,由于kitti数格式没有时间戳,evo工具没法通过时间戳将两个轨迹对齐。具体解决方法会在“四、其他工具”中解决。
如果需要多个不同的轨迹进行对比,可以通过==–save_results==命令保存
evo_ape tum 1.txt 2.txt --save_results result.zip
3.2 evo_rpe
用于评估两条轨迹的相对位姿误差,使用方式基本上和evo_ape相同。
3.3 evo_traj
最基本的命令,用于画出轨迹、输出轨迹文件、进行轨迹之间的转换。在使用前需要给出轨迹的数据标准。
最简单的应用
evo_traj tum 1.txt
该命令会在屏幕上显示轨迹的基本信息,包括位姿个数、轨迹长度以及运行时间等。
当在上述的命令之后加上简单的参数-p,就会在屏幕上显示轨迹。
evo_traj tum 1.txt -p
相关参数的使用和evo_ape的用法相同,但在-a的使用上有一定的区别。在使用-a进行轨迹对齐时,需要给出ref也就是轨迹要以哪个为参考进行旋转和平移的转换。
evo_traj tum 1.txt 2.txt -a --ref=1.txt
至于轨迹的保存类型的更改在二、轨迹中的轨迹之间的转换中给出了详细的例子,在这里就不进行重复了。
3.4 evo_res
主要用于多个evo_ape或evo_rpe结果的比较。最常用的命令如下:
evo_res 1.zip 2.zip
将会输出比较多个轨迹的最大值、均值、中位数、最小值、均方根误差、方差和标准差的信息
四、其他工具
evo工具文件夹下准备了kitti转tum类型数据的方法:
python2 kitti_poses_and_timestamps_to_trajectory.py 00.txt times.txt kitti_00_tum.txt
需要准备对应kitti数据的时间戳信息。