读本篇博客之前最好先看一下上篇博客,点击蓝色字链接即可。
从上篇博客我们可以看出,国外对于步态的研究是很重视的,有专门的步态实验室,以及豪华的实验室配置,还有必不可少的严谨的研究态度。我们学校的实验室相对而言“一穷二白”。考虑到“骨感”现实条件,没有可能采用视觉动作捕捉系统、测力板(GRF)、商业化测力鞋F-Scan,不禁慨叹,科研真得是有钱人的智力游戏,还不能差耐心和兴趣。针对慨叹这句话,这里不考虑“灌水行为”以及“开局一张纸,数据全靠挑(懵)”的情况。哈,忍不住调侃一下,总之,我相信,随着2020年我国全面建成小康社会,会越来越好的。
其实开局不止一双鞋,还有一台跑步机。这双被我玩坏了的鞋,主要是一个单片机的信号采集系统。8个FSR通过一个8路模拟开关选择一路进入运放后由单片机ADC采样计算压力。PCB上的惯导,可以测量芯片坐标系下的三轴加速度、角速度数据。蓝牙模块用来连接上位机显示数据波形。为了防止FSR受鞋面弹性影响,我在每个FSR采样点下垫了一块圆形碳板,并用AB胶把整个FSR鞋垫固定在了鞋面上。接插件或者线材用胶带或者热熔胶固定。这里还要插一句,几年的嵌入式功底,PCB硬件、软件都可以做,对我科研帮了大忙。
这里要表扬一下匿名科创的地面站,虽然有一些让人抓狂的bug,但是能够实时显示波形这一点让我很是开心。
下图是我抠自我做的PPT的截图。
这里采集的是鞋子俯仰这个轴的角速度,只是单脚的信号,跑步机速度1km/h。由于角速度对震动不敏感,我们可以看到,相对加速度数据而言,角速度波形干净的不像话。很少有图片右上角那样的噪声,而且在“零点”处噪声更小。分析一下便可知道,角速度信息包含了站立相划分的所有信息。这基于两点假设:
1.后跟抬起角度最大时:脚尖离地
2.脚尖仰起角度最大时:脚跟触地
至于验证的话可以用视觉动作捕捉系统、侧力板,或者鞋中的FSR,但由于FSR的滞后特性,我还没试FSR可不可以和角速度联调来验证。角速度是角度的微分,角速度的零点是角度的极值点。接下来分析一下这张图
1.一开始双腿并拢站立静止
2.后跟抬起的角速度方向为正,静止过后脚跟抬起形成第一个凸峰,第一次零点发生在第一个红圈处,这时后跟抬起角度达到最大值。最大值处认为脚尖离地事件发生。
3.接下来的凹峰是摆动相,并在第二个红圈处达到第二个零点,此时角度为脚尖抬起的最大角,认为此时脚跟触地。
4.接下来的一个小尖凸峰是脚放平的过程。
5.接下来的一段直线是脚放平不动的过程。 接下来又到2了,周而复始。
接下来看加快速度会发生什么,下图可以看出,角速度幅值和步行速度是正相关关系。
将足部的运动看作上下运动,应该是一个 向上加速—>向上减速—>向下加速—>冲击着地 的过程。这里应该是重力方向的加速度数据,不是IMU的Z轴的数据,所以采用Manhony算法进行解算四元数,求出重力方向在IMU坐标系下的单位向量,和加速度计数据进行点乘,即投影到重力方向。
我们看到加速度数据所包含的信息比角速度少很多,而且波形噪声很大。这是在跑步机上采集的数据,跑步机上有一定程度的减震措施。这种噪声并不是加速度传感器的问题,加速度计测量加速度必然不会滤掉冲击造成的噪声加速度。学过信号处理的应该都知道,冲击时间越短,冲击加速度噪声越严重。
垂直速度是靠加速度的积分获得的。等式右边是向量点乘,求得重力方向的加速度数值,并减去重力加速度(单位cm/ss),这里的978.8f是通过调节积分后的速度曲线来的,让静态时速度积分基本为零。
要想求得速度,上电即进行积分是不行的,此时Manhony还没收敛,算出的四元数或者说重力方向是不对的。所以要有一个判断收敛的条件,这里我每次在10个点中去掉一个旧点,增加一个新点,并判断这10个数据的均值和方差,如果小于一定阈值即认为收敛了。然后采用梯形积分,也可以认为是采用上一个加速度值和本时刻的加速度求平均(滤波),在乘以时间,进行累加(积分)。
这是一张总趋势图,我们可以看到,由于加速度图中冲击加速度大部分是正的,这里速度表现出很快的正向漂移。再来看一下局部速度图
不考虑漂移,以每一周期的比较平的段作为速度零,脚跟抬起速度为正,但是脚整体下落应该有速度为负的情况,这里一周期中并没有出现速度为负的情况,所以这里的速度应该是不对的,并且是由加速度冲击造成的。这里有一种改进方法,但我猜效果不大,就是在平整段结束时刻,将速度和位移置为零,即所谓的零速更新算法。但可能有点效果,如果把冲击加速度放在一个周期的最后,进入平整段后速度和位移置零,可能消除其影响。下一阶段试一下。
虽然FSR是很玩具级的压力传感器,其重复性、精度、稳定性、滞后性很差劲。但是其具有柔性,关键是很薄,具有很友好的可穿戴特性,所以还是采用了FSR这种压力测量传感器。一开始不知道怎么处理这8个压力点的压力数据,毕竟有点多,受上一篇文章启发,算一下CoP的y坐标,看能发现什么。
CoP的最高点,脚尖处压力最大,可以认为脚尖下一时刻离地。
CoP的最低点,脚跟处压力最大,可以认为脚跟此时刻触地。这里的效果不好说,由于FSR本身带来的滞后,以及模拟开关开关速度有限(每过10ms采集一个通道的数据并打开下一通道的开关,在下一10ms时采集)。如果没有滞后,这里脚处于摆动相的时候应该有一段接近0的平整段,就像角速度信号平整段一样。这里的滞后可以把模拟开关去掉,用8个ADC采样来改善,但我觉得效果不大,主要原因在于传感器本身。
这里鞋子俯仰角波形并不好,是由于Manhony的算法收敛速度造成的,可以看到几乎没有像角速度一样的中间的平整段。可以采用EKF算法来解决,但是计算量偏大,我用EKF算法时造成呼吸灯,直接由呼吸变为了闪烁,说明超时略大。在这里一个是采用操作系统或者采用计算速度更快的STM32F4单片机。不想改了,先暂且看看效果。
先来处理角速度数据,从简单做起,先来区分角速度信号的平整段和非平整段。我一开始想到了均方差和均值,那就来看一下吧。
这里的方差均值的计算和上面判断收敛的时候一模一样。10个数据的buffer,每次采样到一个角速度就去掉一个旧点,增加一个新点,计算10个点的均值和均方差。上图中黄色线时均方差曲线。可以看到均方差还是很灵敏的,在刚出平整段时反应剧烈,进入时同样。但是有一点要指出,在角速度极值点处,均方差为0,所以单靠均方差和阈值比较这一点来判断平整段与否是不够的。
那就先把平均值一起来进行判断试一试。下面是平整段FlatArea的判断函数,如果是则返回true
下面是最终结果图,此时是慢速步行的区分图
可以看到还是比较好的进行了区分,只是在某些点处区分的不是很好。
然而随着速度的加快,方差给的过于严格,这时区分效果就不好了,由于平整段的角速度没有低速时那么好。
角速度信号还是偶尔会出现过零的毛刺。这是需要在下一步解决的。对于步态的划分,目前做到这里。下一步打算解决角速度信号的过零毛刺问题、给均方差、均值的标准一个合理的阈值、角速度和其他信号(CoP)联调。姑且写道这里,有点累……