基于嵌入式ARM9的墙面平整度检测仪研究与实现
扫描二维码
随时随地手机看文章
房屋的墙面平整度是衡量房屋建筑质量的一项重要指标。现有的墙面平整度检测方法要么操作不方便且效率低下,如靠尺;要么检测仪器本身比较复杂,不易操作,需要专业的操作技巧,如使用“百分表打点”检测;或者仪器本身比较昂贵,无法广泛推广和使用,如利用无协作目标电子全站仪检测。所以研究一种原理简单,操作方便,价格便宜,体积小,便携式的手持移动墙面平整度检测设备是非常有必要且具一定商业价值的。
1 系统的总体设计
系统的目标是:设计一个嵌入式手持设备,实现对墙面平整度的检测。具体的实现过程为:USB摄像头以小分辨率(320*240)采集动态视频,旋转后直接显示在LCD上,通过观察LCD上的动态显示内容确定所选场景是否满足要求。待出现满足要求的场景后开始测量,此时USB摄像头以大分辨率(1 600*1 200)采集一幅静态图片传给CPU处理,最后CPU将处理的结果显示在LCD上。系统的总体结构如图1所示。
2 系统硬件平台的构建
2.1 微处理器及存储模块
本系统的微处理器采用飞思卡尔公司的MCIMX283。该处理器基于ARM926构架,主频最高达450MHz;采用NANDFlash启动,其工作电压范围是2.7~3.6V,容量为128M×8bit,
能满足系统和各类数据的存储要求。采用H5P92562GFR—s6c运行操作系统和应用程序,该芯片为DDR2 SDRAM,bank数为4,数据宽度2 bytes,容量大小为32MB。与传统的SDRAM相比,DDR2 SDRAM存取速度有了极大提高,但工作电压却很低,因此运行速度和功耗有很大改进。微处理器和DDR2、NAND Flash的连接示意图如图2所示。
2.2 电源、时钟和复位模块
MCDMX283内部集成了电源管理单元(PMU),外部只需要提供规定的电源(5V或者4.2V)就可产生核心板需要的各种电压。但MCIMX283内部电源管理单元输出能力有限,因此PMU所产生的3.3 V、1.8 V等电源除了给DDR2、NANDFlash供电外没有给其他外围设备使用。其他外围设备的供电可由外部供电经过LDO转换为所需电压以供使用。
此外,系统中采用晶体振荡器产生时钟源信号,复位模块采用手动复位。
2.3 USB和LCD接口电路模块
USB接口按主从关系可分为USB Host和USB OTG。USB Host用来挂载Deviec设备,本系统中是挂载USB摄像头,以实现视频和图像的采集;USB OTG用以和PC机通信,实现PC机向NAND Flash下载内核、根文件系统等功能。
LCD用来显示USB摄像头采集的视频数据和处理后的图像。MCIMX283集成LCD控制器和触摸屏控制器,支持24位的RGB和24位系统模式,同时支持四线电阻触摸屏。本系统中LCD只用作显示,不需要触摸功能,同时为了充分利用IO资源,系统采用16位RGB显示。
3 系统软件设计
系统软件设计包括软件平台的搭建和检测软件的实现。软件平台的搭建主要完成嵌入式操作系统的移植和主要模块的驱动移植,检测软件的实现即检测算法的实现,是检测系统的核心部分。
3.1 嵌入式Linux操作系统的移植
嵌入式操作系统是嵌入式系统的软件基础,是应用程序开发的软件平台。对于一个嵌入式Linux系统,系统上电后经过加载Bootloader、启动Linux内核、挂载根文件系统3个步骤后,用户程序才能正常运行,而且这3个步骤是缺一不可的。
3.2 主要模块驱动的移植
驱动的移植是嵌入式系统不可缺少的过程,本系统中主要完成的驱动移植有检测按钮驱动的移植、USB摄像头驱动的移植、LCD驱动的移植。
首先要移植按键按钮的驱动,本系统中我们使用一个GPIO引脚来模拟开关按钮。选定引脚后先将该引脚配置成GPIO功能,生成引脚的属性文件,然后编译mykey.c文件,将按键驱动插入内核中,完成按键驱动的移植。
由于本系统使用Linux2.6.35版本,该版本支持UVC类设备,而我们选用的USB摄像头为XHV57-NBL60-V1.0,支持UVC标准,所以我们不需要编写驱动,只是在配置内核时将UVC静态编译进内核即可。
本系统选用的2.8寸LCD不带驱动板,因此不但要配置LCD控制器的参数,还要通过SPI初始化LCD寄存器。根据LCD时序图,设置LCD控制器的输出时序,再根据系统需求和相关手册,设置LCD寄存器的值,这样上电后,LCD就能工作在预定状态下。
3.3 检测软件的实现
激光检测系统的总体设计分为两部分:视频采集模式和图像采集模式。上电复位后系统进入视频采集模式,摄像头采集320*240的YUV422视频帧图像,将采集到的YUV帧图像转换为RGB565,旋转90度转为240*320,然后显示到LCD上。此时通过观察LCD上显示的动态图像(即视频)即可确定摄像头所选“场景”是否满足要求。待所选“场景”满足要求后按下“开始测量”按钮,即可进入拍照模式。进入拍照模式后,系统修改摄像头分辨率,采集一幅1600*1200的YUV图像,将此图像转换为1600*1200的RGB888图像,调用算法处理RGB888图像,然后将处理后的图像压缩为320*240的RGB888,将压缩后的图像转换为RGB565,再旋转90度显示在LCD上,此时通过观察LCD上的显示结果就可知道激光线照射到的墙面部分的平整度情况了。观察记录完检测结果后按下“开始测量”按钮即可进入视频采集模式,选取合适“场景”后再次按下“开始测量”按钮即可进入下次检测。检测软件的总体框架如图3所示。
视频的采集就是读取USB摄像头获得的视频数据流,交给处理器处理。拍照模式是检测系统中主要功能的实现部分,进入该模式后,系统首先更改摄像头的分辨率,采集一幅1600*1200的YUV图像。根据YUV和RGB的转换关系,将图像转换为RGB888。然后执行以下过程:
1)遍历图像的每个像素点,根据既定阈值找出激光线的起始坐标,将激光线始末点之间的距离分为N段,为后续分段处理做准备;
2)定义二维数组dealpt[20][1600],存放激光线上激光像素的坐标;
3)利用最小二乘法拟合激光线,确定激光线的系数a、截距b,得到激光线y=ax+b,将拟合的激光线标成纯红(R=255,G=0,B=0);
4)求每一列中拟合激光线上激光点的y轴坐标与实际激光线上该列所有激光点y轴坐标差的和,以段为单位,计算第L段上所有坐标差的总和difn[L];
5)根据difn[L]绝对值的大小,就能知道第L段内激光线的曲直程度,从而可以确定第L段内墙面的凹凸程度。difn[L]绝对值越大,说明第L段内凹凸程度越大,我们就将此段内的拟合激光线标黑的程度越大,当difn[L]超过某一阈值,则将该段内的拟合激光线标成纯黑(R=0,G=0,B=0)。
以上处理过程完成后,使用下采样方式缩小图片,得到320*240的RGB888图像,然后再转换为RGB565,旋转90度后显示在LCD上,通过LCD上显示的内容,即可判断墙面相应部分的凹凸情况。
3.4 激光图像检测算法的改进
上述算法在正常光照情况下能得到很好的检测效果,但在极端的光照情况下(如周围光照特别亮或者特别暗的情况)显示效果却不尽人意。光照太强,墙面背景较亮,相对情况下激光线亮度就会变弱,就很难将激光线提取出来;光线太弱,墙面背景较暗,此时激光线就会出现过饱和,激光线上像素点的R、G、B分量都趋于255,这时应用以上算法就无法将激光线提取出来;如果光照不是自然光,如光照为蓝光或者绿光,这样也会影响激光线的提取,如果光照为红光,且光强足够大,则激光线就会完全无法提取。
为了准确地将激光线像素点从激光图像中提取出来,我们要根据不同的光照环境,确定不同的激光提取阈值条件,为此我们提出了改进算法,即在图像预处理前先求得整个图像R、G、B分量的平均值averR、averG、averB,然后根据averR、averG、averB分情况处理激光图像,这样就能很好地将激光线从激光图像中提取出来,极大地提升了系统的处理能力和适应能力,使墙面检测仪可以适用于各种不同的光照环境中。
4 检测结果分析
4.1 墙面不同凹凸情况下的检测结果
国家墙面平整度验收标准为:用两米的靠尺检测墙面,平整度偏差在3 mm以内就算合格,因此我们的墙面平整度必须检测出3 mm以内的凹凸才算合格。如图4(a)中的木板厚度约15 mm,必然能检测出,因此标黑,而木板下方用靠尺检测凹凸最大的地方为2 mm,本系统也能检测出,所以当墙面有高凸起时系统不但能检测出高凸起部分同时也能检测出凹凸值不大的地方。图4(b)、(c)、(d)凹凸值((;CI))最大分别为3.5 mm、2 mm、0.4 mm,可以看出这些凹凸位置本系统都能检测出,当凹凸程度小于0.4 mm时基本就检测不出了,因此在正常光照情况下,本系统可以检测出凹凸程度大于0.4mm的凹凸位置,其精度远远高于国家规定的标准。
4.2 特殊光照下的检测结果
由于对算法进行了改进,因此本系统也可以检测特殊光照下的墙面,本实验以绿光为实验。
如图5所示,其中(a)、(b)、(c)、(d)检测位置的凹凸值最大分别为3.5 mm、2 mm、1.5 mm、0.8 mm。
由结果可以看出,由于改进了算法,使得检测仪能很好的检测出特殊光照下的墙面的平整度,且检测精度至少为0.8 mm。
5 结论
随着个人家庭装修的流行和房屋验收标准的提高,房屋墙面平整度检测设备必然向智能化、便携化、易操作、价格便宜等方向发展。本文就是研究并实现了一种基于ARM9的嵌入式墙面平整度手持检测设备。并且通过检测结果的分析,证明了本系统具有很好的检测效果。需要指出的是,本系统中照射到墙面的激光线为垂直方向,如果激光线为水平方向,则无法检测。而且系统设计过程中没有综合考虑性能问题,导致主芯片发热过高,以上两点是今后亟待解决的问题。