evo precision evaluation
SLAM轨迹评估工具evo使用方法简介
一、evo工具简介
evo是一个比较方便的轨迹评估工具,官方地址为:https://github.com/MichaelGrupp/evo 。下面主要介绍一些经常用的命令:
1.evo支持的数据格式
TUM 轨迹文件
KITTI 位姿
EUROC
.csv和.txt文件
ROS bag文件
本文主要用到bag和tum两种格式:
evo对rosbag的话题支持主要包含以下四种,常用的是nav_msgs/Odometry :
Currently, bagfiles with topics that contain geometry_msgs/PoseStamped
, geometry_msgs/TransformStamped
, geometry_msgs/PoseWithCovarianceStamped and nav_msgs/Odometry messages are supported. evo only reads the trajectory, thus covariance or twist aren't used.
TUM 轨迹文件格式为:timestamp tx ty tz qx qy qz qw (时间戳以秒为单位)
2.evo常用命令
2.1 evo_traj
:轨迹可视化工具
evo_traj可以打开任意多个轨迹,查看统计信息,进行对齐以及画图操作,同时可以将轨迹转换成其他格式。一般使用命令如下:
//将bag文件里的里程计topic轨迹转化为tum格式txt文件
evo_traj bag name.bag /topic_name --save_as_tum
//查看tum轨迹文件,并绘制图像,-v 详细模式查看 --full_check 对轨迹进行检查
evo_traj tum name.tum --plot
ps:1.tum格式,只需要给出tum轨迹文件路径即可,bag格式,要给出bag包路径 后面加上odom的话题名称
2.如果要查看多个路径文件,在后面累加即可
2.2 evo_ape/evo_rpe
:绝对位姿评估工具/相对位姿评估工具
两者使用方法基本一样,根据需要选择即可,下面以evo_ape为例
可通过 evo_ape +格式 + --help查看更多参数的含义以及如何使用,例如:
evo_ape bag --help
常用的评估命令如下:
//tum格式 以name1为参考轨迹,计算name2轨迹的绝对位姿误差 -va对齐 -plot画图
evo_ape tum name1.tum name2.tum -va --plot
//bag格式
evo_ape bag name.bag name1topic name2topic -va --plot
下方以RTK输出的里程计评估IMU输出的里程计:如何输出里程计可以参考以下两个链接:
https://zhuanlan.zhihu.com/p/577161337
https://zhuanlan.zhihu.com/p/577958759
有了两者输出的里程计后可以通过rosbag录制输出的里程计话题,之后用evo进行评估:
没有对齐的时候是这样:
自动对齐之后是这样:
ps:1.对这里的自动对齐有个疑问:如果用自动对齐相当于对轨迹已经作了一次优化,求解的均方根误差最小的旋转和平移矩阵,那评估结果就不准了,所以曲线是振荡的,按理说imu的累积误差是一直增大的,所以误差应该也是一直增大
2.3 evo_res
:结果评估工具
evo_ape/evo_rpe中将结果保存为.zip文件后,可以利用evo_res对不同的结果进行比较
2.4 evo_config
:evo配置工具
evo_config show可以查看设置文件中的参数和参数的简要注释,如下所示:
{
“console_logging_format”: “%(message)s”,
“euler_angle_sequence”: “sxyz”,
“global_logfile_enabled”: false,
“plot_axis_marker_scale”: 0.0,
“plot_backend”: “Qt5Agg”,
“plot_figsize”: [
6,
6
],
“plot_fontfamily”: “sans-serif”,
“plot_fontscale”: 1.0,
“plot_invert_xaxis”: false,
“plot_invert_yaxis”: false,
“plot_linewidth”: 1.5,
“plot_mode_default”: “xyz”,
“plot_multi_cmap”: “none”,
“plot_pose_correspondences”: false,
“plot_pose_correspondences_linestyle”: “dotted”,
“plot_reference_alpha”: 0.5,
“plot_reference_axis_marker_scale”: 0.0,
“plot_reference_color”: “black”,
“plot_reference_linestyle”: “–”,
“plot_seaborn_palette”: “deep6”,
“plot_seaborn_style”: “darkgrid”,
“plot_split”: false,
“plot_statistics”: [
“rmse”,
“median”,
“mean”,
“std”,
“min”,
“max”
],
“plot_texsystem”: “pdflatex”,
“plot_trajectory_alpha”: 0.75,
“plot_trajectory_cmap”: “jet”,
“plot_trajectory_linestyle”: “-”,
“plot_usetex”: false,
“plot_xyz_realistic”: true,
“ros_map_alpha_value”: 1.0,
“ros_map_unknown_cell_value”: 205,
“save_traj_in_zip”: false,
“table_export_data”: “stats”,
“table_export_format”: “csv”,
“table_export_transpose”: true,
“tf_cache_lookup_frequency”: 10,
“tf_cache_max_time”: 10000.0
}