在vrep做机器人视觉抓取实验时,需要用到深度相机,在vrep中深度相机的实现是使用vision_sensor(详细说明参考帮助文档的[V-REP User Manual -> Entities(scene objects and collections) -> scene objects -> vision sensors])。本文描述如何计算perspective_mode的相机内参。
相机内参
关于相机内参参考:相机针孔模型详解
vision_sensor相关参数
vision_sensor需要与内参相关的参要有:透视角(Persp. angle)以及分辨率(Resolution X/Y)。
内参计算
上图为相机针孔模型的示意图,vision_sensor参数中的透视角是指最大透视角,也就是$\angle{AEC}$
和$\angle{BED}$
中的最大值。
设最大透视角为 ∠ B E D \angle{BED} ∠BED。
图中主距为 O E OE OE,设分辨率为 ( r x , r y ) (r_x,r_y) (rx,ry)
设, f = O E , α = ∠ B E D , l x = B D , l y = A C , l x l y = r x r y = β f=OE, \alpha=\angle{BED}, l_x=BD, l_y=AC,\\\frac{l_x}{l_y}=\frac{r_x}{r_y}=\beta f=OE,α=∠BED,lx=BD,ly=AC,lylx=ryrx=β
则有,
l x / 2 f = tan α 2 \frac{l_x/2}{f} = \tan{\frac{\alpha}{2}} flx/2=tan2α
相机内参
a x = f d x = f l x / r x = f l x × r x = r x 2 tan α 2 a_x=\frac{f}{dx} =\frac{f}{l_x/r_x}=\frac{f}{l_x}\times r_x=\frac{r_x}{2\tan{\frac{\alpha}{2}}} ax=dxf=lx/rxf=lxf×rx=2tan2αrx
同理可以求得 r y = r x 2 tan α 2 r_y=\frac{r_x}{2\tan{\frac{\alpha}{2}}} ry=2tan2αrx
相机内参: K = [ a x 0 u 0 0 a y v 0 ] = [ r x 2 tan α 2 0 r x 2 0 r x 2 tan α 2 r y 2 ] K=\begin{bmatrix} a_x & 0& u_0 \\ 0 & a_y & v_0 \\ \end{bmatrix} =\begin{bmatrix} \frac{r_x}{2\tan{\frac{\alpha}{2}}} &0 & \frac{r_x}{2} \\ 0 &\frac{r_x}{2\tan{\frac{\alpha}{2}}} &\frac{r_y}{2} \end{bmatrix} K=[ax00ayu0v0]=[2tan2αrx002tan2αrx2rx2ry]