在Android上实现JKalman

前端之家收集整理的这篇文章主要介绍了在Android上实现JKalman前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有很多关于从加速度计数据中去除噪声,其他传感器数据,计算时空状态以及在 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
        }
    }

解决方法

看来你需要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,z]

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

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

请遵循KalmanTest.java中的示例并检查此错误.

猜你在找的Android相关文章