Android 陀螺仪和加速度计是反向的

Android 陀螺仪和加速度计是反向的,android,accelerometer,gyroscope,Android,Accelerometer,Gyroscope,我在安卓系统中同时使用陀螺仪和加速度计。我所做的只是显示两个传感器的值。我不明白为什么要跟踪设备加速度,我必须使用陀螺仪,为什么设备方向是由加速计传感器给出的。 我在2台平板电脑、3台手机上测试了这段代码,结果是一样的 听众: // gyroscope sensor sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DEL

我在安卓系统中同时使用陀螺仪和加速度计。我所做的只是显示两个传感器的值。我不明白为什么要跟踪设备加速度,我必须使用陀螺仪,为什么设备方向是由加速计传感器给出的。 我在2台平板电脑、3台手机上测试了这段代码,结果是一样的

听众:

// gyroscope sensor
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL);

// accelerometer sensor
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
为了得到结果,我实现了SensorEventListener:

@Override
public void onSensorChanged(SensorEvent sensorEvent) {
    switch (sensorEvent.sensor.getStringType()){
        case Sensor.STRING_TYPE_ACCELEROMETER:
            (TextView)findViewById(R.id.sensor_accel_data_textView)).setText(String.valueOf(sensorEvent.values[0]));
            ((TextView)findViewById(R.id.sensor_accel_data_textView2)).setText(String.valueOf(sensorEvent.values[1]));
            ((TextView)findViewById(R.id.sensor_accel_data_textView3)).setText(String.valueOf(sensorEvent.values[2]));
            break;
        case Sensor.STRING_TYPE_GYROSCOPE:
            ((TextView)findViewById(R.id.sensor_gyro_data_textView)).setText(String.valueOf(sensorEvent.values[0]));
            ((TextView)findViewById(R.id.sensor_gyro_data_textView2)).setText(String.valueOf(sensorEvent.values[1]));
            ((TextView)findViewById(R.id.sensor_gyro_data_textView3)).setText(String.valueOf(sensorEvent.values[2]));
            break;
    }
}
  • 它们不是倒置的。加速计给你ax,ay,az这是三个方向的加速度。陀螺仪给出gx,gy,gz,它们是三个方向上的旋转速度
  • 这两个传感器可以单独使用
  • 加速计不能给你方向。有方向传感器,但可能不推荐使用。我认为传感器值取决于方向,但有办法使其独立于方向

  • 您可以从play store安装一些传感器应用程序,并将其与您的值进行比较,以便进行测试。

    这个问题已经有将近一年的历史了,但我只是偶然发现了它,并得到了这样的印象:问题的根源是对每个传感器实际测量值的误解

    因此,希望下面的解释能澄清一点,传感器没有切换,但事实上加速度计用于检测方向,并且(imho名称不好)陀螺仪不能提供绝对方向

    加速计

    您应该将加速计想象为一个样本质量,由一些弹簧固定,因为这就是加速计(您可以搜索MEMS加速计,以找到如何在微米尺度上实际实现这一点的示例)。如果加速设备,由于惯性,质量将推动弹簧,测量质量的微小偏转以检测加速度。然而,质量不仅受到实际加速度的影响,而且受到引力的影响。因此,如果你的手机放在桌子上,质量仍然朝着地面偏转

    所以,你看到的“-10”到“10”是地球在9.81 m/s²的加速度。从物理学的角度来看,这是令人困惑的,因为静止的设备显然没有被加速,而传感器仍然显示9.81 m/s²,因此我们从传感器获得设备加速度加上地球加速度。虽然这是任何物理老师的噩梦,但它非常有用,因为它告诉你“向下”的位置,从而给你设备的方向(除了围绕重力轴旋转)

    陀螺仪

    称为“陀螺仪”的传感器是设备中的另一个样本质量,它被主动驱动振动。由于振动运动,它受到科里奥利力(在其参考框架内)的影响,并在旋转时发生偏转(搜索“MEMS陀螺仪”会产生更令人惊讶的装置,特别是如果你考虑到它们可以在该尺度上检测科里奥利力的事实)


    但是,偏转不允许确定绝对角度(就像老式陀螺仪那样),而是与角速度(旋转速率)成比例。因此,您可以预期静止设备的所有轴上的读数为零,并且只要您围绕该轴旋转设备,就只能看到任何轴的读数。

    我已经尝试安装应用程序或web上找到的其他代码,但得到了相同的结果:如果设备不移动,加速计值给我一个从-10到10的方向值,陀螺仪返回0,0,0@Goren这应该是重力。这里是如何摆脱它,标题是“使用加速度计”:或者你可以使用“线性加速度”来消除重力效应