总是在用evo,总是搞不清楚一些东西。今天由于论文画图,总觉得有问题,翻了半天源码,特此记录。
指令分析:
evo_rpe tum gt.txt est.txt --t_max_diff 0.1 --time_offset 0.05 --n_to_align 100 -a --delta 1 --delta_unit m
参数解释:
如果是rpe,则n_to_align并没有用,-a也没有用,应为用的是相对值。
- 代码会对 est 的trajectory进行增加 time_offset 操作,
- 加上time_offset 后,对 est 轨迹的每个点,看在 time_offset 范围内,ref 轨迹中是否有相对应的点。如果有,则有一个有效的pair。这个pair中,est中的点可能对应 ref 中的一个点,如果找不到, est 中的点就不参与计算。所以,ref的轨迹如果频率较低,可能很多 est 中的点无法匹配上。
- 对于rpe,从pari中选取一系列的索引,进行计算相对值。
如果delta_unit 是m,则从每个pair第一个位置开始,进行索引,找1m之后的位置,计算旋转/平移的增量误差。如果单位是frame,则跳过真么多“帧”后进行处理。
所以,可以看出:
尽量实现时间戳同步,这里的 t_max_diff 并不是 “自动寻找” 最优的配准。而是在 time_offset 的基础上,每个 est 在这个范围内去找 ref 的时间戳。
具体能有多少对匹配?取决于:
- ref 和 est 中最少的trajectory,然后 est 中每个点在 ref 中能否找到对应,所以数量会更少。
看来对evo的许多理解并不正确,我一直以为会自动在 --t_max_diff 范围内寻找最优的 alignment。