【问题标题】:gyroscope and accelerometer are inverted陀螺仪和加速度计倒置
【发布时间】:2019-05-24 14:32:31
【问题描述】:

我在 Android 中同时使用陀螺仪和加速度计。我所做的只是显示来自两个传感器的值。我不明白为什么要跟踪设备加速度,我必须使用陀螺仪以及为什么设备方向由加速度计传感器给出。 我已经在 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;
    }
}

【问题讨论】:

    标签: android accelerometer gyroscope


    【解决方案1】:
    1. 它们没有倒置。加速度计为您提供 ax、ay、az,它们是 3 个方向的加速度。陀螺仪为您提供 gx、gy、gz,它们是三个方向的旋转速度。
    2. 这两个传感器可以独立使用。
    3. 加速度计无法为您提供方向。有方向传感器,但可能已弃用。我认为传感器值与方向有关,但有一些方法可以使它们与方向无关。

    您可以从 Play 商店安装一些传感器应用,并将其与您的值进行比较以进行测试。

    【讨论】:

    • 我已经尝试安装应用程序或在网上找到的其他代码,但得到了相同的结果:如果设备没有移动,加速度计值会给我一个从 -10 到 10 的方向值和陀螺仪返回 0, 0, 0
    • @Goren 那应该是重力。这是摆脱它的方法,标题为“使用加速度计”:developer.android.com/guide/topics/sensors/sensors_motion
    • 或者你可以使用“TYPE_LINEAR_ACCELERATION”来消除重力影响
    【解决方案2】:

    这个问题已经有将近一年的时间了,但我只是偶然发现了这个问题,并认为问题的根源是对每个传感器实际测量的内容的误解。

    因此,希望下面的解释能够澄清一点,传感器没有切换,但实际上加速度计用于检测方向,并且(恕我直言)陀螺仪不提供绝对方向。

    加速度计

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

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

    陀螺仪

    称为“陀螺仪”的传感器是您设备中的另一个样本质量,它被主动驱动振动。由于振动运动,它会受到科里奥利力(在其参考系中)并在旋转时偏转(搜索“MEMS 陀螺仪”会产生更令人惊讶的设备,尤其是考虑到它们可以检测到科里奥利的事实那种规模的力量)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多