本人与去年暑假期间,照着rm大佬们的思路尝试复现球状模型代码,发现solvePNP得到的装甲板rvec跳变严重,不利于得到准确的装甲板旋转角度。
这里,我提出我糟糕的解决方案:
对于这个问题,已知在同一距离下,装甲板在图像中的上下两宽wu、wd在装甲板绕yaw轴旋转会有明显变化,我们可以尝试用这个wu、wd建立角度θ相关的方程。我们设装甲板正对相机时,图像中装甲板的宽度w0,于是乎,可否将w0作为一个装甲板的角度基准?那么我们假设wu、wd、w0与θ成关系如下,
w=(wd+wu)/2
θ0=w0/w0* PI/2 = PI/2
θ=w/w0* PI/2
这样要解决的问题就变成了:如何得到这个w0(此处不考虑roll,因为若要考虑roll的话,不如去解决rvec的跳变问题而不是使用此法)?我的想法是,w0与装甲板离相机的距离d有关,所以我拿着装甲板,从5cm到300cm,将装甲板正对相机逐渐拉远,得到了如下图的曲线:
(这里的纵坐标其实是高度......不过一样的)
由此可得常数a,且w0=a/d。
所以
θ=w*d/a*PI/2
此糟糕的方法我也觉得抽象,但我解决了跳变,直观上解出来的角度与实际角度相差不大,再加一层滤波就行了。
在此叠个甲,我数学不太行,没有足够的几何知识,只能假设w与θ呈线性,所以求大佬们轻喷。希望这篇博客可以帮到有需要的人,以及得到佬们的赞赏或者建议,谢谢!