获得稳定的俯仰和滚动值

时间:2016-04-13 08:32:44

标签: android jmonkeyengine pitch android-augmented-reality

我想获得最佳的投球和投球价值。 我已经在使用该代码获取azimut值。

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

@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);
}

我错过了什么?

修改

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

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

1 个答案:

答案 0 :(得分:0)

手机中的加速度计往往噪音很大,您需要应用滤镜才能获得更好的效果。 这可以是从trimmed mean filterKalman filter的任何内容 我建议从一个均值过滤器开始,因为它很容易实现。简单地说,基于“窗口”大小,它会将最接近的值切断。