DIY基于摄像头的激光测距仪

上传人:汽*** 文档编号:512276608 上传时间:2023-05-05 格式:DOC 页数:38 大小:1.10MB
返回 下载 相关 举报
DIY基于摄像头的激光测距仪_第1页
第1页 / 共38页
DIY基于摄像头的激光测距仪_第2页
第2页 / 共38页
DIY基于摄像头的激光测距仪_第3页
第3页 / 共38页
DIY基于摄像头的激光测距仪_第4页
第4页 / 共38页
DIY基于摄像头的激光测距仪_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《DIY基于摄像头的激光测距仪》由会员分享,可在线阅读,更多相关《DIY基于摄像头的激光测距仪(38页珍藏版)》请在金锄头文库上搜索。

1、DIY基于摄像头的激光测距仪 Rockets文章来源: RoboticFan 更新时间:2021-5-11 22:10:33 打印此文浏览数:315097前言本文是由RoboticFan 网友Rockets翻译的一篇由国外 机器人爱好者 撰写的激光测距仪的 文章。小编认为这篇文章具有相当的实用型和可操作性,发散一下思维能力,可以发现有很多应用。介绍有很多现成的测距组件包括超声波、红外线、甚至是激光测距仪。这些设备运行的很好,但是对于飞行机器人来说,重量是一个主要考虑因素。一个可行的方法是增加现有组件的功能, 并安装在机身上。例如微型空中机器人的有效载荷是100g。它能利用USB连接的摄像头或m

2、ini无线摄像头执行视觉任务,例如避障等。更好的是,如采用两个摄像头,能提供立体的机器视觉,这样能增强避障性能,因为双镜头提供了视觉深度。但缺点是需要增加 另外一个摄像头的重量。这篇文章就是讨论如何利用一个激光笔和一个摄像头来提供一个单 镜头机器视觉和测距的。这个工程很大一局部是基于下面这个教程的 :/ eng.buffalo.edu/ubr/ff03laser.php工作原理下列图显示了如何将激光点投射到目标物上,并在摄像头上显示。摄像头和激光点的距离是可以通过计算而得出的。 公式很简单,因此这个技术在需要很快运行的机器视觉应用上是适合 的。CameraTargetLASER介绍一下工作原理

3、。 一束激光被投射到目标物上, 并在摄像头上被显示。 激光束被认为是理想的平行于摄像头的中心光轴。激光点由摄像头的其余局部所捕获。一个简单的计算就是寻找最亮点。如果设激光点就是这个场景的最亮点似乎在室内我的激光发射器确实是最亮的,那么这个点的位置在图帧中的位置是确定的。然后我们只需要计算这个点在沿着y轴的距离,就能计算出目标物离摄像头的距离,激光点距离中心越近,离目标物越远。如同公式所示,距离 D是可以被计算出来的。tan0为了计算这个等式,我们需要知道激光器和摄像头之间的距离h,这是个常数,还有角度,角度可以计算。6 = pfc * rpc + roWhere:pfc = Number of

4、 Pixels From Center of Focal Planerpc = Radians per pixel pitchro = Radian offset (compensates for allignment errors)其中:pfc =从焦平面到中心的像素数量rpc =单个像素的弧度ro =弧度补偿(弥补对齐错误)代入上式,我们得到:D =tan (pfcrpc + ro)这样,从图像中就能将焦平面到激光点像素数计算出来。那其他的常数怎么办呢?我们需要执行一个校准来得到这些数据。为了校准这个系统,我们需要收集一系列测量的数据,每次测得的目标物的距离和这个激光点离中心点的像素数。数

5、据如下校正数据pixels from centeractual D (cm)1032981456558557149904510941127391593718935218h和真实距离计算出真实的角使用下面的公式,我们能够利用激光器和摄像头之间的距离度:Where:鼠.=Actual angleDactual = Actual distance to target (measured)0 actual =真实角度Dactual =真实距离测量得出现在我们有了公式中的每个数值,我们可以利用一个关系式来计算点离中点的像素数。我用了一个线性关系式。这个公式看起来很有用,从我的校正数据中,我计算出:Off

