三轴加速度计的原理和方法

现如今,很多现代人都非常注重自己的日常锻炼,计步作为一种有效记录监控锻炼的监控手段,被广泛应用在移动终端的应用中。

  目前,大部分的计步都是通过GPS信号来测算运动距离,再反推行走步数实现的。这种方法很是有效,但在室内或没有GPS信号的设备上无法工作。同时,GPS精度对结果的干扰也比较大。

  为避免上述问题的出现,我们可以考虑一种新的测步方法,即:通过设备上的加速度传感器来计算步数,在不支持GPS的设备上也可正常工作。还可以与GPS互相配合测步,这样可令使用场景变得多样。

  1.先要摸清模型的特征

  目前,大部分设备都提供了可以检测各个方向的加速度传感器。以iOS设备为例,我们利用了其三轴加速度传感器(x,y,z轴代表方向如图)的特性来分析。分别用以检测人步行中三个方向的加速度变化。

  


 

  iOS设备的三轴加速度传感器示意图

  用户在水平步行运动中,垂直和前进两个加速度会呈现周期性变化,如图所示。在步行收脚的动作中,由于重心向上单只脚触地,垂直方向加速度是呈正向增加的趋势,之后继续向前,重心下移两脚触底,加速度相反。水平加速度在收脚时减小,在迈步时增加。

  


 

  反映到图表中,可以看到,在步行运动中,垂直和前进产生的加速度与时间大致为一个正弦曲线,而且在某点有一个峰值。其中,垂直方向的加速度变化最大,通过对轨迹的峰值进行检测计算和加速度阀值决策,即可实时计算用户运动的步数,还可依此进一步估算用户步行距离。  



 

  2.计步的合理算法

  因为用户在运动中可能用手平持设备,或者将设备置于口袋中。所以,设备的放置方向不定。为此,通过计算三个加速度的矢量长度,我们可以获得一条步行运动的正弦曲线轨迹。

  第二步是峰值检测,我们记录了上次矢量长度和运动方向,通过矢量长度的变化,可以判断目前加速度的方向,并和上一次保存的加速度方向进行比较。如果是相反的,即是刚过峰值状态,则进入计步逻辑进行计步,否则舍弃。通过对峰值的次数累加,可得到用户步行的步伐。

  最后,就是去干扰。手持设备会有一些低幅度和快速的抽动状态,或是我们俗称的手抖,或者某个恶作剧用户想通过短时快速反复摇动设备来模拟人走路,这些干扰数据如果不剔除,会影响记步的准确值,对于这种干扰,我们可以通过给检测加上阀值和步频判断来过滤。

  


 

  人体最快的跑步频率为5HZ,也就是说相邻两步的时间间隔的至少大于0.2秒,如图所示,我们设置了timespan在记步过程中我们过滤了高频噪声,即步频过快的情况。同时我们通过和上次加速度大小进行比较,设置设立一定的阀值Threshold来判断运动是否属于有效,有效运动才可进行记步。

  3.关于计步器的扩展

  以上是一个依靠加速度测算的计步器实现原理,已知步行和跑步的步伐经验值,那么稍微改进下即可变成一个测距测速计。

  通过三轴加速度传感器,我们可以知道用户的运动状态。除了计步,还可以通过加速器的变化曲线判断用户摔倒状态,做成一个老人和儿童摔倒检测自动报警器。

  • 12
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现基于四元数的拓展卡尔曼滤波的无人机状态感知,可以使用Simulink中的S函数进行实现。下面是一个简单的实现步骤: 1. 新建Simulink模型,并依次添加三个输入信号(三轴陀螺仪、三轴加速度计三轴磁强计),以及一个S函数模块和一个输出信号(三个姿态角)。 2. 在S函数模块中,可以使用C语言编写基于四元数的拓展卡尔曼滤波算法,并将算法的输出结果传递给输出信号。具体实现步骤如下: 1)在S函数模块的头文件中,使用以下两个宏定义指定S函数的输入和输出端口的数量和大小: ``` #define INPUT_PORT_NUM 3 // 输入端口数量 #define OUTPUT_PORT_NUM 3 // 输出端口数量 #define QUATERNION_SIZE 4 // 四元数的大小为4 ``` 2)在S函数模块的初始化函数中,定义拓展卡尔曼滤波算法需要的变量,例如状态量、状态协方差矩阵、过程噪声协方差矩阵、测量噪声协方差矩阵等。同时,还需要初始化四元数的值为[1 0 0 0]。 3)在S函数模块的计算函数中,读取输入信号的值,并将其转换为物理量。然后,根据陀螺仪的测量值和上一时刻的四元数值,通过四元数微分方程计算出当前时刻的四元数值。接着,使用当前时刻的四元数值计算出当前时刻的旋转矩阵,并将旋转矩阵与加速度计和磁强计的测量值进行融合,得到当前时刻的姿态角。 4)在S函数模块的输出函数中,将计算得到的姿态角写入输出信号。 3. 连接输入信号和S函数模块,以及S函数模块和输出信号。 4. 运行Simulink模型,即可得到无人机的姿态角。 需要注意的是,实现基于四元数的拓展卡尔曼滤波算法需要一定的数学基础和算法知识,需要仔细研究算法的原理和实现方法。同时,还需要对Simulink的使用有一定的了解,能够编写和调试S函数模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值