关于#EVO评估SLAM#的问题,如何解决?

使用EVO评估SLAM时,用的是TUM数据集,出现found no matching timestamps between reference and CameraTrajectory.txt with max. time diff 0.01 (s) and time offset 0.0 (s),意识是两个文件的时间戳不对齐,请问该如何解决

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    根据问题描述,可以看出这是一个时间戳校准的问题,解决方法如下:

    1. 首先需要了解一下TUM数据集的文件格式。CameraTrajectory.txt是TUM数据集中相机运动轨迹的文件,其中每一行表示一个帧的相机位姿及对应的时间戳;EVO评估SLAM时需要使用相应时间戳对齐两个文件。

    2. 首先尝试将两个文件分别读入到程序中,并将它们转化为Python中的numpy数组,方便进行计算和处理。

    3. 一种校准方法是使用线性插值,对TUM数据集中的时间戳进行线性插值,使其与EVO评估SLAM使用的时间戳保持一致。这可以通过以下代码实现:

    import numpy as np
    
    # read CameraTrajectory.txt
    camera_traj = np.loadtxt('CameraTrajectory.txt')
    # read timestamps from EVO evaluation results
    evo_timestamps = np.loadtxt('evo_result.txt')[:, 0]
    
    # interpolate timestamps in camera_traj
    timestamps = camera_traj[:, 0]
    pos = 1
    for i in range(len(evo_timestamps)):
        if pos >= len(timestamps):
            break
        while evo_timestamps[i] > timestamps[pos]:
            pos += 1
            if pos >= len(timestamps):
                break
        if pos >= len(timestamps):
            break
        alpha = (evo_timestamps[i] - timestamps[pos-1]) / (timestamps[pos] - timestamps[pos-1])
        camera_traj[i, 0] = evo_timestamps[i]
        camera_traj[i, 1:] = alpha * camera_traj[pos, 1:] + (1 - alpha) * camera_traj[pos-1, 1:]
    
    1. 上述代码中,首先读入两个文件,然后在CameraTrajectory.txt的时间戳列(第一列)执行线性插值,使其与evo_result.txt中的时间戳保持一致。其中,变量pos记录了当前时间戳在CameraTrajectory.txt中的位置,alpha表示需要插值的权重。

    2. 最后将插值后的CameraTrajectory.txt保存到新文件中,并用该文件重新运行EVO评估SLAM,正常情况下应该可以成功运行。

    3. 如果线性插值后的CameraTrajectory.txt仍然无法满足要求,可以调整时间戳对齐的方式,并尝试其他校准方法,例如Kalman滤波、位姿图优化等。

    综上所述,该问题的解决方法是使用线性插值对TUM数据集中的时间戳进行校准,使其与EVO评估SLAM使用的时间戳保持一致。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^