单目slam初始世界坐标系变换
monocular slam initial world coordinate system transformation
单目slam的初始坐标系是随机且尺度未知的
但我想知道如何将初始坐标系转换为另一个坐标系(从标记,如棋盘)。
有没有论文或者博客
非常感谢!
这是单目设置中的一个难题,IMU 对此给出了很好的结果(例如 here)。但看起来你目前除了相机之外没有任何传感器。在这种情况下,使用棋盘或标记来估计比例并不是理想的解决方案,因为它需要您在初始化时对相机的运动进行大量控制。例如,想到的一种简单方法是:保持棋盘完全垂直,并将相机固定在 N 的距离,其轴与棋盘正交。现在,确保将相机移动到与电路板完全平行的时间 t。在此时间间隔内,您在板上检测到的每个特征都将与相机保持 N 的距离。这意味着,如果它们在你的 SLAM 坐标中的深度是 s,那么你的比例将是 N/s。然而,保持运动完全平行是很尴尬的。我希望(随时纠正我)其他基于标记的方法同样糟糕。
更好但更耗时(从开发的角度来看)的选择是使用基于模型的跟踪器(丰富的文献,想到的一个非常古老的例子是 pwp3D)。在您的环境中取一个已知对象(一个您可以在 CAD 模型中轻松获得的简单对象,其中的比例是真实比例)。现在,您的问题是您的 SLAM 引用与对象 space 的引用对齐。为此,您可以在原始图像中使用轮廓检测,投影 CAD 模型并尝试尽可能地对齐它们(请注意,您必须在足够数量的图像中使用不同的视角对齐这些轮廓类似捆绑调整的方式)。
另一种可能性是使用神经网络来预测深度(关于该主题的丰富文献),但估计通常不太精确。
解决与地面实况坐标的对齐问题:
我从你的评论中了解到你想将你的 SLAM 坐标与以前已知的参考对齐。我认为研究 georeferenced 的 SLAM 系统可能对您有益,因为它们在初始化时面临与您相同的问题。现在,回到手头的问题,我会这样做:
让我们记下 G 您想要的坐标系,让 S 成为 SLAM 参考。您的 SLAM 算法将从标记重建特征,我们称之为 f'_1,f'_2,f'_3
。这些将对应于标记上的特征 f_1,f_2,f_3
。重要的是您可以根据它们的外观(纹理或颜色等)正确匹配这些特征。一旦你有了这些匹配,问题就是找到相似性 sim=[sR sT;0 1]
(使用 matlab/octave-like 符号),其中 R 是旋转,T 是翻译,s 是比例参数。您现在应该能够将您的问题表述为某种
argmin_{R,T,s} sum(d(f'_i, sim*f_i))
其中 sum 对索引 1,...,N 运行(图中 N=3 ),并且 d 表示参考 G 中的特征与其在参考中的匹配之间的距离(我会说,欧几里得) S。当然,这是一个宽泛的表述,但我认为它可以作为您解决方案的一般基础。但是请注意,如果您可以在 R,T,s 上进行先验,然后再最小化此类成本函数,那将会好很多,因为针对此类问题的最小化算法往往陷入局部极小值。
单目slam的初始坐标系是随机且尺度未知的
但我想知道如何将初始坐标系转换为另一个坐标系(从标记,如棋盘)。
有没有论文或者博客
非常感谢!
这是单目设置中的一个难题,IMU 对此给出了很好的结果(例如 here)。但看起来你目前除了相机之外没有任何传感器。在这种情况下,使用棋盘或标记来估计比例并不是理想的解决方案,因为它需要您在初始化时对相机的运动进行大量控制。例如,想到的一种简单方法是:保持棋盘完全垂直,并将相机固定在 N 的距离,其轴与棋盘正交。现在,确保将相机移动到与电路板完全平行的时间 t。在此时间间隔内,您在板上检测到的每个特征都将与相机保持 N 的距离。这意味着,如果它们在你的 SLAM 坐标中的深度是 s,那么你的比例将是 N/s。然而,保持运动完全平行是很尴尬的。我希望(随时纠正我)其他基于标记的方法同样糟糕。
更好但更耗时(从开发的角度来看)的选择是使用基于模型的跟踪器(丰富的文献,想到的一个非常古老的例子是 pwp3D)。在您的环境中取一个已知对象(一个您可以在 CAD 模型中轻松获得的简单对象,其中的比例是真实比例)。现在,您的问题是您的 SLAM 引用与对象 space 的引用对齐。为此,您可以在原始图像中使用轮廓检测,投影 CAD 模型并尝试尽可能地对齐它们(请注意,您必须在足够数量的图像中使用不同的视角对齐这些轮廓类似捆绑调整的方式)。
另一种可能性是使用神经网络来预测深度(关于该主题的丰富文献),但估计通常不太精确。
解决与地面实况坐标的对齐问题:
我从你的评论中了解到你想将你的 SLAM 坐标与以前已知的参考对齐。我认为研究 georeferenced 的 SLAM 系统可能对您有益,因为它们在初始化时面临与您相同的问题。现在,回到手头的问题,我会这样做:
让我们记下 G 您想要的坐标系,让 S 成为 SLAM 参考。您的 SLAM 算法将从标记重建特征,我们称之为 f'_1,f'_2,f'_3
。这些将对应于标记上的特征 f_1,f_2,f_3
。重要的是您可以根据它们的外观(纹理或颜色等)正确匹配这些特征。一旦你有了这些匹配,问题就是找到相似性 sim=[sR sT;0 1]
(使用 matlab/octave-like 符号),其中 R 是旋转,T 是翻译,s 是比例参数。您现在应该能够将您的问题表述为某种
argmin_{R,T,s} sum(d(f'_i, sim*f_i))
其中 sum 对索引 1,...,N 运行(图中 N=3 ),并且 d 表示参考 G 中的特征与其在参考中的匹配之间的距离(我会说,欧几里得) S。当然,这是一个宽泛的表述,但我认为它可以作为您解决方案的一般基础。但是请注意,如果您可以在 R,T,s 上进行先验,然后再最小化此类成本函数,那将会好很多,因为针对此类问题的最小化算法往往陷入局部极小值。