跌倒检测-跌倒报警-Android_第1页
跌倒检测-跌倒报警-Android_第2页
跌倒检测-跌倒报警-Android_第3页
跌倒检测-跌倒报警-Android_第4页
跌倒检测-跌倒报警-Android_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业摘要随着当今社会老龄化进程的逐步加剧,老年人跌倒造成的致病率、住院率和死亡率急速提高,带来了严重的社会经济负担。因此,在不影响老年人正常活动的前提下,通过科学的手段监测老年人的活动,在检测到跌倒后迅速报警求助,可以有效地减少老年人跌倒带来的健康伤害和医疗开支。在分析比较国内外跌倒检测相关技术研究后,本文提出了一种基于三轴加速度传感器和陀螺仪的跌倒检测与报警系统。三轴加速度传感器和陀螺仪实时采集老人在日常活动中产生的加速度和角速度数据,通过蓝牙传送到Android手机。手机上运行的软件对接收到的数据进行分析处理,并判断老年人的运动状态。当系统检测到跌倒发生时,发出铃声提醒老人,老人可以确认报警或取消误报。若在5s内没有做出响应,系统将按照设定的报警方式通知联系人。报警方式有发短信和打电话,短信内容包含老年人跌倒时所在的位置信息。老人也可以在感到身体不适时自主报警。关键词:跌倒检测,跌倒报警,AndroidAbstractAstheworldagingprocessquickened,fallaccidentsoftheelderlyresultingintheincreaseofmorbidity,hospitalizationrateandmortalityratehasbroughtaserioussocialandeconomicburden.Therefore,inthepremiseofnotaffectingthenormalactivitiesoftheelderly,reliablemethod,whichcanmonitoranelder’sdailyactivitiesandalertcarecenterwhendetectafall,isessentialtoreducefallrelatedinjuriesandmedicalexpenses.Basedontheanalysisofthefalldetectiontechnologyintheworld,thispaperpresentsanautonomousfalldetectionandalertingsystembasedona3-axialacceleratorandgyroscope.The3-axialacceleratorcancapturethedataabouttheactivitiesofdailylivingoftheelders,thedataisthensenttoamobilephoneviaBluetooth.Thesoftwarerunsonthephonewillanalyzeandprocessthedataandjudgeanelder’smovementstatebyusingathreshold-basedfalldetectionalgorithm.Whenthesystemdetectsafall,thephonewillmakesoundtoalerttheelder,theeldercanmakesurethealertorcancelthefalsepositive.Ifthereisnoresponsein5s,thesystemwillalertaccordingthesettings.Thealertmethodsaresendingtextmessagesandmakingcalls.Themessagecontainsthepositioninformationoftheelderwhofalls.Theeldercanalsoalertbyhimselfwhenhefeelsbad.KeyWord:falldetection,fallalert,Android

目录

