My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
WhatWeDidDuringTheSummerHoliday  
Updated Dec 23, 2009 by goldenbe...@gmail.com

Sun spot暑期工作汇报

一. 总述

在暑期的不长的一段时间内,我们小组为了解决老人摔倒的识别问题主要从两方面入手。一是通过试验,收集人体摔倒时,所测数据的特征,为寻找一种判别方法提供数据支持;二是上网寻找他人解决该“摔倒识别问题”的算法,并从中选取一种较好的方法。

二.实验

  实验设计思想:通过传感器,我们把可能和人体摔倒动作有关的物理量如加速度,角度等测量出来,另外对于和摔倒较为相近的动作和老人日常起居时发生的动作,例如坐下,慢跑等的数据也进行了测量。      实验设计目的:针对测得的数据所具有的特征进行分析,归纳,目的在于找出摔倒动作不同于别的动作的特征,从而顺利的设计算法进行准确的动作判别。      实验的具体操作: 1. 目前实验使用两个sun spot,一个作为基站与电脑相连,另一个测量sink节点放置在测试人员腰间,用于采集数据。对不同的动作如摔倒,走路,坐下,跑步分别进行数据采样,每种动作都进行多组的测量。 2. 传感器的采样,采样频率约为每秒100次。 3. 传输采集数据使用的协议:广播 4. 每次采样所得测量数据包括: (a) x,y,z三轴各自的加速度。(b)三轴的合加速度。(c)三轴各自相对于水平面的夹角。(d)测量点的时间。 5. 通过MATLAB的绘图,将测量的数据绘制成折线图作为原始数据的初步处理。 6. 针对于摔倒数据,由本小组三人完成,每人共实向后摔40次左右,测摔地点:弹簧床,数据表示为m1;5次左右真人向后实摔,测摔地点:地上数据表示为m2;100次左右利用两个捆绑起来的枕头(和高度约为1.5米)测摔,测摔地点:地上,数据表示为m3。

测得的实验数据: 以下只列出部分的实验数据。其中纵坐标为加速度,横坐标为时间单位。

图1:人体摔倒时合加速度的变化图线

图2:人体蹲下时合加速度的变化图线

实验数据分析: (a) 除了合加速度以外,其余各物理量与时间的关系十分复杂,特征以及规律不是十分明显,此处不再对其数据进行列举。因此,我们主要从合加速度入手,着重分析它的特征规律。 (b) 由图1,发现摔倒时加速度有一个较大的上限,和一个较小的下限,呈现在图线上,是出现明显的波峰波谷,且波谷基本上出现在波峰前面。 (c) 将摔倒动作和其余动作的合加速度的上下限进行对比,例如对比图1和图二,发现它们的区别明显。蹲下时合加速度的上限仅为1.4g, 而摔倒时加速度瞬间可以达到4g。 (d) 由图1,上下限的时间间隔,即波峰波谷的时间间隔十分短,大约在0.4秒左右。 (e) 数据比较:m1与m2,两组数据均由真人测得,摔在地上的得到的数据基本上只出现一次大的波峰波谷,波峰值比后者稍大;摔在床上得到的数据由于床的弹性,会出现多次波峰波谷,但基本上第一次波峰波谷最为明显波峰值比前者稍小。m2与m3,两组数据均摔在床上,m2由真人测定,m3由捆绑的枕头测定,由于两者均将测试仪器绑在中间位置,所以后者的捆绑位置与真人腰间的位置稍有区别,得到的数据大体上与真人摔倒类似。

结论:可以根据上述特征排除大部分的日常起居时发生的动作。从而可以极大的减小误判的概率,从而较为准确的识别摔倒动作。

三.自己设计的算法

由上述实验数据的分析,我们自行设计的算法如下: (a) 由于摔倒只是瞬间的动作,前后不超过1秒,因此,我们选取1秒为一个时间窗口,不断的对最近1秒内的数据进行判断。由预设的测量频率知1内大约有200个数据。其中时间窗口的起始点确定方式为:对每个收到的数据检测其合加速度是否超过上限,若超过,则说明老人可能摔倒,则以该点为时间窗口中点,对在该点之前的100个数据和随后收到的100个数据共200个数据点进行分析,这样一个约1秒的时间窗口即可以取出。 (b) 判断过程:如果检测到数据中合加速度>=上限,难么检测其前和其后各点数据的合加速度中是否有<=下限的数据,如果满足则判断老人摔倒,否则没有。 (c) 其他约束条件:例如如果老人是属于严重摔倒,那么摔倒后采集到的加速度值应该是不再变化的,维持在1g左右。 (d) 此外,同时可以根据采集到到的摔倒是的三个加速度的方向来判断老人摔倒的方向,不过由于涉及到机速度的方向,所以这与sun spot具体放置在老人身体的哪个位置有关,尚在研究中。

四.自行设计的算法准确性检验

这方面可能做的不足,我们将传感器佩在腰间,经过多次试验,没有发现误判的情况。但这有待进一步的验证。

五.相关算法论文学习结果

针对老人摔倒这一问题,我们较为仔细的阅读了发表的14篇论文,体会如下:

