veo 学习笔记

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

pic

注意:在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/PoseWithCovarianceStampednav_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
bagyesyesyes
eurocyesyesyes
kittinoyesno
tumyesyesyes

例子:

# 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 

二维ROS地图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值