8

加速度計データや他のセンサーのデータからのノイズの除去、時空間状態の計算、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
        }
    }
4

3 に答える 3

1

3D JKalman フィルターが必要なようです。これを試すことができます:

JKalman kalman = new JKalman(6, 3);

Matrix s = new Matrix(6, 1); // state [x, y, z, dx, dy, dz]        
Matrix c = new Matrix(6, 1); // corrected state
Matrix m = new Matrix(3, 1); // measurement [x, y, z]

// the initial values follow (sorry for programming in stackoverflow):
m.set(0, 0, x);
m.set(1, 0, y);
m.set(2, 0, z);

// transitions for x, y, z, dx, dy, dz (velocity transitions)
double[][] tr = { {1, 0, 0, 1, 0, 0}, 
                  {0, 1, 0, 0, 1, 0}, 
                  {0, 0, 1, 0, 0, 1}, 
                  {0, 0, 0, 1, 0, 0}, 
                  {0, 0, 0, 0, 1, 0}, 
                  {0, 0, 0, 0, 0, 1} };
kalman.setTransition_matrix(new Matrix(tr));

次に、KalmanTest.java の例に従って、エラーがないか確認してください。

于 2014-01-07T23:25:08.250 に答える
0

ジャイロのノイズが多すぎるという理由だけでは、汎用の位置追跡アプリを作成することはできません。(はい、加速度計ではなくジャイロです。)

屋内測位については、上記リンクもご覧ください。

于 2012-08-06T13:31:51.457 に答える