相关疑难解决方法(0)

Android加速度计精度(惯性导航)

我正在考虑为Android手机实施一个惯性导航系统,我意识到加速度计的准确性和读数的不断波动很难实现.

首先,我将手机放在一个平面上,并在X和Y方向上取样1000个加速度计读数(平行于工作台,因此没有重力作用于这些方向).然后我平均这些读数并使用该值来校准手机(从每个后续读数中减去该值).

然后我再次将它放在桌面上并在X和Y方向上采样5000个加速度计读数来测试系统.考虑到校准,我预计这些加速度应该在每个方向上加起来为0(大致).然而,情况并非如此,并且超过5000次迭代的总加速度远不及0(每个轴上平均大约10).

我意识到没有看到我的代码,这可能很难回答,但在更一般的意义上......

这只是移动电话(HTC Desire S)上加速度计读数不准确的一个例子,还是我在编码中出错的可能性更大?

android physics calibration accelerometer acceleration

108
推荐指数
5
解决办法
9万
查看次数

在Android上实现JKalman

关于从加速度计数据中去除噪声,其他传感器数据,计算时空状态以及在Android和其他设备中使用卡尔曼滤波器存在很多问题.

显然,最简单的方法是在Android上实现JKalman过滤器,以便为汽车提供稳定的移动设备.

但是看看JKalman代码包中的示例实现,它并没有说太多,它实际上与其他Kalman实现非常不同.

他们像这样实例化一个卡尔曼类:

JKalman kalman = new JKalman(4, 2);
Run Code Online (Sandbox Code Playgroud)

根据定义在哪里

public JKalman(int dynam_params, int measure_params) throws Exception {
    this(dynam_params, measure_params, 0);
}
Run Code Online (Sandbox Code Playgroud)

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
        } …
Run Code Online (Sandbox Code Playgroud)

android sensor accelerometer android-sensors kalman-filter

8
推荐指数
1
解决办法
5389
查看次数