我正在做一个最后一年的项目,该项目涉及找到螺钉的位置和方向,该螺钉必须由具有螺丝刀作为末端执行器的机器人手打开。
我在 matlab 中开发了一个程序来检测螺丝并返回其质心,我还继续校准相机,我已经获得了内在和外在参数。
如何获得旋转和平移矩阵以提取螺钉的欧拉角?
我正在做一个最后一年的项目,该项目涉及找到螺钉的位置和方向,该螺钉必须由具有螺丝刀作为末端执行器的机器人手打开。
我在 matlab 中开发了一个程序来检测螺丝并返回其质心,我还继续校准相机,我已经获得了内在和外在参数。
如何获得旋转和平移矩阵以提取螺钉的欧拉角?
我试图想象检测到的螺丝是如何表示的。即使你有质心点和形状的一些表示,你也需要估计螺钉所在的平面。仅考虑螺钉的椭圆形状,这种估计将非常不准确,椭圆形状通常很小,并且其透视甚至仿射变形在图像中可以忽略不计。
此外,我想到了一个小小的歧义,请看图片(红点是质心):
尽管两个螺钉可以用相同的椭圆表示(直到质心位置),但它们围绕垂直轴的旋转是不同的。
也许你意识到这一点。
有关检测到的螺钉表示和场景的更多信息将有助于获得建设性的答案。
我认为 Hartley & Zisserman: "Multiple View Geometry" 涵盖了姿势估计问题。当然,当您有更多视图(例如立体相机)时,估计对象姿势会更加准确。
你说你有外部参数。如果这是真的,那么你已经有了姿势,因此,位置和旋转(这个话题通常会有些混乱,所以检查这个答案来澄清事情。)。
外参矩阵和位姿矩阵一样,一个的矩阵:
获得平移是微不足道的,如果你想从旋转矩阵中获得欧拉角,那么你只需要一个转换。查看此页面以进行转换。
四元数的使用也很常见。将矩阵转换为四元数很容易,然后从四元数中获取角度也很容易。我使用euaclideanspace来解决这种 3D 变换的数学问题。
我的理解是,您不能从单个圆锥曲线计算单应性(圆锥曲线是圆的投影,在这种情况下是圆螺钉的边缘)。当传感器与另一个平面(在您的情况下为螺钉头部的平面)之间的相机校准和单应性已知时,您可以计算相机相对于平面的方向和位置(反之亦然)。
但是,您可以从四个已知点估计单应性。如果您有槽/平头螺钉,则很难准确估计螺钉的位置和方向,因为与点的距离相比,槽角的测量误差会相对较大。如果你有十字头,四个已知点可以更分散,单应性估计和位置/方向估计会更准确。
您很可能结合有关槽角点和螺钉边缘(圆锥)的知识来形成更好的单应性估计。
最近有一篇关于用不同技术估计单应性的论文。请注意,在许多情况下,特定的单应性估计方法不起作用。例如,该论文描述了一种从点和线计算单应性的方法,但它没有警告您该点不能位于同一条线上。
我一直推荐Liljequist 的硕士论文作为很好的介绍论文,介绍如何在已知相机校准和单应性的情况下估计相机位置。正如 Libor 所建议的,Hartley 和 Zisserman 的《Multiple View Geometry》是一本关于相机几何及其相关算法的好书,但与基本算法所需的内容相比,它也相当沉重。