基于单片机的智能导盲(拐杖)系统设计
博主福利:100G+电子设计学习资源包!http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect--------------------------------------------------------------------------------------------------------------------------
本设计研究为盲人提供行走时,遇到附近障碍物提前躲避的预警系统。该系统主要由测距系统(超声波测距系统和陀螺仪、磁力计测方向系统)、语音提示系统、报警振动控制系统和稳压电源,五个主要模块构成。
核心处理器为STM32,利用超声波回波的时间来计算出盲人与障碍物之间的距离,并且有语音播报距离和方向,可提前提醒使用者避让障碍物,起到避免安全隐患的作用。
智能导盲系统由单片机控制部分、超声波发射与接收部分、陀螺仪和磁力计部分、语音模块及震动模块几部分组成。单片机在接收到传感器的信息后,将传感器的信号转换为距离信息,通过语音播报或振动提示。
通过价格和功能的对比,该系统选用单片机STM32F103作为主控单元,选用的超声波传感器为SR-04,语音模块选用WT588D,陀螺仪为MPU6050,磁力计为HMC5883。
复位电路:通过复位可以将单片机的电路恢复到初始状态,本系统结构相对复杂,当有大量的数据进行处理的时候容易发生卡死,这时按下复位就可以让系统重新开始工作。复位电路极性电容容值的大小对复位时间有影响,容值越大,复位所需时间就越短。
晶振电路:晶振电路是单片机最小系统中十分重要的一部分,它可以为系统提供一个基础时钟信号,有了晶振才会有时钟周期,时钟周期又是单片机系统中必不可少的,有了时钟周期单片机才能正常工作。晶振电路可以让系统各部分保持同步,本系统采用8MHz的晶振,晶振的频率越高,单片机的处理速度越快。
1测距电路设计
本次超声波导盲系统选用的是HC-SR04超声波测距模块,模块的工作电压为5V,工作电流为15mA,工作频率为40KHz,测量范围大约为2cm~4m,测量角度约为15°。
各种传感器测距性能比较
基本工作原理:
1)采用I0口TRIG触发式测距,至少给10us的高电平信号;
2)模块自动发出8个40KHZ的方波,自动检测是否有信号返回;
3)有信号返回时,通过I0口ECH0输出一个高电平,高电平持续时间就是超声波从发射到返回的时间。使用者到障碍物距离=(高电平时间*声速)/2。
2陀螺仪&磁力计电路设计
普通导盲设备只采用一个传感器,通过不断改变传感器的朝向,来判别传感器所对应的方向上是否有障碍物。
而本设计采用了多个传感器,并不需要改变传感器的方向,多个方向上的传感器协同工作,通过陀螺仪与磁力计的共同作用来确定障碍物的方向与距离。而在市面上最为普遍使用的是MPU6050陀螺仪、HMC5883磁力计。
3语音&震动电路设计
考虑到产品的使用人群为盲人,因此采用的是语音播报振动报警的形式。当前方出现从障碍物时,系统先计算出距离的远近,当小于设定值时振动系统开始振动报警,当障碍物过远时语音播报障碍物的距离与方向。
WT588D具有高效的性能,原理简单使用方便,音质较好,控制灵活,与51单片机有着极为相似的性能,不仅可以作为一般语音芯片,而且因为I/O接口多,带控制功能和经过总线扩展的芯片之外的FLASH存储器,所以能做FLASH单片机。
振动报警模块利用的是普通的电机,首先系统需要设定一个固定值,在系统检测出障碍物的距离时,要先进行判断,测出的距离比设定的距离小时,振动模块开始工作,当与障碍物的距离比设定的距离大时,振动模块立即停止。在一些喧闹的环境中,盲人可能听不清语音提示,这时振动模块也可以起到一定的警示作用。振动没款与语音系统可以同时工作,并不发生冲突。
4软件程序设计
软件设计主要由以下几部分组成,包括绘制程序流程图、编写程序代码、总体汇编等几个部分,而软件的总体设计是在大方向上对总体设计思路的把握。本系统的程序流程图如图所示。
将超声波与盲人拐杖有机结合起来,超声波能够有效弥补盲人视力缺陷问题,我们采用以单片机为核心的低成本、高精度、微型化硬件和软件相结合的设计方法。该系统能够帮助盲人辨识半空中物体,使盲人减少意外伤害,避除障碍物。
基于盲道识别的智能导航盲杖
项目的技术路线及预期成果
一、技术路线
本项目拟开发的智能导航盲杖以rasberrypi3b为主控芯片,搭载摄像头、GPS模块、超声波模块、GSM模块、NRF模块,实现盲道识别、语音导航、障碍物提醒、紧急呼叫、无线寻杖等功能。智能导航盲杖的物理硬件部署如图7所示。
图7盲杖硬件部署图
(一) 盲道检测识别
盲道检测识别部分主要摄像头模块和图像处理算法部分组成,由摄像头模块提供实时路面情况并交由图像处理算法进行处理,如图8所示。整个图像处理算法是先由预处理模块处理输入图像,再由图像分割模块进行分割,最后由边界检测模块检测盲道边界。
图8盲道检测识别处理流程
1) 预处理模块
色彩空间转换:由于目前生活中不同盲道的差异极大,因此它们的分析方法以及解决方案也是非常不一样的。虽然系统采集到的图像是彩色的,但是为了处理方便,通常会将之转化成单通道的一维的灰度图片进行处理。然而,这一转化过程中却将图片中的大部分颜色信息都丢失了,甚至有一些人眼看起来很明显的差异,在转成灰度图后却儿乎分辨不出来了。
Lab色彩空间是颜色-对立空间,带有维度L表示亮度,a和b表示颜色对立维度,基于非线性压缩的CIE色彩空间坐标。不像RGB和CMYK色彩空间,Lab色彩空间被设计来接近人类视觉。因此,对于有颜色差异的盲道图像,将把它转化成Lab色彩空间,然后再做处理。
由于RGB色彩空间无法直接转换成Lab色彩空间,需要先转换成XYZ色彩空间再转换成Lab色彩空间,略去中间过程,RGB色彩空间转换成XYZ色彩空间的公式如下:
注:上述转换过程中使用了Gamma函数,用来对图象进行非线性色调编辑,目的是提高图像对比度,该函数不唯一。
XYZ色彩空间转换成Lab色彩空间的公式如下:
其中, ,取值分别为95.047、100.0和108.883。
高斯平滑与灰度级图像下扩展形态学操作:由于对所有的盲道图像的分割目标都是盲道区域与人行道区域,因此,可以舍去小面积的分割结果,并且尽量地把小区域合并成大块的区域。在预处理阶段为了减少分割时产生的小区域干扰最终的聚合结果,可以对图像进行如高斯平滑等方式的处理。
在一些情况下,高斯平滑可能达不到预期的效果,此时可以采用灰度级图像下的扩展形态学操作。在二值图像中,对Z中的集合A和B使用B对A进行腐蚀,用表示,并定义为:
也就是说,使用B对A进行腐蚀是所有B中包含A中的点Z的集合用Z平移。
将腐蚀操作扩展到灰度级图像。假定f(x,y)是输入图像,而b(x,y)是一个子图像函数,并且它们都是离散函数。则定义灰度腐蚀为:
其中,分别是f和b的定义域。
整个预处理流程如图9所示。
图9预处理流程
经过上述处理后,在进一步的阈值分割或者纹理分割中都能取得更精确的结果。
2) 图像分割模块
对于不同的盲道而言,所采用的分割策略是不同的,如对于有明显颜色特征的盲道而言,采用基于阈值的分割就能够获得很好的效果,但对于只具备纹理特征的盲道,则需要采用其他的分割方式。
a) 基于阈值的分割
对于和周围取余有明显色彩特征的盲道,可以采用基于阈值的分割方式来进行快速分割。阈值分割就是简单地用一个或几个阈值将图像的灰度直方图分成几个类,认为图像中灰度值在同一个灰度内的像素属于同一个区域。这是一种直观且易于实现的方法,因此在图像分割应用中处于中心地位。
由于在实际的盲道分割应用中往往涉及的场景较为复杂,因此通过预设阈值的方式来实现分割的方法在实际应用中效果无法达到预期要求,采用Ostu(最大类间方差法)进行阈值分割是一种较好的解决方案,具体如下:
输入图像中所有灰度值的统计信息可以用一维直方图来表示,该直方图用来表示。可以看成是对背景和对象物的混合概率密度函数的一个估计。对阈值,记:
定义类间差以及类内差:
在上述的基础上,Ostu可以通过最大化下列式子来选取最佳阈值t:
经阈值处理后的图像f(x,y)定义为:
由于盲道图像都是有着大块的连续区域,因此大多数情况下阈值分割都可以得到不错的效果。
b) 基于纹理差异的分割
有些盲道图像由于各种各样的原因,它们的不仅没有颜色差异,甚至在转成灰度图或Lab色彩空间下,各个分量的强度都没有显著和区域性差异。对于这种情况,需要采用基于纹理差异的分割方法。
利用纹理分割的方法将这一类盲道图像分割出来需要做到两点,第一,描述盲道的纹理特征,第二,利用这些纹理特征进行选择,将图像分块。
i. 纹理特征描述
盲道纹理特征的描述可以通过一种改进的排列组和熵获得,该算法流程如下:
(1) 将整幅图像分成4×4像素块的集合;
(2) 以4×5像素块为中心取大小为16×16的窗口;
(3) 分别设置4个方向上的松驰变量;
(4) 在16×16的窗口中,分别对4个方向上间距为1的像素对进行统计,计算3种排列情况出现的概率,最后获取各个方向上的排列组合熵);
(5) 计算16×16窗口中像素块的灰度均值E和灰度方差D;
(6) 用这个6维特征矢量作为表述图像纹理特征的量。
ii. 聚类方法
在能够描述盲道的纹理特征之后,即可以选用合适的聚类方法来确定分割结果,可以采用K-means聚类、模糊C-均值聚类(FCM)等方法,以K-means聚类方法为例,典型流程如下:
(1) 从图片中随机选取K个作为质心;
(2) 对剩余的每个像素测量其到每个质心的距离,并把它归到最近的质心的类;
(3) 重新计算已经得到的各个类的质心;
(4) 迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束。
整个图像分割流程如图10所示。
图10图像分割流程
3) 边界检测模块
a) 边缘检测
一般的,图像中的边缘部分是两个不同子区域的交接处,体现在图像中的数字信息上,边缘部分是图像的强度变化最剧烈的部分。图像的强度变化程度指的就是图像中的点像素间的离散导数值。因此大部分边缘检测的算法都是基于对对应于图像的函数f(x,y)的求导和阈值化结果。
由于图像函数f(x,y)都是离散的,因此一幅数字图像的一阶导数是基于各种二维梯度的近似值的,图像f(x,y)在位置(x,y)的梯度定义为下列向量:
梯度向量的大小表示为:
计算图像的梯度可以用不同的梯度算子得到,应用在下图所示的图像领域和Sobel算子可以得到z5的检测结果为:
智能导盲拐杖
一、 发现问题:
在寒假中无意中一条关于盲人的新闻吸引了我,文章中说,某一盲人外出,因环境陌生,最后迷路,在街头转了很久才在热心人的帮助下回到了住处,看到这条新闻后,我深有感触。现在科技发展的那么快,各种智能设备层出不穷,而更多的是以盈利为目的,相对于盲人这个特殊而又微小的人群,缺乏关注,我们作为科创社团的学生,是否可以为他们做些什么?我们商量了一下,决定设计一个盲人用的智能导盲拐杖。
二、 分析问题:
为了更好的体验盲人行走的特点,我们用黑布蒙上了眼睛,体验着盲人走路的特点和需求。总结出了导盲杖需要解决的几个问题:
1、 避障:这是最重要的也是最基本的一个需求;
2、 安全:让别人发现自己;
3、位置:我需要知道目前所在的位置;
4、去哪里:怎么去目的地;
三、 解决思路:
关于避障
想识别前方物体,我知道可以通过视觉传感器来获得,物体知道了,需要进行计算并且获得一个准确的距离,这里面需要一个测距传感器,我选择了超声波传感器,而盲人看不见,我们选择了语音合成模块,使盲人能听见,最后要做到全方位,我们需要使用一个云台,使视觉传感器能全方位识别,这里我使用的是一个180度舵机。
关于安全
我们在设计导盲杖时,采用声光报警的方式,让别人发现自己。。。
关于位置:
我们在导盲杖中嵌入GPS/北斗定位芯片,当电源打开时,首先就是语音告诉自己,目前所在的位置。
关于去哪里
我们的设想是,通过语音识别模块,链接导航软件,同时考虑到步行和盲人的特点,规划出最好最优的路线。