加速度計データや他のセンサーのデータからのノイズの除去、時空間状態の計算、Android やその他のデバイスでのカルマン フィルターの使用について、多くの質問があります。
どうやら、これを行う最も簡単な方法は、Android に JKalman フィルターを実装して、車などの安定した移動デバイスを実現することです。
しかし、JKalman コード パッケージのサンプル実装を見ると、多くは語られておらず、実際には他の 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 ごとにサンプリングされた加速度計からのデータです。他のリスナーには、ジャイロスコープとコンパスからのデータがあります。このデータをカルマンへの入力に変換するにはどうすればよいですか?
@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
}
}