光电子课程设计 - 基于三角测量法的激光测距 - 图文

更新时间:2024-01-09 01:11:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

光电子课程设计:

基于三角测量法的激光测距

摘要:本文先对激光测距的种类及原理进行介绍,其次分析不同种类的优缺点。

确定制作测距仪器的制作方向。分析测量当中不同元器件存在的问题,寻找有效的解决方案,重点研究摄像头成像时存在误差的形成原因。根据研究得到的数据,对PC客户端的程序设计进行调整。利用程序尽可能减少由于硬件产生的误差。重点是设计出能确定光点的定位算法,通过对摄像头的定标、激光定位,达到实验数据与实际测量误差在10%以内。最后,提出对作品进行优化和系统功能提升计划

关键词:短距离、低成本、三角测量法

ABSTRACT: In this paper, the principle of laser ranging species and introduced first, followed by analysis of the advantages and disadvantages of different types. Production rangefinder to determine the direction of the production. Analytical measurements among different components of the problems, to find effective solutions to the causes errors in the presence of the camera focused on imaging. According to data obtained from studies on the client PC programming adjustments. The use of procedures to minimize errors due to hardware-generated. Focuses the light spot can be determined to design the location algorithm, through the camera calibration, laser positioning, to the experimental data and the actual measurement error is within 10%. Finally, the work in optimizing system functionality and Enhancement Programme

KEY WORDS: Short distance、Low cost 、Triangle measurement

目录

1、前言

1.1激光测距 1.2激光测距仪

1.3三角测量法激光测距简介 1.4设计目标

2、测距方案

2.1几种常用的测距方法 2.1.1手持激光测距仪 2.1.2望远镜式激光测距仪 2.2测距方案选定 2.3三角测量法

3、硬件模块设计

3.1激光发射模块设计 3.2信号接收模块设计 3.2.1摄像头定标 3.3激光出射角

4、PC程序设计

4.1摄像头调用 4.2光点定位

5、结论

前言

1.1激光测距

激光测距(laser distance measuring)是以激光器作为光源进行测距激光测距技术是一种集合了光学、计算机科学、机械设计等的高新技术。而根据激光工作的方式分为连续激光器和脉冲激光器。激光测距主要应用在远距离或者非接触情况下,如建筑桥梁、隧道挖掘等领域得到广泛应用。

1.2激光测距仪

激光测距仪是利用激光对目标的距离进行准确测定的仪器。激光测距仪在工作时向目标射出一束很细的激光,由光电元件接收目标反射的激光束,计时器测定激光束从发射到接收的时间,计算出从观测者到目标的距离。

激光测距仪主要分为手持激光测距仪、望远镜式激光测距仪和相位式激光测距仪。早期,激光测距仪广泛用于地形测量,战场测量,坦克,飞机,舰艇和火炮对目标的测距,测量云层、飞机、导弹以及人造卫星的高度等。它是提高高坦克、飞机、舰艇和火炮精度的重要技术装备。后来由于激光测距仪价格不断下调,工业上也逐渐开始使用激光测距仪,可以广泛应用于工业测控、矿山、港口等领域。

国内外已有不少公司有对激光测距仪进行研发,并且都能达到较高的精度,但价格较高,且短距离测量不准确。并且长距离的激光测距仪都会存在盲区,则当测量距离少于15米时,测量不准确。

1.3三角测量法激光测距简介

激光测距并不只依赖单一的技术。面对不同的测量环境,可以有不同的测量方案。例如,测量远距离的地形测量、矿石挖掘测量等,可以应用脉冲激光测量。而本项目则提出一个新的测量理念运用到短距离的测量情况。

三角测量法激光测距是将激光打到待测物体上时,利用摄像头接收画面,通过对感光位置的计量,测出空间距离。

1.4设计目标

本作品的测量精准度与摄像头像素成正比。而本设计的主要目的是运用低成本元器件制作出短距离激光测距仪。由于选有低成本元件,因此硬件的误差会存在明显。我们可以通过程序优化、摄像头标定、利用数据改良等方式尽量减少误差。

测距方案

实现测距的方式有多种,面对不同的测距情况可以选择不同的测距方案。而且实现各种方案的成本和复杂度有较大的区别。这些因素将对最终扫描方案的选取产生决定性影响。

2.1几种常用的测距方法

下面将会对不同的测距方法进行分析,主要关注不同的测距方法生产是的复杂程度和生产成本。

2.1.1手持激光测距仪

手持式激光测距仪是利用激光对目标的距离进行准确测定的仪器。激光测距仪在工作时向目标射出一束很细的激 激光测距仪光,由光电元件接收目标反射的激光束,计时器测定激光束从发射到接收的时间,计算出从观测者到目标的距离。

由于手持式激光测距仪是主要对激光出射和接收之间的时间差,所以,对元器件的精度要求较高,成本自然也会上升。

2.1.2望远镜式激光测距仪

