最近在研究惯性导航和其他导航算法的融合,顺手把计步、步长等一堆算法写成类了,舒服~
这篇文章我不会具体的讲解实现原理,有兴趣研究的朋友直接看我写的计步算法实现和步长计算。
Android系统有自带的计步器,那么为什么要自己实现一套记步算法呢?
一.可以做步长估计
二.鉴于国产手机碎片化比较严重,不同系统都会有一套自己的记步算法,导致系统算法在实际运用中表现不同:
1.算法的灵敏度不同,具体表现在非步态信号的滤除不同,有的算法滤波更严格,也更精确。
2.算法的缓冲带长度不同,具体表现在走了多少步以后算法认为人开始走路,此时算法才开始返回走路的步数,中间会有一段时间不返回任何数据。
三、自己实现记步算法可以保证算法的稳定性,以及一开始走路就可以立刻开始记步(当然这是不严谨的)
使用样例:
StepDetector Step;
//回调接口
StepDetector.StepDetectorCallback callback=new StepDetector.StepDetectorCallback() {
@Override
public void catchStep(int step) {
//获取行走步数,行走步长、行走距离和行走状态
Step.getStep();
Step.getDistance();
Step.getLength();
Step.getState();
}
};
//初始化
Step=new StepDetector(callback);
//传入加速度数据,为三轴加速度的标量和
Step.refreshAcceleration(acc);
类型及算法实现代码:
***********************
*by jjwwwww
***********************
import java.util.Timer;
import java.util.TimerTask;
public class StepDetector {
//回调接口
public interface StepDetectorCallback{
void catchStep(int step);
}
//行走状态,WALK行走;STAY静止
public enum WalkState{
WALK,
STAY
}