基于图像识别的微型倾斜传感器
2010年07月24日 21:04 发布者:lavida
通过人眼观察进行识读的传统水准器式倾斜仪表,直观但精度不高、灵活性不强。通过引入CCD图像传感器采集水准器中气泡图像并结合图像识别算法分析计算气泡图形边缘,研究开发了具备倾斜角度数值输出能力的新型倾斜传感器。并进一步通过采用DSP处理器并应用嵌入式设计方法,设计了该类型倾斜传感器的小型化原型,从而显著地提高了测量精度和应用的灵活性,克服了传统仪表的不足。倾斜传感器(又称为水平仪)是测量微小倾斜角的一种测量器具,主要用于测量或检验相对于水平位置的倾斜角、表面的水平度、垂直度等,因此在机械制造、设备安装和维修中,倾斜传感器是最基本的测量器具之一。根据工作原理,倾斜传感器一般可以分为水准器式倾斜传感器、光学倾斜仪和电子倾斜传感器等几大类别。
基本原理
微型倾斜传感器的设计结合了水准器式倾斜传感器和电子倾斜仪表的优点,通过采用CCD传感器采集水准器中气泡的图像,再通过图像处理来获取气泡的位置,进而计算倾斜参数。
图1是传统水平仪示意图。当水平仪倾斜时,玻璃管中的气泡移动,偏离中心位置。偏离中心位置的大小与水平倾角相关。在这种情况下,水平仪只能测量相对水平方向的倾角,测量的倾角范围相对较小、测量精度不高。因而它通常只能用来判断是否水平,而不能用来测量具体的倾斜角度。
将上面的管状水准泡改变成圆盘形后,如图2 所示,则可以通过气泡的位置来测量二维平面的倾斜角度。为了进一步提高倾角的测量范围,可将盘形水准泡变为球形,可以通过计算投影平面上气泡的位置来获得球面上气泡相对于铅垂线的角度。
如图3所示,通过CCD摄像头采集水准泡图像,再利用图像处理获取气泡边缘并计算气泡中心点的坐标,从而可以计算出相对于水准泡中垂线的方位和倾角。
原型设计
硬件方案
在实验阶段,根据现有的器材,先采用如图3所示的“快速原型”方式,即通过连接电脑的摄像头来采集水准泡的图像,并在PC机上进行图像处理和气泡位置识别,进而计算出倾斜数值。在调试验证了方案的可行性之后,再采用DSP处理器,重新设计电路板,将图像采集和图像处理集成,从而将其小型化,实现倾斜传感器的样品。
软件方案
数据处理
系统数据采集及处理流程如图4所示。
数据采集处理主要包括:
① 摄像头中的处理器通过AD采样获取了CCD传感器中各点数据之后,通过USB传送到PC机。
② PC机一方面将USB 传来的数据按帧显示到屏幕上;另一方面将每帧图像转化为数据矩阵,交给由MATLAB语言编制的边缘检测函数处理。
③ 处理边缘检测函数输出的二值图像,计算出边缘对象的中心位置,并显示到屏幕上。
④ 由于圆盘形水准器表面不能是完全水平的或者由于水准泡是球形的,故需要根据成像模型进行适当修正,方能计算出实际的倾斜程度和方位。
图像处理算法
在设计中,需要从图像中找到气泡边缘,因而要选择合理的边缘检测算法。目前常用的边缘检测主要有Roberts算子、Sobel算子、Lap lace 差分算子、Prewitt算子、Marr算法等。考虑本设计中的成像图像比较简单、干扰信息较少,而且可以通过调整背景和光照增强气泡图形,所以在实际实验中采用了最简单常用的Sobel算子。同时利用Matlab作为程序设计语言,应用其工具箱中成熟的图像处理算法。
通过编程实现的边缘检测效果如图5所示。CCD摄像头采集到的水准泡的图形,经过预处理之后显示在左边图片框中,右边为处理结果,包括气泡的边缘、边缘对象的中心(表示为圆点)以及表示相对参考点(表示为方块)偏离角度和距离的直线。
系统功能模块及硬件设计
功能模块结构
在PC机上验证之后,接下来的是设计专门的电路板,实现小型化的要求。根据实际需要,设计电路板的功能模块,其硬件结构如图6所示。
功能模块主要包括了4个部分: ①CCD传感器,用于采集水准泡图像。②DSP处理器,用于读取CCD传感器数据并处理读取数据,完成图像边缘识别及倾斜角度计算功能。另外,还需输出数据,显示到屏幕上和发送到RF芯片。③RF模块,用于发送传感器的输出数据。当传感器的安装位置比较特殊时,采用无线方式将减少线缆的麻烦,提高应用的灵活性。④LCD模块,主要用于显示数据,根据需要,设计成可选模块。
电路板设计
根据上面的系统模块结构要求,选择元件绘制原理图并生成电路板PCB图。在电路板的布局上,注意以下几点:
① 电路板的大小和水准器圆盘的相互匹配。
② 核心元件CCD传感器芯片和DSP处理芯片布局。将其中的CCD芯片布置在电路板的中心,同时在CCD芯片四周留出钻孔位置,方便安装镜头。为减少电路板的面积,将DSP芯片放置在反面中间位置。再在四周布置必要的分立元件及用于连接RF发送模块的接插件,显示单元也做成模块式,方便显示单元的拆装。
嵌入式系统的软件设计
核心算法的代码移植
由于在前面的方案验证中,采用的是Matlab高级语言编制的边缘检测算法,因此需要将其转化为DSP开发工具环境支持的C语言,利用Matlab 中的MCC编译工具将M函数转换为C语言。
代码集成
将边缘检测算法转化为开发工具所支持的语言之后,将编制的CCD芯片的读写操作函数,数据处理结果输出函数集成起来,通过调试排除基本的语法及逻辑错误,实现编译通过,生成机器代码。
在线调试
完成上面的代码集成之后,通过联机调试实现系统的功能。
① 监视程序中的变量,按照数据的流向,从数据源(即从CCD中读取的数据)开始检查排除错误一直到最后输出结果。
② 在输出结果基本正确之后,通过测量出的实际的倾斜数值和系统输出数值的比较,修正校验直到达到满意结果。
结束语
微型倾斜传感器的设计,目前还存在以下几个方面问题需要继续研究:
① 系统的精度:由于高的系统精度需要CCD有较高的分辨率,同时要求水准器需要有足够的面积,但这会和系统的成本和体积相矛盾。
② 系统的响应时间:由于采用了水准泡,而液体有一定的粘度,从而影响了水泡的流动速度,降低了系统的响应时间。