OpenCV摄像机校准(计算[R | T]),使用直线代替点

OpenCV摄像机校准(计算[R | T]),使用直线代替点,opencv,camera-calibration,robot,Opencv,Camera Calibration,Robot,我正在研制一个足球机器人。 我的机器有两个摄像头,而地面地图在球门前有6个可识别的点 我在做什么: 拍摄照片并获取固有参数焦距、畸变; 移动时,找到点并使用solvePnP获得[R | T]; 使用projectPoints获取其实际坐标。 正如我曾经尝试过的,在一个6*9的内角棋盘上,10分效果很好,但只有5分,我得到了非常糟糕的结果,甚至没有考虑到当视线不好或球挡住视线时 我正在考虑预先设置一个好的[R | T],使其具有完整地图的良好视野,并且在移动时,利用其旧的[R | T]作为初始近

我正在研制一个足球机器人。 我的机器有两个摄像头,而地面地图在球门前有6个可识别的点

我在做什么:

拍摄照片并获取固有参数焦距、畸变; 移动时,找到点并使用solvePnP获得[R | T]; 使用projectPoints获取其实际坐标。 正如我曾经尝试过的,在一个6*9的内角棋盘上,10分效果很好,但只有5分,我得到了非常糟糕的结果,甚至没有考虑到当视线不好或球挡住视线时

我正在考虑预先设置一个好的[R | T],使其具有完整地图的良好视野,并且在移动时,利用其旧的[R | T]作为初始近似值,以帮助获得更好的[R | T]。但是过了一段时间,由于[R | T]变得不太准确,我不太可能得到近似值

另一个解决方案是,尝试使用这些线来生成[R | T]。例如,在检测到直线的一组点后,将其与x=0或y=0关联。。。并用它们来计算[R | T],这可能会产生更好的结果。有办法做到这一点吗


还是我全搞错了?任何想法或帮助都将不胜感激

我很想参与,但我对设置有一些疑问:

一,。我假设摄像机固定在机器人上。然后,[R | t]相对于场参考改变。您是否在现场跟踪上述点特征?在这种情况下,当机器人在场地周围移动时,它们的旋转和平移会发生变化

二,。您是否检查过线路对应的校准?这可能会给你的第二个建议一个想法

现在,假设我对第一项做了假设。尝试单独对每个摄像机进行摄像机标定,以首先获得镜头和切向畸变参数。当从运动中重新校准时,您希望将其固定。使用线条似乎更可行,因为它们可能对遮挡具有鲁棒性

我可以编辑此答案,以防您提供更多详细信息并丰富此讨论


我想将此作为评论,但我没有足够的信用。

您所描述的是某种稀疏的大满贯。我想知道你的机器人是有两只眼睛还是只有一只。在我看来,它只有一只眼睛。那么,是什么利用它的旧[R | T]作为初始近似值来帮助获得更好的[R | T]呢。意思是你的意思是初始pos和当前pos之间的[R|T]吗?我的意思是不断计算[R|T],因为它是一个视频输入。是的,但是,可能由于分数太少,结果根本无法使用;二,。我瞥了它一眼,它看起来确实很有趣;我还没有用两台相机都试过,但最终我会的。非常感谢你给我时间和想法!这实际上是一个非常有用的答案!在解决问题之前,我会一直打开它,并提供更多更新的细节。我没有将其与地面协调系统绑定,而是将其更改为与机器人视图中的相对位置相匹配,并将地面协调的计算留待后处理。