0

我想获得最佳的俯仰和横滚值。我已经在使用该代码来获取方位角值。

俯仰和横滚值似乎不太好。

@Override
    public void onSensorChanged(SensorEvent event) {

        switch (event.sensor.getType()) {

            case Sensor.TYPE_ROTATION_VECTOR:
                // calculate th rotation matrix
                SensorManager.getRotationMatrixFromVector(rMat, event.values);

                float[] data = SensorManager.getOrientation(rMat, orientation);

                Log.i(TAG, "NEW pitch?="+data[1]+" roll="+data[2]);

                // do something with data

                break;
        }

我在增强现实环境(使用 Jmonkey 引擎)中使用该代码根据手机位置移动 3d 对象:

public void updateRotationFused(float pitch, float roll) {
    //pitch: cams x axis roll: cams y axisheading: cams z axis
    mRotXYZQ.fromAngles(pitch + FastMath.HALF_PI , roll - FastMath.HALF_PI, 0);
    mCurrentCamRotationFused = mInitialCamRotation.mult(mRotXYZQ);
}

我错过了什么吗?

编辑

应用程序中已使用的代码来自此链接

它有效,但我认为Sensor.TYPE_ROTATION_VECTOR是更好的方法。

4

1 回答 1

0

手机中的加速度计往往噪音很大,您需要应用过滤器才能获得更好的结果。这可以是从修剪过的均值滤波器卡尔曼滤波器的任何东西, 我建议从均值滤波器开始,因为它的实现非常简单。简而言之,它会根据“窗口”大小将值与最常见的值相去甚远。

于 2016-04-14T07:40:19.970 回答