6、set (ro) = -0.056514344 radiansGain (rpc) = 0.0024259348 radians/pixel使用:D -tan (pfcrpc + ro)卜表是列举了根据上面 ro和rpc值计算出的距离值,实际距离值和误差:实际和计算的测量数据pixels from centercalc D (cm)actual D (cm)% error10329.84292.888141.4645-7.876557.5558-0.785575.81716.774993.57903.9645110.851091.7041135.941277.0439153.27159-3.6

7、037175.66189-7.0635205.70218-5.64所需零部件我的测距仪没有多少部件。 我使用一块硬纸板来固定激光发射器和摄像头。摄像头和激光发射器被平行的布置在一起。我组装的测距仪是这样的软件我通过两个方式编写了这个软件,一个是vc+ , 一个是VB。你能发现VB版本的软件会比VC + +的软件更容易一些,但是各有取舍。VC+版本能够自由的参加其他软件中?VB版本需要第三方软件支持(在Visual Studio 中)Visual Basicvb_laser_ranger.zip这里可以下载到我的 VB版本软件。要使用上面的程序,你必须要安装VideoOCX ActiveX 控件

8、主程序如下:P Private Sub exit_Click()only if running.:If (TimelEnabled) ThenIIiTimer1.Enabled = FalseStop TimerVVideoOCX.StopVideoOCX.CloseI I :End IfI r i iEnd End SubIJ iPrivate Sub Start_Click() Init VideoOCX Control, allocate memory and I :start grabbing IIIf (Not Timer1.Enabled) Then;Start.Caption =

9、 StopIIi Disable internal error messages in VideoOCXVVideoOCX.SetErrorMessages Falsei r i Init controlIf (Not VideoOCX.Init) Then:Init failed. Display error message and end subiMsgBox VideoOCX.GetLastErrorString, vbOKOnly, VideoOCX Error:,End;Elsei1 Allocate memory for global image handlecapture_ima

10、ge = VideoOCX.GetColorImageHandle result_image =I-I VideoOCX_Processed.GetColorImageHandle LTTimer1.Enabled = True Start capture timerStart Capture modeIf (Not VideoOCX.Start) Then- Start failed. Display error messageandend subMsgBox VideoOCX.GetLastErrorString,j vbOKOnly, VideoOCX Error;,End!End If

11、End IfElseStart.Caption = StartTimerl.Enabled = False Stop TimerVideoOCX.StopVideoOCX.CloseEnd IfEnd SubPrivate Sub Timer1_Timer()Timer for capturing - handles videoOCXToolsDim matrix As VariantDim height, width As IntegerDim r, c As IntegerDim max_r, max_c As IntegerDim max_red As IntegerDim gain,

12、offset As VariantDim h_cm As VariantDim range As IntegerDim pixels_from_center As IntegerCalibrated parameter for pixel to distance conversion gain = 0.0024259348offset = -0.056514344h_cm = 5.842max_red = 0Capture an imageIf (VideoOCX.Capture(capture_image) ThenVideoOCX.Show capture_imageMatrix tran

13、sformation initializationmatrix = VideoOCX.GetMatrix(capture_image)height = VideoOCX.GetHeight width = VideoOCX.GetWidthImage processing codeThe laser dot should not be seen above the middle row;(with a little pad):FFor r = height / 2 - 20 To height - 1!iiIIj Our physical setup is roughly calibrated

14、 to make the laserdot in the middle columnsdont bother lookngtoo far away:For c = width / 2 - 25 To width / 2 + 24IIIIi Look for the largest red pixel value inj the scene (red laser):If (matrix(c, r, 2) max_red) Thenimax_red = matrix(c, r, 2) :max_r = r;i-.max_c = c.EEnd IfNext cjNext r:iIIII Calculate the distance for the laser dot from middle offram

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号