简介:基于摄像头的激光测距仪是利用计算机时觉得算法识别摄像头视野内的激光点,并计算激光点所处像素位置距离视野中心位置的y偏移,进而测出目标物体的距离。
文章来源:www.RoboticFan.com,作者:Rockets。本文只保留了部分内容。
下图显示了如何将激光点投射到目标物上,并在摄像头上显示。摄像头和激光点的距离是可以通过计算而得出的。公式很简单,因此这个技术在需要很快运行的机器视觉应用上是适合的。
介绍一下工作原理。一束激光被投射到目标物上,并在摄像头上被显示。激光束被认为是理想的平行于摄像头的中心光轴。激光点由摄像头的其余部分所捕获。一个简单的计算就是寻找最亮点。如果设激光点就是这个场景的最亮点(似乎在室内我的激光发射器确实是最亮的),那么这个点的位置在图帧中的位置是确定的。然后我们只需要计算这个点在沿着y轴的距离,就能计算出目标物离摄像头的距离,激光点距离中心越近,离目标物越远。
\[D=h/tan(\theta)\]
如同公式所示,距离D是可以被计算出来的。
为了计算这个等式,我们需要知道激光器和摄像头之间的距离h,这是个常数,还有角度,角度可以计算。
\[\theta=pfc*rpc+ro\]
其中:
$$pfc$$ =从焦平面到中心的像素数量
$$rpc$$ =单个像素的弧度
$$ro$$ =弧度补偿(弥补对齐错误)代入上式,我们得到:
\[D=frac{h/tan(pfc*rpc+ro)}\]
这样,从图像中就能将焦平面到激光点像素数计算出来。那其他的常数怎么办呢?我们需要执行一个校准来得到这些数据。
为了校准这个系统,我们需要收集一系列测量的数据,每次测得的目标物的距离和这个激光点离中心点的像素数。数据如下
校正数据
pixels from center
actual D (cm)
103
29
81
45
65
58
55
71
49
90
45
109
41
127
39
159
37
189
35
218
使用下面的公式,我们能够利用激光器和摄像头之间的距离h和真实距离计算出真实的角度:
\[\theta_(actural)=arctan(h/D_(actural))\]
其中:
$$\theta_(actural)$$=真实角度
$$D_(actural)$$=真实距离(测量得出)现在我们有了公式中的每个数值,我们可以利用一个关系式来计算点离中点的像素数。我用了一个线性关系式。这个公式看起来很有用,……
从我的校正数据中,我计算出:
Offset (ro) = -0.056514344 radians
Gain (rpc) = 0.0024259348 radians/pixel
使用:\[D=frac{h/tan(pfc*rpc+ro)}\]
下表是列举了根据上面ro和rpc值计算出的距离值,实际距离值和误差:
实际和计算的测量数据
pixels from center
calc D (cm)
actual D (cm)
% error
103
29.84
29
2.88
81
41.46
45
-7.87
65
57.55
58
-0.78
55
75.81
71
6.77
49
93.57
90
3.96
45
110.85
109
1.70
41
135.94
127
7.04
39
153.27
159
-3.60
37
175.66
189
-7.06
35
205.70
218
-5.64
可以看出其误差很小,在可接受的范围内,通过更精确的取样,测距效果应该会更加理想。
过来帮顶了,了解一下,赞