5

我正在开发一个项目,其中包括一个用于控制/转向的 Android 应用程序。

  • 速度:当您将手机向前/向后(俯仰)倾斜时,它会模拟加油和中断。
  • 方向:当您向左/向右倾斜手机(滚动)时,它会模拟左右转向。

我已经编写了一些似乎可以正常工作的代码。但是当我仔细观察时,我发现有些值表现得很奇怪。

当我将手机向前/向后倾斜以处理速度时,它可以完美运行,我得到了预期的速度和方向值。但是当我将手机向左/向右倾斜以处理方向时,它似乎破坏了一些值。当它向左/向右倾斜时,不仅会改变方向值(滚动),还会影响速度值(俯仰)。

如需额外信息:

  • Android 2.2 编程
  • 设备是 Google Nexus One
  • 纵向握住设备

我用来读取传感器值的最相关的代码如下:

public void onSensorChanged(SensorEvent sensorEvent)
{        
    synchronized (this)
    {
        if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION)
        {
            float azimuth = sensorEvent.values[0]; // azimuth rotation around the z-axis
            float pitch = sensorEvent.values[1];   // pitch rotation around the x-axis
            float roll = sensorEvent.values[2];    // roll rotation around the y-axis

            System.out.println("pitch: " + pitch);
            System.out.println("roll: " + roll);
            System.out.println("--------------------");

            // Convert the sensor values to the actual speed and direction values
            float speed = (pitch * 2.222f) + 200;
            float direction = roll * -2.222f;    

因此,当我运行代码时,我会查看打印的值。当向左/向右倾斜设备时,它似乎也会影响音高值。怎么来的?当“滚动”时,我怎样才能获得纯音高值?因此,将手机向左/向右倾斜不会影响/破坏音高值。

4

1 回答 1

2

您可以阅读Gimbal lock。以前被我咬过。

于 2011-03-08T12:40:02.490 回答