有许多关于如何去除加速度计数据、其他传感器数据、计算时空状态以及在Android和其他设备上使用Kalman过滤器的问题。
显然,最简单的方法是为稳定移动设备(例如汽车)在Android上实现JKalman过滤器。
但是,在查看JKalman代码包中的示例实现时,它并没有提供很多信息,而且实际上与其他Kalman实现非常不同。他们像这样实例化一个Kalman类:
显然,最简单的方法是为稳定移动设备(例如汽车)在Android上实现JKalman过滤器。
但是,在查看JKalman代码包中的示例实现时,它并没有提供很多信息,而且实际上与其他Kalman实现非常不同。他们像这样实例化一个Kalman类:
JKalman kalman = new JKalman(4, 2);
根据定义,
public JKalman(int dynam_params, int measure_params) throws Exception {
this(dynam_params, measure_params, 0);
}
dynam_params
是“测量向量维度的数量”,measure_params
是“状态向量维度的数量”。
在Android中,传感器数据应该如何映射到这些参数?
下面是来自加速度计的数据,每500ms采样一次。在其他监听器中,还有来自陀螺仪和指南针的数据。我应该如何将这些数据转换为Kalman的输入?
@Override
public void onSensorChanged(SensorEvent event) {
actualTime = System.currentTimeMillis();
if(actualTime - lastUpdateAcc < 500)
return;
else{
lastUpdateAcc = actualTime;
//update myPosition
TextView tv = (TextView)findViewById(R.id.textView3);
tv.setText(String.format("X: %8.4f -- Y: %8.4f -- Z: %8.4f",
event.values[0], event.values[1], event.values[2]));
//draw on the screen
//draw new path, if one exists
}
}