第1章绪论1.1研究背景及意义21世纪被称为“银发世纪”,人口老龄化是当今社会面临的重大挑战之一。通常认为65岁以上的比率超过总人口的7%,就称为“老龄化社会”,而超过14%就称为“老龄社会”。目前,世界上所有发达国家都已经进入老龄社会,许多发展中国家正在或即将进入老龄社会。截至2008年底,我国65岁及以上人口10956万人,占全国总人口的8.3%。中国作为世界上人口最多的发展中国家,人口老龄化的趋势加速发展,预计到2030年中国将进入深度老龄化,并超过日本成为全国人口老龄化程度最高的国家。随着全球人口老龄化的到来,跌倒已经成为老年人致残和致死的重要原因之一。据世界卫生报告,“2002年全球有39.1万人死于跌倒,其中60岁以上的占50%以上,70岁以上的占40%。许多发达国家对居住在社区的65岁及以上的老年人研究发现,其中28%~35%在一年中发生过跌倒,80岁以上的则达到了50%。大约40%~70%的跌倒会造成伤害。”对于住在医院里的老年人,跌倒的发生率则会更高。跌倒会严重影响老年人的健康水平和生活质量,也会到来沉重的经济负担。因此,采取适当的措施为老年人提供救助十分重要。随着计算机、通信等技术的发展,电子设备的智能化、小型化,我们希望设计出一种针对老年人跌倒的检测器,在检测到老年人跌倒后能够及时发出求救信号通知其家人或医护人员,使老年人能够得到及时的救助,从而降低伤害,提高老年人的生活质量。1.2国内外研究现状目前,国内外对跌到检测系统的研究很多,主要方法可分为以下几种:(1)基于视频的跌倒检测系统此种方法要求在用户可能活动的地方安装摄像头,来捕捉人体运动的画面,经过图像处理判断用户是否存在跌倒的图像特征。该方法不需要用户穿戴任何装备,不影响日常生活,但是监测的范围有限。例如加拿大的CarolineRougier通过摄像头采集老年人跌倒时的画面,将运动过程和人体的形态相结合,判断老人是否跌倒。(2)基于地板震动的跌倒检测系统此种方法是根据人体跌倒在木地板上的声音或人体跌倒时与地板的冲击来判断使用者是否跌倒。但该方法只适用于室内,且不同质地的地板得到的震动信息也不同,应用范围较小。例如弗吉尼亚大学的MARC研究中心通过检测不同物体落地时地板的震动方式来检测人体跌倒。(3)基于可穿戴技术的跌倒检测系统此种方法将传感器嵌入到可穿戴的设备,可以实时监测人体的活动,并在检测到跌倒时进行及时的报警。该方法不受地点的限制,使用范围广,且设备便于携带。基于可穿戴跌到检测系统,目前国内外的研究很多,基本上都是通过各种传感器采集人体的活动数据,并通过一定的算法判断老人是否跌倒。1.3论文的主要内容及组织结构本文以可穿戴计算技术为基础,提出了一种基于三轴加速度传感器和陀螺仪的跌倒检测系统。该系统能够实时采集用户的活动数据,通过蓝牙传送到手机端,手机上运行的软件对接收到的数据进行分析处理,从而判断用户是否跌倒,并采取相应的报警措施。本文共分为以下几个部分:第1章为绪论。阐述了项目背景及研究意义,国内外的研究状况,简要说明了论文的内容和组织结构。第2章为对跌倒检测理论和相关技术算法进行了简要的介绍。第3章阐述了系统的总体方案。描述了系统的需求,和系统的总体架构。第4章为系统的软件设计与实现,详细地分类分模块说明了实现方法。第5章为测试与实验。对系统的运行情况进行了测试,并对实验数据和结果进行了分析。结论部分概括了论文的主要工作和亟待解决的问题,并对今后的进一步研究做了展望。第2章跌倒检测技术2.1理论基础2.1.1跌倒分析造成老年人跌倒的原因有很多,主要分为内因和外因。内因指的是老年人的机体老化,如疾病、视力差、身体机能退化等。外因主要是环境因素,如室内地板太滑、家具摆放位置不好、台阶灯,室外的危险因素更多。另外社会因素造成空巢老人越来越多,也是老年人跌倒的原因之一。人体在跌倒时由于失去平衡,身体会向某一方向倾倒,可能会有以下几种跌倒姿态:(1)向前跌倒(2)向后跌倒(3)向左跌倒(4)向右跌倒。如图2.1所示:向后跌倒向前跌倒向后跌倒向前跌倒向右跌倒向左跌倒向右跌倒向左跌倒图2.1人体跌倒姿势一般情况下,人体跌倒行为通常发生在2秒左右。跌倒过程中身体重心的瞬间移动会产生一个加速度,身体的倾倒也会产生一个偏离竖直方向的角度。在非跌倒状态如行走过程中,人体上躯干偏离Z轴的倾斜角处于一个相对安全的范围内,而跌倒后人体多处于俯卧、侧卧或仰卧的状态,躯干方向接近于水平,即偏离竖直方向的倾斜角接近90度。因此我们选取加速度和身体的倾斜角这两个特征作为判别跌倒与其它日常活动的依据。2.1.2坐标建立为了研究人体在跌倒过程中的运动情况,需要建立三维直角坐标系。如图2.2所示,设人体躯干坐标系为Oxyz,其中x轴指向前方,y轴指向左方,z轴指向上方。图2.2坐标系定义根据图2.1坐标系的定义,人体在运动过程中沿x轴方向加速度为αx,沿y轴方向的加速度为αy,沿z轴方向的加速度为a=ax2+ay2+人体躯干绕x轴转动的角速度为ω1,绕y轴转动的角速度为ω2则合速度为: ω=ω12+ω2.2跌倒检测技术2.2.1可穿戴计算技术在1.2节中介绍了几种目前的跌倒检测技术,由于可穿戴计算技术应用范围广泛、不受地点限制,因此本文采用了此种方法,将微型传感器嵌入到可穿戴设备中,如可穿戴背心、帽子等,从而将传感器固定在身体某些部位,实时采集人体的活动数据。可穿戴计算是一种新兴技术,目前尚无较规范、明确和完备的定义。国际上公认的可穿戴式计算机的发明人之一,加拿大的斯蒂夫·曼恩教授认为可穿戴计算机是这样一类计算机系统:“属于用户的个人空间,由穿戴者控制,同时具有操作和互动的持续性,即alwaysonandalwaysaccessible”。可穿戴计算技术在航空、军事、医学等领域和日常生活中有着广阔的应用前景。在航空领域,可穿戴计算机可以用于宇航员的训练,航天器和飞行器的维护;在军事上,是特种兵和数字化士兵的必备装备。在医疗上,可穿戴计算机可用于的病情监测护理、远程诊断、药物疗效的检测等。在日常生活中,能够根据用户所处环境,适时提供信息和建议,成为人们生活中的得力助手。可穿戴计算技术主要具有以下几个特征:可以在运动状态下使用可以方便地“穿”在身上具有持续可用性,即系统可以在用户需要的任何时候提供服务可以腾出双手做其它事情由此可以看出本文提出的基于可穿戴计算技术的跌倒检测系统也具有以上特性:数据采集装置嵌入到可穿戴背心中穿在用户的身上,便于携带;可以在用户任何运动状态下采集活动数据;系统随时处于备用状态,可以在用户需要的任何时候提供服务;在系统运行过程中,用户可以做其它事情,不影响正常活动。2.2.2硬件平台介绍本系统中使用的硬件是一个基于蓝牙的3D加速度和角速度实时采集与发送模块,我们只需要在Arduino环境下编写程序并下载到板子中就可以实现采集人体运动过程中的三轴加速度和角速度数据,并通过蓝牙进行传输。该模块采用了AnalogDevices公司生产的ADXL345加速度传感器采集物体活动的三轴加速度,该传感器测量范围为±16g;采用InvenSense的ITG-3205陀螺仪采集物体活动的3D角速度,该传感器的感应精度为14.375LSB1/(°/s),量程范围为±2000°/s,这两类传感器具有测量精度高、体积小、功耗低等特点;采用Atmel公司的Atmega168作为中央处理单元MCU;选择CSR公司的BC蓝牙模块,最大传输距离10m,数据传输速率可为1200~Bits/S;采用FT232RQ串行通信芯片为本模块提供USB接口和串行通信支持;采用LP2992锂电池控制芯片和MAX1555充电控制器,使模块能够通过3~5V锂电池供电。图2.3硬件实物图该模块的硬件实物图如图2.3所示,它有三种工作模式,可以通过改变跳线进行设置。当1号和3号引脚相连、2号和4号引脚相连时,MCU和蓝牙模块相连,此时模块处于正常工作状态,微控制器将从传感器实时采集到的活动数据传送给蓝牙模块,由蓝牙模块进行无线传输;当3号和5号引脚相连、4号和6号引脚相连时,MCU和串口USB连接,此时可通过串口进行程序的烧写;当1号和6号引脚相连、2号和5号引脚相连时,蓝牙模块和串口USB相连,此时可通过串口来对蓝牙进行命令行操作,以检测蓝牙模块的工作状态或改变蓝牙模块的传输波特率等信息。图2.4跳线连接2.3跌倒检测算法2.3.1阈值法人体跌倒过程与其它日常活动过程相比,在运动学信息变化方面有其独有的特征。从统计学角度来说,多数跌倒过程中产生的加速度和身体倾角的改变会比日常生活中的其它活动比如坐下、行走等一般过程要大。因此,国内外研究中大多使用加速度和角速度阈值法检测跌倒的发生。由于人体运动行为过程的复杂性和随机性,使用单一的加速度或角速度判断人体跌倒行为的发生会带来很大的误判。采用加速度传感器和角速度传感器分别获取三轴加速度和角速度,通过人体合加速度和偏离竖直方向(Z轴)的倾斜角来评估人体受到的冲击力和姿态变换,并设定阈值对人体跌倒行为进行检测。基于人体上躯干合加速度和倾斜角阈值的跌倒检测算法主要步骤如下,设t时刻,人体上躯干合加速度为a(t),偏离竖直方向的倾斜角为θ(t)。其中a1为实验确定的人体跌倒过程中上躯干合加速度角阈值,θ1为偏离Z轴的倾斜角阈值。(1)定义一个数据存储空间,储存当前时刻前2秒钟内的合加速度和倾斜角,当有新的数据到来时,存入新数据,释放之前的数据。(2)检测当前时刻跌倒冲击是否发生。如果a(t)≦a1,则没有发生跌倒冲击返回步骤(1);如果a(t)>a1,确认冲击发生,进入下一步。(3)计算当前时刻前2秒的躯干偏离Z轴倾斜角度θ(t)。(4)判断倾斜角是否满足跌倒行为特征。如果θ(t)>θ1,则判断跌倒行为已经发生;否则判断跌倒行为过程未发生,应继续实时监测。2.3.2支持向量机方法由于人体跌倒的诸多不确定因素,不同阈值的选取对系统的判别效果有很大影响。研究初期,采用了基于统计分析相关的方法确定了阈值,为了使系统判断跌倒更加准确,我们在此介绍使用支持向量机的方法确定阈值。支持向量机(SupportVectorMachine,SVM)是Cortes和Vapnik于1995年提出的一种基于统计学习理论的机器学习方法,目前已经被广泛应用于模式识别领域。SVM主要是通过使用核函数将低将输入向量映射到高维特征空间中,从而可以对原样本进行线性分析。此外,SVM基于风险最小化理论在特征空间中建立最优分割超平面,使得分类器的效果最优化,增强了其推广性。本文研究的跌倒问题是一个二类分为问题,即跌倒和其它日常活动。两类问题可以这样定义:设有两类n维训练样本,C1类的训练样本{xi},类别属性值为yi=1,C2类的训练样本{xj},属性值为yj=-1。我们能够把这些样本通过一个超平面分开,这样的平面可以找到无穷多个,但是我们希望能够找到最佳的分类平面,即使得属于两个不同类的数据点间隔最大的那个面,该面称为最大间隔超平面。与该界面平行的两平面之间距离应该是最大的,两个平面中的训练样本称为支持向量。如图2.3所示,界面1、2和最优分类界面都能对样本进行分类,但是中间的界面分类效果最好。图2.3分类界面设用于分离的超平面方程是:w·x+b=0。其中w是超平面的法向量,b是超平面的常数项,x是超平面上的点。我们要寻求最优的超平面就是寻找最优的w和b设为w0和b0,则最优分类超平面为: w0·x+b0=0 (2-3)定义支持向量即满足下面条件的数据点(xi,yi):w·xi+b=-1,yi=-1或w·xi+b=1,yi=1 (2-4)这两个就是超平面H1和H2的方程。这两个超平面,在它们之间没有任何样本点并且这两个超平面之间的距离要最大。不难得到这两个超平面之间的距离是2w,要是这个距离最大,则使||w||最小化w22最小化。且对于任意的(xi,yi)满足式(2-4),即 yi(w·xi+b)≧1 此时问题转化为一个二次最规划问题:minw22,且yi(w·xi+b)≧1,i=1,2,…..,N。使用拉格朗日首先建立拉格朗日函数L(w,b,a)=12wT其中ai为拉格朗日乘子。分别对w和b求偏导并 ∂L∂w=0⇔w=i=1N ∂L∂b=0⇔i=1Na由最优化问题的对偶原理,可得到原问题的对偶问题:L(w,b,a)=i=1N满足i=1求解出对偶问题的最优解,设用ai*表示最优的Lagrange乘子, wo=i=1Nab0=1-w0x因此判断函数gx=sgnw第3章总体方案3.1功能需求本文基于可穿戴计算的思想将主要集成了三轴加速度传感器、陀螺仪、蓝牙模块和Atmel168微控制器的模块置于可穿戴背心上,实时采集老年人在日常生活中的活动数据,通过蓝牙传送到手机端。手机对数据进行处理和分析,当检测到跌倒发生时,提醒用户并采取报警措施。3.1.1场景描述(1)用户穿着可以自动捕获活动信息的可穿戴计算背心活动。(2)传感器按每秒100次的频率实时获取用户活动的三轴加速度和角速度信息。(3)可穿戴计算背心将采集到的数据通过蓝牙(速率:B/S)实时传送给智能手机。(4)智能手机存储接收到的数据,并按照一定的算法分析数据,判断用户是正常活动状态,还是跌倒状态。(5)若检测出用户跌倒,且用户在5秒内没有响应,手机按照预设的报警方式报警(报警方式可以为:响铃、发短信、拨打电话)。(6)系统检测出跌倒后,用户可以再5秒内取消报警。(7)手机自动通过GPS获得当前位置信息,并给手机中预设的联系人(如家庭成员、健康护理中心、医院)发送报警短信。(8)用户可以设定联系人(内容包括:姓名、联系电话)和报警方式。3.1.2用例分析图3.1系统用例图本系统的主要参与者是用户(老年人或病人)和接收报警的联系人(家人或医护人员)。图3.1为系统总体的用例图。如图所示,系统以每秒100次的频率采集用户的日常活动数据、用户可以报警和取消报警、设置联系人、设置报警方式;联系人可以接收报警信息,及时提供救助。描述用例场景最常用的手段是顺序图,如图3.2为整个系统的顺序。由图可知,用户首先启动系统连接采集活动数据的设备,系统会自动进行初始化和校准,之后开始实时采集数据并通过蓝牙传送到智能手机,当系统检测到跌倒发生时会询问用户是否确认报警。图3.2系统顺序图3.1.3典型用例行为描述用例数据采集行为描述如下:用例:数据采集用例:数据采集用例描述:采集老人日常活动的三轴加速度和角速度数据参与者:可穿戴设备前置条件:用户已经穿上装有传感器和主板的可穿戴背心,设备已启动。行为序列:用户穿着可以自动捕获活动信息的可穿戴计算背心活动加速度传感器采集三轴加速度信息陀螺仪采集三轴角速度信息处理器控制传感器的采样频率(每10ms采集一次)异常:取消:用户退出跌倒检测系统,系统停止采集。后置条件:系统通过蓝牙将采集到的数据实时传送到智能手机。用例跌倒检测行为描述如下:用例:跌倒检测用例:跌倒检测用例描述:系统对接收到的用户的活动数据进行处理分析,按照一定算法检测跌倒是否发生参与者:智能手机前置条件:手机接收到采集的活动数据行为序列:系统存储接收的数据对接收到的数据进行匹配,丢掉不符合格式的数据,在手机屏幕上显示结果与加速度阈值比较,判断跌倒冲击是否发生与加速度阈值比较,判断跌倒冲击是否发生与倾角阈值比较,判断是否满足跌倒行为特征如果系统判断跌倒发生,则进行报警异常:取消:用户退出跌倒检测系统,系统停止检测。后置条件:系统检测到跌倒调用报警模块;系统未检测到跌倒继续进行实时监测。用例报警行为描述如下:用例:报警用例:报警用例描述:系统检测到跌倒发生后进行报警求助参与者:用户、智能手机前置条件:系统检测到跌倒发生或用户主动按按钮报警行为序列:主动报警为系统监听用户的按钮操作若用户点击报警按钮,系统读取报警方式设置响铃、短信、打电话报警调用相应的实现方法自动报警是系统实时监测用户活动状况若系统监测到跌到发生,系统读取报警方式设置响铃、短信、打电话报警调用相应的实现方法异常:取消:用户退出跌倒检测系统,系统停止检测;系统监测到跌倒后已经报警,不再进行二次报警。后置条件:用户听到响铃;联系人接到报警短信或电话。3.2性能需求3.2.1性能需求性能描述实时性系统每秒100次实时采集数据响应性系统检测到跌倒后用户5s内做出响应易用性界面友好低耗性降低功耗安全性设备不会对人有危险;保证设备不易损坏3.2.2性能补充描述(1)实时性要求系统能够实时地不断地采集用户在日常活动中的数据,如图3.3所示传感器的采样频率为每秒100次,蓝牙实时传送的速率为bps。图3.3系统实时性(2)响应性图3.4系统响应性系统对于跌倒的发生要能及时作出响应。为了尽量避免误报,系统检测到跌倒后响铃提醒用户,5s内用户没有做出没有响应系统再进行报警,如图3.4。(2)易用性系统的界面是用户与系统交互的媒介。由于系统所面向的用户多为老年人,他们不具备专业知识,所以界面在设计时应尽量简单、友好,显示的字体要尽可能的大,方便老年人或者不熟悉系统的用户操作。(3)低耗性该系统可能会长时间的运行,因此要保证尽量低耗能,系统采用3.7v锂电池供电,并可以通过usb串口充电。安全性由于用户需要长时间佩戴该设备,设备不能具有危险性,不能影响用户的正常活动。另外应保证设备在摔倒过程中不易损坏。3.3系统架构图3.5系统架构图系统总体架构图如图3.5所示,传感器节点在用户穿的可穿戴背心上,用来采集用户的活动数据,并通过蓝牙发送到手机;手机上的软件进行跌倒检测,若系统检测到跌倒发生则通过GSM网络,将消息以短消息或者电话的形式通知给家人或医护中心。第4章系统设计与实现系统的设计分为可穿戴设备和智能手机端两部分。可穿戴设备端的软件在Arduino环境下开发,采用类C语言。智能手机端软件在Android平台下运行,采用Java语言在Eclipse环境下开发。4.1可穿戴设备软件4.1.1设计可穿戴设备端的软件使用已有的数据采集和传送模块,采用简单的轮询结构,程序依次检查每一个I/O设备(传感器、蓝牙),为需要的设备提供服务。微控制器控制传感器的采样频率和蓝牙的传输速率,是系统能够每秒100次实时采集和传送用户的三轴加速度和角速度信息。图4.1可穿戴设备端类图可穿戴设备端类图如上图4.1所示,主要有初始化Initial、加速度Acceleration、角速度AngularVelocity、传输数据Transmit几个类。Initial:系统启动连接后,需要对各个设备进行初始化,由微控制器MCU设置传感器的采样频率sensorSpeed和蓝牙的传输速率BluetoothSpeed。同时传感器还需要进行校准,以便更精确的采集数据Acceleration:由于系统采用的是三轴加速度传感器器,因此在加速度信息类中有三个属性ax、ay、az分别表示方法getAcceleration()获得到的三个方向的加速度值。另外acc表示计算后的合加速度。AngularVelocity:同样系统采用的陀螺仪采集三轴角速度,因此角速度信息类中的三个属性gx、gy、gz分别表示getAngularVelocity()得到的三个方向的角速度值。Transmit:Transmit类对系统计算所得的合加速度acc和采集到的三轴角速度gx、gy、gz进行实时传送。4.1.2实现数据采集和传输模块是在Arduino环境下使用类C语言实现的,通过Arduino开发软件向板子内烧写程序。在4.2节中介绍了开发板的跳线连接,要烧写程序需要将MCU和串口USB连接,使用USB数据线连接开发板和PC,。然后通过Arduino开发软件将程序下载到板子中,如图4.2所示图4.2烧写程序在程序中设计了两个函数getAccelerometerData()和getGyroscopeData()分别获取三轴加速度数据和三轴角速度数据。由于人体的跌倒过程很短,所以要尽可能的提高传感器的采样频率,以提高判断的准确性。我们采用定时中断的方法设定传感器的采样率。首先添加头文件MsTimer2.h,这是一个定时中断库。定义一个中断标志flag,初始为0,当调用了中断函数时则flag=1。voidsetup()函数对Arduino板子的变量、库等进行初始化,代码如下。首先设定串口传输率为bps,之后初始化加速度和角速度传感器。MsTimer2是每隔10ms调用一次timer,即1s中断了100次,实现了每秒采集100次的频率。voidloop()函数是让程序循环地被执行。这段程序会一直重复运行直到Arduino被关闭。flag标志用来判断是否发生中断。为了便于后续操作,我们在Arduino开发板上计算出三轴加速度的合加速度。Arduino上数据的传输通过串口的输出Serial.print()实现。为了测试传感器模块的运行,我们可以通过串口调试工具读取采集的数据,如图4.3所示,包括了计算完的合加速度和三个方向的角速度。图4.3串口读取传感器采集数据4.2智能手机端软件手机端的软件运行在Android系统的手机上,手机通过蓝牙接收到用户的活动数据,通过一定的算法检测跌倒是否发生。当系统检测到跌倒发生时,及时采取报警措施为用户提供帮助。图4.4手机端软件体系结构手机端的软件体系结构如图4.4所示,系统主要涉及到手机中的以下几个模块:微处理器负责整个系统的控制;蓝牙接收可穿戴设备端传送来的活动数据;屏幕是与用户交互的媒介,屏幕上显示跌倒的相关信息和通讯录的内容等,用户通过触摸屏幕对系统进行操作;GPS定位获取用户所在的位置信息,并通过与Google地图交互得到具体的地址;当系统检测到跌倒后,首先调用手机的音频功能发出报警铃声提醒用户,之后可以通过GSM模块向家人/监护中心发送报警短信和电话。根据系统的功能需求和体系结构我们提取出一下几个主要类,见图5.5手机端类图。图4.5手机端类图4.2.1ReceiveData类ReceiveData类主要通过手机内置的蓝牙实现。手机通过蓝牙连接上可穿戴设备,接收到的数据data的数据类型为string。该类的蓝牙功能的实现参考AndroidSDK提供的BluetoothChat源代码。蓝牙模块分为三个类。主Activity控制蓝牙设备的启动和连接,DeviceListActivity是已配对的蓝牙设备的ListView显示,BluetoothChatService是蓝牙服务的具体实现。首先在AndroidMainfest.xml文件中添加使用蓝牙的权限,如下图。在主Acitivity的onCreate()方法中获得BluetoothAdapter实例,BluetoothAdapter是一个本地蓝牙设备。onStart()方法里,判断本地蓝牙是否可用,可用的话启动相应的activity;onResume()方法判断BluetoothChaService的有无状态。我们在主Acitivity时可以进行菜单操作,选择启动设备,会跳转到DeviceListActivity。在DeviceListActivity中会显示已配对的蓝牙设备和搜索到的蓝牙设备,并注册item点击监听器,将点击的蓝牙设备的名字传回到主Activity中。BluetoothChatService这个类中有三个主要内部线程类。privateclassAcceptThreadextendsThread():创建监听线程,准备接受新连接。privateclassConnectThreadextendsThread():这是定义的连接线程,专门用来对外发出连接对方蓝牙的请求和处理流程。privateclassConnectedThreadextendsThread():这个是双方蓝牙连接后一直运行的线程。图4.6为主界面的菜单,用户选择启动设备后会弹出已配对的蓝牙设备,若没有要连接的设备,可选择查找设备,搜寻没有配对的可用蓝牙设备。图4.6连接蓝牙设备4.2.2DataProcess类设计DataProcess类是对接收到的数据进行处理的一个过程。首先由于传输过程中的不稳定等问题,可能造成接收到的数据不完整,因此需要进行正则表达式匹配去掉不符合的数据。这样留下的数据是格式为”a=XXX,x=+/-XXX,y=+/-XXX,z=+/-XXX”的字符串,我们需要对其中数值进行提取,得到double类型合加速度和三轴角速度值,以便用于跌倒检测中计算。DataProcess主要涉及到如图4.7所示的几个类,Matcher类提供的matchers()方法可以将数据data与给定的正则表达式pattern比较。若符合正则表达式的格式,调用ListView类中的相关方法在手机的屏幕上显示接收到的数据。为了提取字符串中的数值,定义了一个divide类,通过调用Java相关支持包中的string类的substring()方法和indexof()方法将字符串分隔,调用double类中valueof()方法将数值部分由字符串类型转换为double类型。图4.7DataProcess类图实现方法在该类中创建了一个handler对象进行消息处理,在其中publicvoidhandleMessage(Messagemsg)这个消息处理函数中对读取到的数据进行匹配。由上图,对接收到的数据根据正则表达式进行模式匹配,满足”a=XXX,x=+/-XXX,y=+/-XXX,z=+/-XXX”格式的字符串将在手机屏幕上显示,如下图4.8所示。之后对接收到的符合格式的字符串进行提取数值的处理。由于字符串的格式为”a=XXX,x=+/-XXX,y=+/-XXX,z=+/-XXX”,要通过substring()的方法分割字符串,提取出”=”和”,”之间的a、x、y、z的数值。图4.8手机界面显示接收的数据4.2.3FallDetection类FallDetecttion类是跌倒检测系统的主要类,它通过一定的算法对用户的日常活动进行实时监测,判断用户是否处于跌倒状态。在2.3节中已经对跌倒检测的算法进行了介绍,此部分主要为算法的设计。图4.9跌倒检测算法类模型本系统采用了阈值分析法,如图4.9算法类模型,主要思想是将采集到的数据与确定的阈值进行比较比较。其中DataSample类中是经过处理的采集的数据,a为当前时刻的合加速度,angle为2s内通过Math类中sqrt()函数计算得到的合角速度。Threshold中是确定的阈值,其中a1为合加速度阈值,b为角速度阈值。如果采集到得合加速度和角速度都超过了阈值,则判定为跌倒。图4.10跌到检测算法流程图跌倒算法的主要流程见图4.10所示,系统读取2s内的活动数据,首先将合加速度与加速度阈值比较,若超过了阈值则继续比较角速度,否则返回上一步循环读取数据;若角速度数据也同样超过了角速度阈值则判定为跌倒进行报警,否则返回第一步。算法实现如下:isDown为为跌倒标志,因为如果用户已经是跌倒状态系统则不会再进行检测。a1和b分别是人体合加速度和上躯干偏离竖直方向倾角的阈值。当系统判断加速度超过阈值后会进行角速度判断,若倾角也超过阈值,令isDown=true并调用相应的报警模块;若倾角没有超过阈值,则可能是由于人的某些加速跑运动造成了加速度超过阈值,令isDown=false。4.2.4Alert类设计由于人体跌倒各种情况的不确定性,系统可能会造成误报。为了完善系统的功能,提高系统的实用性,将Alert类分为了两种情况:一种是用户自己主动报警,一种是系统在检测到跌倒后自动进行的报警。当用户只是轻微跌倒系统没有报警时,用户可以自己选择报警;而当系统进行了误报或者用户不需救助时可以取消报警。Alert类图如图4.11所示。图4.11Alert类图getSettings类:通过getBoolean()方法分别读取设置界面中保存的三个check设置值。Alert类:Alert类中根据读取到的设置值调用相应的类。MediaPlayer类:该类是Android包中提供的用于控制音频/视频文件或流的播放。我们需要指定一个路径path下的MP3格式文件,相关的方法prepare()、start()、stop()、reset()、release()可以控制音频的播放停止等。SmsManager类:该类是Android提供的用于发送短信的类。String类型的message为要发送的短信的内容,phone为联系人的手机号码,调用sendMultipartTextMessage()方法完成短信的发送。Intent类:拨打电话只需要调用该类下的Actial_Call()方法拨打指定的电话号码phone即可。报警短信的内容为“我摔倒了!经度:xxx纬度:xxx地址:xxxx”。实现方法报警模块分为用户自主报警和系统自动报警。要调用发短信和打电话的功能,首先要在AndroidMainfest.xml文件中添加权限。用户主动报警在主界面完成。在主界面上添加一个报警按钮并进行监听。当用户点击了该按钮后弹出一个是否确认报警的对话框。如果监听到确认被点击,则系统开始按照设定的报警方式报警。首先从通讯录中读取储存的联系人的电话号码。然后对设置界面保存的值进行判断,如果check1响铃为true则调用Alarm()函数,通过Android的MediaPlayer方法来实现响铃。如果check2发短信为true则跳转到GPSactivity,该activity获取了用户所在的地理位置并通过短信发送。当check3打电话为true则通过intent调用系统的拨打电话的功能。系统自动报警和用户主动报警的大体相差不多,只要在跌到检测模块检测到跌倒后调用相应的报警功能即可。但为了尽可能地避免误报,我们需要把报警延迟5s,给用户一定时间可以取消报警。定义一个msg变量来记录用户是否对确认报警对话框进行了操作,sendMessageDelayed()为延时5s发送信息。用户如果点击了确认或取消按钮则进行相应的报警或者取消并将msg改为msg_Done,表明用户对报警做出了回应。最后如果msg为msg_None,那么用户就是在5s内没有对报警对话框做出相应,按着自主报警的读取联系人号码进行相应的报警操作即可。Android系统发短信的实现需要调用相关支持包的方法,sendMultipartTextMessage()方法是避为了当短信的内容过长时,可以将短信分为多个部分发送。Phone为string类型的手机号码,messageArray为短信的内容,其他参数均为null即可。Android打电话功能的实现需要调用Intent包中的相关方法,通过Uri.parse()方法将用户要拨打的电话号码带入。注意传入的Uri的数据,电话的前缀为“tel:”。响铃的实现需要在工程中导入android.media.MediaPlayer和Android.media.MediaPlayer.OnCompletionListener这两个包,在指定路径放一个mp3格式的音频,则可通过提供的相关方法播放、停止音乐等操作。4.2.5getSettings类系统提供了三种报警方式:响铃、发短信、打电话,需要用户自己在设置界面进行设置。设计如图4.12所示getSettings类图,主要以下几个类。图5.12getSettings类图Preference类:在Android中提供了一套基于Preference的类,通过编辑xml文件就可以实现设置界面,而且可以进行参数的保存。定义三个可以勾选的复选框checkbox分别表示响铃、短信和电话,使用setOnPreferenceChangeListener()方法进行监听Settings类:声明三个boolean类型的check值分别代表三个设置选项,若用户勾选了复选框则为true否则为false。当用户点击了某一项时触发onPreferenceClick()方法,判断是哪一个被点击。onPreferenceChange()方法是当Preference的值发生改变时触发该事件,true则以新值更新控件的状态。设置界面显示到手机的屏幕上是通过settings类的addPreferencesFromResource()方法完成的,该方法将xml中定义的界面添加到程序中。实现方法SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存。android.content.SharedPreferences接口提供的获取系统中保存的持久化数据的方法publicstaticSharedPreferencesgetDefaultSharedPreferences(Contextcontext):PreferenceManager的静态函数,保存PreferenceActivity中的设置,属于整个应用程序,但是只有一个,Android会根据包名和PreferenceActivity的布局文件来起一个名字保存。为了方便我们使用PreferenceActiviy来制作设置界面,Android系统提供了和设置界面相关的包android.preference,其中有一个继承了ListActivity的PreferenceActivity。首先在xml文件夹建立一个settings.xml文件,代码如下。我们在界面中定义了三个CheckBox,这是一种设置界面中常用的复选框。在onCreate()函数中添加addPreferencesFromResource(R.xml.settings);从一个xml文件中获取preference然后显示设置界面。当PreferenceActivity中的内容改变时,Android系统会自动进行保存,我们只需要在要用的设置界面中数据的地方进行读取就可以了。同时Android还提供了OnPreferenceClickListener和OnPreferenceChangeListener两个与Preference相关的监听接口,当PreferenceActivity中的某一个Preference进行了点击或者改变的操作时,都会回调接口中的函数,这样可以第一个时间向其他Activity等通知系统设置进行了改变。在主Activity添加如下代码,就可以在系统中读取保存的设置值。check1,check2,check3为boolean型分别用来保存三个报警方式(响铃、短信、电话)的设置,true为选择,false为不选,用来之后的报警模块使用。图4.13为设置报警方式界面,用户可以选择一项或多项报警方式。图4.13设置报警方式4.2.6Contact类为了在用户跌倒后能够提供及时救助,系统定义了Contact类来储存联系人(用户的家人/监护中心)。用户能够添加、修改、删除联系人,联系人的信息包括姓名和手机号码。通讯录表的设计如下:索引字段数据类型0IDint1namestring2phonestringContact类实现系统的通讯录功能,让用户输入报警时通知的联系人,用户可以进行添加、删除、修改操作,联系人的信息包括姓名和手机号码。该模块的实现需要涉及到SQLite。SQLite是轻量级的、嵌入式的数据库,目前已经在Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。Android在运行时(run-time)集成了SQLite,所以每个Android应用程序都可以使用SQLite数据库。在Android开发中使用SQLite相当简单,只需要掌握一些API。下面是通讯录模块涉及到的类。Contacts为该模块的主要Activity。创建表contactColumn类实现了表的创建。由于通讯录不是主要模块,我们只需要设定联系人的姓名和手机号码即可。创建数据库Android不自动提供数据库。在Android应用程序中使用SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android提供SQLiteOpenHelper来创建数据库,只要继承SQLiteOpenHelper类,就可以轻松的创建数据库。SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper的子类,至少需要实现三个方法:ContentProvider共享数据ContentProvider的作用是对外共享数据,也就是说可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。ContactEditor类为对通讯录进行具体的操作,下面是相应的通过contentResolve来对contentProvider中的数据进行添加、删除、更新操作。mUri代表要操作的ContentProvider和对其中的什么数据进行操作。在contactProvider中定义了Uri是要对联系人进行操作。图4.14是通讯录的主界面,显示了储存的所有联系人,图4.15为编辑联系人信息的界面。 图4.14通讯录界面 图4.15联系人编辑界面4.2.7Position类用户跌倒后,系统需要对用户所在位置进行定位,以便家人/监护中心能够更快找到用户提供及时救助。定位主要通过手机自带的GPS功能实现,可以获取到所在位置的经纬度坐标,然后通过Google地图的相关API转换成地址。Position类图如图4.16所示。图4.16Positon类图LocationManager类:LocationManager类是系统位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题。如getLastKnownLocation()方法获取最近一次的位置,requestLocationUpdates()方法可以周期性的获取定位信息。Location类:Location类主要提供了一些获取定位信息的方法。首先要建立一个location对象,通过调用它的getLongitude()方法可以得到double类型的经度lngPoint,getLatitude()方法可以得到double类型的纬度latPoint。getLocation类:负责与其它类的交互,。HttpClient类:为了将经纬度坐标与地址进行转换,需要建立一个HttpClient对象向一个http地址发送请求,方法execute()可以取得服务器的响应。GoogleGecorder类:该类由google服务器完成反向地址编码,是googleMap提供的免费服务。要调用Android的gPS功能需要在工程中导入相关的包,声明一个LocationManager对象,通过requestLocationUpdate()方法周期性地获取定位信息。getSampleLocationAddress()是自己定义的获取地址信息的函数,具体实现方法如下。声明一个Location对象,通过getLatitude()和getLongitude()方法获取所在位置的经纬度,如果得到的信息为null则做出提示。为了便于监护中心更迅速地对摔倒的位置进行定位,我们将获取的经纬度坐标通过google提供的gecordingAPI进行反向地理编码得到位置的地址信息。Google提供了一个http地址,将相应的参数设为经纬度即可查询所表示的地址,该操作也可以在PC上的浏览器实现。在Android程序中,声明一个HttpClient对象,通过访问uri地址取得该服务器的返回信息即地址信息,保存在responseData中。第5章测试与实验5.1运行测试可穿戴设备子系统置于人体上躯干,负责采集用户的日常活动的三轴加速度和角速度信息。如下图5.1绿色的是集成了三轴加速度传感器、陀螺仪、蓝牙和Arduino处理器的开发板,由3.7v锂电池供电,电池可以通过USB串口进行充电。图5.1硬件部分软件部分负责接收活动数据并进行跌倒检测,同时具有通讯录、报警、定位的功能。下图5.2为手机上运行软件的主界面,考虑到使用者大多为老年人,所以界面尽可能简单。用户穿戴了数据采集传输模块后,通过蓝牙连接设备实时采集活动数据。 图5.2主界面图 5.3提醒报警界面当系统检测到跌倒发生时,系统会响铃并弹出如图5.3的一个对话框。用户可以确认或取消报警,若5s内没有做出响应,系统将自动报警。报警方式包括发短信和打电话,如图5.4为拨打电话界面,图5.5为联系人接收到的报警短信。 图5.4拨打电话界面图 5.5联系人接收得报警短信5.2实验分析为了检测跌倒,本文设计将进行如下实验:行走、坐下-起立、蹲下-起立和摔倒。其中20组作为训练样本,用于计算阈值,20组作为测试样本,用于检验跌倒识别的正确率。5.2.1实验数据分析 图5.6坐下-起立的合加速度变化图5.7蹲下-起立的合加速度变化图5.6和图5.7分别为坐下-起立、蹲下-起立过程中合加速度的变化情况。其中,横轴表示运动时间,单位为0.1s,纵轴为合加速度的相对值。由图可知,在坐下或蹲下过程中,合加速度先增加,到坐到椅子上或者蹲到地上时,加速度迅速下降,再上升到相对平稳;当人体起立时,合加速度会减小,然后上升至波峰,之后加速度开始下降直至恢复相对平稳。图5.8行走-跌倒过程中合加速度变化如图5.8所示为人体在行走-跌倒过程中合加速度的变化情况。可以看出,人体在行走过程中合加速度变化较小,且呈周期性变化;11~13秒之间,加速度发生剧烈变化。在跌倒时,人体从高位到低位合加速度增加,落地时地面向上的弹力会使加速度迅速减小,最后恢复到相对平稳的状态。 图5.9行走的合角速度变化图5.10坐下-起立的合角速度变化 图5.11蹲下-起立的合角速度变化图5.12跌倒的合角速度变化图5.9—图5.12分别为行走、坐下-起立、蹲下-起立、跌倒的合角速度变化。可以看出,一般情况下合角速度处于较平稳的状态,当坐下-起立、蹲下-起立、跌倒时,合角速度发生变化,其中跌倒过程中的合角速度变化最为剧烈。根据整理后的训练样本数据,使用统计分析的相关方法,为了获得最大的识别准确度,将加速度阈值at设为统计数据中的最小值,即633。倾角阈值θt也设为最小值,即根据SVM算法得到的加速度阈值at为647,角速度阈值θt为5.2.2跌倒识别评估为了对两种方法得到的阈值进行评估,通常定义以下评估方式进行分类模型的性能评估。Sensitivity=TPTP+FN×100% Specificity=TNTN+FP×100%Sensitivity被称为正例的覆盖率,Specificity被称为负例的覆盖率。TP(TruePositives)为正确识别出跌倒的样本数量;FN(FalseNegatives)为将跌倒判断为日常行为的样本数量;TN(TrueNegatives)为正确识别出日常行为的样本数量;FP(FalsePositives)为将日常行为判断为为摔倒的样本数量。表5-1基于统计方法的跌倒识别结果TotalCorrectWrong行走10100坐下-起立1091蹲下-起立1073跌倒20164Sensitivity=80%Specificity=86.6%表5-2基于SVM算法的跌倒识别结果TotalCorrectWrong行走10100坐下-起立1091蹲下-起立1091跌倒20182Sensitivity=90%Specificity=93.3%表5-1和5-2分别是基于统计方法和SVM算法得到的阈值的跌倒识别结果,根据公式(5-1)和(5-2)得到两种方法的正例和负例的覆盖率,可以看出SVM算法的跌倒识别准确率要优于统计方法。结论随着当今社会老龄化进程的逐步加剧,老年人跌倒造成的致病率、住院率和死亡率急速提高,带来了严重的社会经济负担。本文提出了一种基于三轴加速度传感器和陀螺仪的跌倒检测与报警系统,旨在通过科学的手段检测跌倒的发生并及时报警,以减少老年人跌倒带来的健康伤害和医疗开支。本文的主要工作总结如下:(1)根据系统的需求分析进行总体设计,从硬件和软件分别进行设计与实现。(2)通过分析人体跌倒过程中的运动学信息特点,得到区分人体跌倒过程与其它日常生活行为运动过程的依据:身体加速度变化和身体偏离竖直方向的倾角变化。完成基于三轴加速度传感器和陀螺仪的数据采集模块的实现,该模块可以以每秒100次的采样频率实时采集用户的日常活动数据。(3)完成Android手机平台上软件的设计。针对各个功能模块进行详细的设计与实现,在Eclipse环境下使用Java语言编写程序。(4)通过实验确定人体跌倒过程中加速度和身体倾角的阈值,实现基于阈值分析的跌倒检测算法。本系统通过实时检测人体的运动状态判断老人是否跌倒,当发生危险性跌倒时及时通过短信或电话进行报警,通知老人跌倒的位置信息。老人在感到身体不适时,也可以进行主动报警。此外系统还具有设定联系、设定报警方式的功能。该系统为解决老人发生跌倒时无法得到及时的救助提供了可行的方法。由于时间的限制,本系统还存在一些不足,希望未来在以下方面有所改进:(1)人体跌倒姿态的不具有规律性,各人在不同情况下发生的跌倒状况也不同,跌倒检测的准确性很难保证,可以采取一定的算法提高人体跌倒识别的准确度,如贝叶斯算法。(2)由于实验地点室内信号的限制,GPS经常不能获取经纬度坐标,这对系统使用的广泛性有很大影响,希望在未来完善GPS模块。(3)为使老人在跌倒后能够及时得到救助,可以在社区开发小型医疗救助网络。提供便携式人体跌倒检测设备,监测老年人的活动情况,发生跌倒时社区及时提供救助,减少等待时间。致谢时光荏苒,岁月如梭,转眼间大学生活即将结束。回首四年,我经历了成功、挫折,有过笑声、泪水。在这里,我度过了一段充实的校园生活,此时心中充满无限感激与留恋之情。值此论文完成之际,我诚挚地向我的导师何坚副教授表示感谢。他渊博的专业知识,严谨的治学态度,精益求精的工作作风,平易近人的性格对我影响很深。从选题到完成,每一次讨论和指导都让我收获很大。另外感谢老师为我提供良好的实验室环境,让我能够专心学习。论文的完成也离不开很多同学和朋友的关心和帮助。感谢研究生吴天昊和李杨对我在毕设中遇到的问题的耐心解答,感谢李学涵和宋玥在实验中提供的帮助,感谢张吉同学完成视频的制作。最后,我还要感谢我的父母,是他们一直以来的支持,促使我不断进步,我会更加努力,用更好的成绩作为回报。参考文献[1]沈爱英.社区老年人跌倒的原因分析及护理干预进展.解放军护理杂志.2009.[2]于南翔,陈东义,夏侯士戟.可穿戴计算技术及其应用的新发展.数字通信.2012.4.[3]李刚.疯狂Android讲义.电子工业出版社.2011.7.[4]杨丰盛.Android应用开发揭秘.机械工业出版社.2010.1.[5]康一梅.嵌入式软件设计.机械工业出版社.2008.6.[6]BrucePowerDouglass.嵌入式与实时系统开发—使用UML、对象技术、框架与模式.柳翔等译.机械工业出版社.2005.3.[7]朱成果.面向对象的嵌入式系统开发.北京航空航天大学出版社.2007.9.[8]MarkL.Murphy.BeginningAndroid2.李雪飞等译.人民邮电出版社.2010.2.[9]昊斯特曼.Java核心技术:卷Ⅰ基础知识.叶乃文等译.机械工业出版.2008.6.[10]达尔文.Java经典实例.关丽荣等译.中国电力出版社.2009.[11]孙即祥.现代模式识别.高等教育出版社.2008[12] C.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论