绝大部分的论文所采用的算法与我们的方法大同小异,都是通过寻找测得的加速度在时间以及数值上的特征来进行判断。值得补充的是有些文章还抓住摔倒前后人体由直立变成平躺过程中,身体角度的变化。另一篇文章还提到如果摔倒动作发生后,合加速度较长的时间内没有变化,那么说明老人摔得不轻,需要立即发出警报,如果摔倒后短时间内合加速度有了较大的变化,那么说明老人摔倒后又立即站起或者有了别的活动,(说明跌的不严重,不一定需要发出警报。)说明跌的不严重,可以对该情况发出低级别的警报。当然,对警报级别的确定,有待我们进一步集体的讨论。
但是上述算法都存在一个问题:由于他们都是针对特征进行判断,例如合加速度达到某个临界值,那么就说老人摔倒了,但是这个临界值的怎么科学的确定是一个问题。似乎一般的做法是通过摔倒实验然后人为的估计一个,基本上在3.5g左右,我们测量得到结果的为3.4g。 然而这些临界值的确定又在上述算法中至关重要,他们的获得,应该不能如此随便。针对该问题我们在《Fall Detection by Wearable Sensor and One-Class SVM Algorithm》一文中找到了答案。该论文简言之,就是通过数学手段,对测得的样本数据进行学习,从而获得较为准确的几个特征物理量的临界值。并且该算法中加入了一个松弛系数,模糊了判断的边界,使得判断时,对于处于临界值附近的数据判断有一定的伸缩性。

遇到的问题:对于《Fall Detection by Wearable Sensor and One-Class SVM Algorithm》的数学处理不是十分理解。 此外,考虑到其实老人最容易摔倒实际上是在洗澡的时候,但此时并不能够佩戴传感器,解决方案仍在思考中。

附 暑期工作日志:

7月18号,我们大致讨论了实验实施方案以及数据处理的大致思路。计划建立一个数据库,通过数据的比对来进行老人是否摔倒的判断。随后大家上网搜集关于人体摔倒的模型资料并且查找了关于曲线相似性算法的论文资料。 编写实验所用的测量程序,设计详细的实验方案。该程序是在SUN SPOT提供的API的基础上进行的编程。程序的要点如下:
1. Sink节点和移动测量节点间以广播形式发送数据。 2. 传感器的采样的频率约为20次/秒。 3. 在每个测量点上测量下列数据: (a) x,y,z三轴各自的加速度。(b)三轴的合加速度。(c)三轴各自相对于水平面的夹角。(d)测量点的时间。 4. 通过MATLAB的绘图,将测量的数据绘制成折线图作为原始数据的初步处理。 5. 测量点的时间是指sink节点接收到某一个数据包时的时间并非测量节点测量时的时间,但是这两者的差距很小。
7月20号,进行实验,每人佩戴传感器,各自测量10组摔倒动作的数据,各自测量5组坐下动作的数据,以及跑动时的数据。从这次实验中,我们大致观察到了实验数据构成的曲线的规律。对数据的分析如下:
(a) 发现摔倒时加速度有一个较大的上限,和一个较小的下限,呈现在图线上,是出现明显的波峰波谷。 (b) 将摔倒动作和其余动作的合加速度的上下限进行对比,发现它们的区别明显。 (c) 上下限的时间间隔十分短,大约在0.4秒左右。 (d) 除了合加速度以外,其余各物理量与时间的关系十分复杂,特征以及规律不是十分明显,因此,我们主要从合加速度入手,着重分析它的特征规律。 同时发现了实验设计的漏洞:加速度变化时的采样频率过低,致使图线绘制不精细。由此我们修改了原来的实验方案,修改测量程序,提高采样的频率。
7月21号,上网查资料着手进行电脑,手机,传感器的互联工作。我们初步计划通过移动公司开发的飞信平台进行二次开发。为此我们找到了飞信的一些API,并对其功能进行了大致的了解。 7月22号,在提高了采样的频率后(约为200次/秒)。再次每人各摔10次。重新采集数据。但是意外的是,实验中有多组数据测量明显错误,有的加速度数量级为10^5,有的合加速度为负值(与合加速度的计算公式:明显不符),而这些都是不可能的。致使多组数据被废弃。因此,我们进一步改进了程序以及处理数据的方法。改进的方法如下:
7月24号,扩大摔倒实验样本,并且用枕头以及纸盒构造人体模型,进行了100组摔倒实验。并且编写程序对实际测量数据进行统计分析。目的是找到波峰波谷这两个临界值的分布图。我们预计其分布为正态分布,所以计划找到其平均值,标准差,方差。
通过数据,我们原本预计上述两个临界值将各自成正态分布,但是结果并非如此。实验结果显示测量所得的两个临界值不是成正态分部。分析其原因在于:人体模型在整个100次实验过程中并非一样,枕头不时的从纸盒中滑落,每次将其塞回时主要由于塞入纸盒的深度不一致导致人体模型的重心不同,因而改变了重要的实验条件,因此临界值不成正态分布是理所当然的。 退而求其次,我们取了两个临界值的平均值作为程序中的判断条件。编写了判断老人是否摔倒的程序。 该程序设计的关键点是: (e) 由于上下限的时间间隔约为0.4秒,有测量的频率知:在该事件间隔内约有80个测量点,为了避免意外因素的干扰,程序将记录100个点的数据,留出一定的余量。 (f) 程序中有一个缓冲数组,记录最新100个接收到的测量数据点的数据。 (g) 判断过程:如果检测到数据中合加速度>=上限,难么检测其前各点数据的合加速度中是否有<=下限的数据,如果满足则判断老人摔倒,否则没有。 进行实际的检验,检验该判断方法的准确性。
7月25号,修改昨日设计的判别程序,并且进行实际的检验。 7月26号~28号,对网上的各种判别算法进行学习。

本文的下载超链接: http://hcsfsp.googlecode.com/files/Sun%E9%A1%B9%E7%9B%AE%E5%B7%A5%E4%BD%9C%E6%B1%87%E6%8A%A501.doc

《Fall Detection by Wearable Sensor and One-Class SVM Algorithm》论文下载超链接: http://hcsfsp.googlecode.com/files/Fall%20Detection%20by%20Wearable%20Sensor%20and%20One-Class%20SVM%20Algorithm%20.pdf

Powered by Google Project Hosting