这类测距仪精度相对较低,一般在1米左右,有的光学放大倍率可以达到6~9倍,测量距离比较远,一般在600-3000米左右。主要应用范围为野外建筑,环境勘察,建立机战,等需要野外长距离测量的情况。望远镜式激光测距,主要针对远距离勘测。短距离勘测则误差较大。

2.2测距方案选定

分析了上述测距方案,都不符合本次测距的要求。实际上,除了现在普遍的利用脉冲激光测距和相位激光测距,还有一种基于几何角度进行的三角测量法。本次实验的主要目的是实现短距离、低成本测距。因此,我们选定了三角测量法激光测距。

2.3三角测量法

三角测量法,实际就是利用相似三角形的类比,通过两个确定的已知量和一个可以变化需要计算的可变量,求出待测量。

根据上图,我可以得到公式: zff??z?b? bxx

z:待测距离

b:摄像头与激光之间的距离 f:摄像头焦距 x:CCD板上的距离

硬件模块设计

3.1激光发射模块设计

在理想状态下,希望摄像头采集的图像中,只包含激光头射出的点光源,其他部分为黑色,没任何杂光。这样的图片利于程序快速、准确地找到激光位置。现在,有多种方案可以减少画面中环境光的影响。如增大激光器的功率,在摄像头前加装滤光片。

实际中,周围环境的光为主要干扰,特别可见光为主。因此,我们可以采用发射红外波段的激光作为光源。但,由于大功率红外光激光器的成本较高,我们采用了650nm的红光激光器作为光源。

3.2信号接收模块设计

照射在物体上的光信号需要用摄像头来采集,一般测量用的摄像头会比较贵。本次实验选用普通的电脑USB摄像头,感光元件尺寸为640*480像素,再将650nm的红光高透滤光片套在摄像头前,接收模块基本完成。

3.2.1摄像头定标

由于每个摄像头生产时,都不能保证感光元件(CCD板)水平、竖直地对准摄像头的透镜,并且,还有CCD板的正中心也不一定与透镜正中心对准。因此,摄像头的定标显得尤为重要,并且能很大一步减少误差。如图是定标后的结果

定标后的摄像头,能尽最大可能保持接收时,摄像头时水平、竖直接收画面。通过查阅资料,得到的单个像素点的尺寸为6um。

3.3激光出射角

本实验,需要激光出射是保证出射角为90°,所以也要对出射角进行调试,当激光出射角也定好后,整个作品基本完成,剩下的是对程序进行调试。

调试过程如下:

PC程序设计

4.1摄像头调用

在主程序开始时,利用OpenCV调用摄像头出来。模块代码如下:

HWND MyWin; // 设置系统属性

cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE);//Enable视讯 //0:欲设置属性的摄像头序号; 第二个参数是属性名字; //第三个参数是指向设置值的指针

cvcamSetProperty(0, CVCAM_PROP_RENDER, CVCAMTRUE); //启用视讯 // MyWin 是窗口 HWND 的类型

MyWin = (HWND) cvGetWindowHandle(\

cvcamSetProperty(0, CVCAM_PROP_WINDOW, &MyWin); // Selects a window

cvcamSetProperty(0,CVCAM_RNDWIDTH,&width); cvcamSetProperty(0,CVCAM_RNDHEIGHT,&height);

//video rendering

//回调函数将处理每一帧

cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback);

4.2光点定位

光点定位是整个模块的核心,光点定位的准直会直接影响测量的准确性。设计程序如下:

cvcamGetProperty(1,\ int height = img->height; int width = img->width; int step = img->widthStep; int channels = img->nChannels;

uchar* data = (uchar *)img->imageData; int x,y;

int Real_x=0,Real_y=0; int i=0,j=280; int sum_x=0;

int max_light_intensity=250;//人为设定的感光强度 for( x=0;xwidth;x++) {

for(y=1;yheight;y++)//从左往右进行列扫描 {

if(data[y*step+x*channels+2]>max_light_intensity) {

sum_x=sum_x+x; i++; } } }

if(i>0) {

Real_x=sum_x/i;//实际像素点在X轴上的位置 Real_x=Real_x-j;

printf(\符合光强的像素点有%d个\\n\像素点多少,越多证明像素点越大,精确度越差

double L=100*3.85/(Real_x*6); printf(\测得距离为:\ printf(\米\

结论:

本次实验,主要是解决摄像头与激光出射角的定标。但由于是人为确定,并且激光器功率不算太大,只能在较短距离的空间范围内进行定标。其次,程序方面相对容易解决,并且通过程序的优化,确确实实地达到测量精度更加准确。

在这几天的研究制作当中,对摄像头成像的原理有了更深入的了解。同时,意识到在程序更进一步的优化还是有不懂的地方,这需要我们在后续的工作更着重分析、研究。通过这次的研究实验,在团队的合力之下。解决了遇到的绝大部分问题,虽然不足之处还是存在,例如不能测5m之外的距离。但在短距离20cm到150cm之内还是能较准确地得到测量距离,总体上实现了计划之初的目标。

本文来源:https://www.bwwdw.com/article/eyco.html

Top