configuration
evo_config 是一个小工具,可以用于更改全局设置或者生成自定义配置文件。
自定义配置文件
有时,将实验的参数存储在专用文件中,而不是每次都手动输入作为命令行的参数是非常有用的。evo大多数命令行工具都可以用-c或者–config参数加载.json配置文件。
示例
假设要运行下面这条命令计算位置的相对误差
evo_rpe tum groundtruth.txt estimate.txt --pose_relation angle_deg --delta 1 --delta_unit m --verbose --plot
evo_config generate 命令可以将任意的命令的参数转换为.json文件,在–out的选项下。
evo_config generate --pose_relation angle_deg --delta 1 --delta_unit m --verbose --plot --out rep_config.json
输出文件rpe_config.json内包含如下内容
{
"delta":1.0,
"delta_unit":"m",
"plot":true,
"pose_relation":"angle_deg",
"verbose":true
}
当下一次我们希望运行evo_rep命令并指定这些参数时我们只需要运行如下命令
evo_rpe groundtruth.txt estimate2.txt -c rpe_config.json
全局设置
可以显示、更改、重置存储在settings.json 文件内的evo全局设置
evo_config show
运行这条命令将打印settings.json文件内容,如果使用–brief选项的话
将会显示参数内容的简要信息。
evo_config set
使用这条命令设置单个或多个参数值,被设置的参数将在默认情况下被使用,除非运行命令时采用-c/–config指定了其他配置文件。
示例
如果你的配置文件如下所示
{
"logfile_enabled":false,
"plot_export_format":"pdf",
"plot_figsize":[
8,
8
]
}
运行
evo_config set plot_export_format png logfile_enabled true plot_figsize 10 9
将会被设置成
{
"logfile_enabled":true,
"plot_export_format":"png",
"plot_figsize":[
10,
9
]
}
每次运行时都会返回true或者false表明设置参数操作是否成功。
evo_reset
该命令将evo设置为默认的全局参数
evo_traj
evo_traj 是处理多条轨迹的主要工具,主要功能有
- 显示一些信息
- 画图
- 验证数据是否合法
- 转换数据到其他格式
- 数据变换
基础用法
evo_traj 可以打开你所需要的所有轨迹数据,通过参数指定的数据结构(tum、euroc、kitti等)。例如:
evo_traj tum traj_1.txt traj_2.txt traj_3.txt
对如ros数据包,需要指定.bag文件以及需要打开的轨迹数据的topic名称,例如:
evo_traj bag ROS_example.bag groundtruth ORB-SLAM S-PTAM
你也可以用–all_topic 选项来加载ros包中所有的轨迹信息。
在这些轨迹中,可以使用–ref 选项将其中一个标记为参考轨迹。
evo_traj bag ROS_example.bag ORB-SLAM S-PTAM --ref groundtruth
如果你想要使用对齐的功能则必须要指定一条轨迹为参考轨迹。
检查轨迹数据
默认情况下,evo只会打印一些如下所示的重要信息。
name: groundtruth
infos: 12765 poses,304.207m path length,889.019s duration
使用-v/–verbose选项将会改变输出格式,改变后输出信息如下
name: groundtruth
infos
duration (s) 889.01894474
nr. of poses 12765
path length (m) 304.206897009
pos_end (m) [ -3.32159757 -4.64051651 32.7839329 ]
pos_start (m) [-0.00489994 -0.01775981 -0.01375532]
t_end (s) 1502793459.3
t_start (s) 1502792570.28
使用–full_check选项将会得到最详细的输出信息,并且会对一些数学和逻辑上的问题进行检查。比如四元数有没有归一化、时间戳是不是递增的,具体输出格式如下:
name: groundtruth
infos
duration (s) 889.01894474
nr. of poses 12765
path length (m) 304.206897009
pos_end (m) [ -3.32159757 -4.64051651 32.7839329 ]
pos_start (m) [-0.00489994 -0.01775981 -0.01375532]
t_end (s) 1502793459.3
t_start (s) 1502792570.28
checks
SE(3) conform yes
array shapes ok
nr. of stamps ok
quaternions ok
timestamps ok
stats
v_avg (km/h) 1.411572
v_avg (m/s) 0.392103
v_max (km/h) 3.038775
v_max (m/s) 0.844104
v_min (km/h) 0.001567
v_min (m/s) 0.000435
画图
添加-p或–plot选项可以将轨迹绘制出来。你可以通过–plot_mode来指定绘制轨迹的格式,如–plot_mode xz 便是x和z轴构成的二维视图,而–plot_mode xyz则是三维视图。当然无论在任何模式下,tab3的页面中都会将x,y,z轴数据独立的绘制出来,tab3中则会把roll、pitch、yaw数据独立的绘制出来。
对齐和变换
几何对齐
如果你采用–ref选项指定了一条参考轨迹,你可以采用如下的方法将其他轨迹和参考轨迹进行对齐。
- –align 或 -a = SE3变换对齐(旋转+平移)
- –align --correct_scale 或 -as = Sim3变换(旋转+平移+尺度)
- –corrent_scale 或 -s = 仅有尺度矫正
alignment_demo.py脚本展示了不同脚本之间的区别。此外还支持对齐
前n个路径的位姿,通过--n_to_align
选项,如 --n_to_align 100
注意:在v1.5.0以上的版本中,提供了一个简单的原点对齐的方法,可以通过--align_origin
来调用。
时间对齐
通过搜索参考轨迹和其他轨迹间的最佳匹配时间戳来完成时间对齐。所有的轨迹都会变换为最佳匹配的时间戳,如果找不到匹配项则会引发错误,可以使用如下选项完成功能。
--t_offset
:添加恒定的时间戳偏移-默认0.0s--t_max_diff
:数据关联的最大时间戳误差-默认0.01s
所有的几何对齐的命令执行中都会自动进行进行实践对齐,若想仅仅进行时间对齐则使用选项 --sync
变换
你也可以变换轨迹位姿通过自动的三维变换,为此你需要一个.json文件,其中包含旋转和平移信息,格式如下:
{
"x": 0.0,
"y": 0.0,
"z": 0.0,
"qx": 0.0,
"qy": 0.0,
"qz": 0.0,
"qw": 1.0
}
如果变换操作是在世界坐标系下的使用选项 --transform_left<json file>
,如果变换操作是在局部坐标系下的使用选项 --transform_right<json file>
。
数据格式
轨迹
程序支持从不同格式的文件中加载轨迹信息。你可以指定希望使用哪一种格式解析文件。例如:evo_traj tum ...
或evo_traj kitti ...
。
技巧:如果你不知道在你的算法中应该使用什么格式,推荐使用TUM格式的数据,应该该格式较为简单且容易转换成其他格式并且不需要ROS的支持
ROS数据包
注意:需要安装ROS
支持读取bag包中格式为 geometry_msgs/PoseStamped
, geometry_msgs/TransformStamped
,geometry_msgs/PoseWithCovarianceStamped
和nav_msgs/Odometry
的数据。evo只会读取位姿数据,协方差等数据是不会被使用的。
更多请参考:
- http://wiki.ros.org/Bags
- http://docs.ros.org/api/geometry_msgs/html/msg/PoseStamped.html
- http://docs.ros.org/api/geometry_msgs/html/msg/PoseWithCovarianceStamped.html
- http://docs.ros.org/api/geometry_msgs/html/msg/TransformStamped.html
- http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html
euroc -EuRoC MAV 数据集格式
EuRoC数据集内的每一个序列都有一个.csv文件,里面存储了变量的真实信息。对我们来说,只有第一列的轨迹信息是重要的(时间戳、位置信息、旋转信息)
你可以在序列文件夹中的如下位置找到该文件:
<sequence>/mav0/state_groundtruth_estimate0/data.csv
由于文件中存在许多不需要的信息,因此如果使用EuRoC数据集,通常需要转换成其他格式如TUM保存轨迹。
更多内容参阅:http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#the_euroc_mav_dataset
kitti -KITTI 数据集格式
实际上这不是真正意义上的轨迹格式,因为它没有时间戳,仅包含位姿信息。
这意味着你必须小心当你想要比较两个文件在这种格式与一个指标,因为位姿的数量必须是完全相同的。
该文件包含齐次变换矩阵的前三行,例如对于如下的齐次变换矩阵
a b c d
e f g h
i j k l
0 0 0 1
将会在文件中以以下的形式表达:
a b c d e f g h i j k l
更多内容参阅:http://www.cvlibs.net/datasets/kitti/eval_odometry.php
tum -TUM RGB-D数据集轨迹格式
每一行有8个数据,包括了时间戳、位置、四元数形式的角度数据。
timestamp x y z q_x q_y q_z q_w
更多信息参阅:https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats
保存或导出成其他格式
使用evo_traj
命令和--save_as_<other_format>
选项进行格式转换。
下面的转换组合是可行的:
–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 |
例子:
# 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)
# and so on...
没有--save_as_euroc
选项是因为该格式包含了很多其他用不到的信息。
指标
下面的内置命令行可以用于评估轨迹和参考轨迹的指标。
- evo_ape
- evo_rpe
从概念上讲,命令行的语法规则如下:
command format reference-trajectory estimated-trajectory [options]
对于ros包文件,命令行格式有一点点不同
command bag bagfile-path reference-topic estimated-topic [options]
更多的信息可以通过evo_rpe euroc --help命令获得。
教程
有一个较好的交互式的教程帮助理解程序内的内容,你可以从这里找到它。这是用jupyter写的,需要配置一下对应的环境。
evo_ape
绝对位姿误差,常用于绝对轨迹误差。给出了姿态关系,直接比较了估计和参考的相应姿态。然后,对整个轨迹进行统计计算。这对于测试轨迹的全局一致性是有用的。
evo_rpe
相对位姿误差不是直接比较绝对位姿,而是比较动作(“位姿增量”)。这个度量给出了关于局部精度的见解,即偏移。例如,可以计算每米的平移或旋转漂移:
evo_rpe tum reference.txt estimate.txt --pose_relation angle_deg --delta 1 --delta_unit m
画图
evo提供几种设置使得用户能够更改绘图的外观。
在命令行中可以使用 --plot
或--plot_mode
来设置绘图参数,但是更加通用的方法是通过evo_config set
来进行设置,可以通过evo_config show
命令来显示当前的配置参数。
下面是一个练习例子,展示了如何通过改变绘图参数设置来提高图片的质量。
1.设置绘图背景及栅格
默认绘制图片设置为黑色的背景,这在显示器上看上去较好但是不适合打印。你可以通过改变参数来设置成白色背景加栅格的形式,如
evo_config set plot_seaborn_style whitegrid
2.设置字体格式和大小
默认的字体并不适合于论文,程序中默认采用等线字体。我们可以通过下面的命令改变字体格式和大小。
evo_config set plot_fontfamily serif plot_fontscale 1.2
为了匹配字体,我们还可以设置线宽
evo_config set plot_linewidth 1.0
还可以更改其他的一些东西,如参考轨迹的线形
evo_config set plot_reference_linestyle -
3.设置默认图片大小
你也可以调整默认的输出图片大小,例如设置图片的宽度为5、高度为4.5
evo_config set plot_figsize 5 4.5
4.使用latex渲染器
因为我们使用latex编写代码,我们同时希望采用Latex来渲染字体。
evo_config set plot_usetex
5.重置默认设置
evo_config reset
坐标轴标记
坐标轴的尺度缩放
evo_config set plot_axis_marker_scale 0.1