陀螺仪和加速度计是倒置的
gyroscope and accelerometer are inverted
我在 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;
}
}
- 它们没有倒置。加速度计为您提供
ax
、ay
、az
,它们是 3 个方向的加速度。陀螺仪为您提供 gx
、gy
、gz
,它们是围绕 3 个方向的旋转速度。
- 这两个传感器可以独立使用。
- 加速度计无法为您指明方向。有方向传感器,但可能已弃用。我认为传感器值与方向相关,但有一些方法可以使它们与方向无关。
您可以从 Play 商店安装一些传感器应用程序并将其与您的值进行比较以进行测试。
这个问题已经问了将近一年了,但我只是偶然发现了这个问题,我的印象是问题的根源是对每个传感器实际测量的内容存在误解。
所以,希望下面的解释能澄清一点,传感器没有切换,但实际上加速度计用于检测方向,并且(恕我直言)陀螺仪不提供绝对方向。
加速度计
您应该将加速度计想象成由一些弹簧支撑的样本质量,因为这就是加速度计(您可以搜索 MEMS 加速度计以找到有关如何在微米尺度上实际实现的示例) .如果您加速设备,质量块将因惯性而推动弹簧,并且质量块的微小偏转会被测量以检测加速度。然而,质量不仅会因实际加速度而偏转,还会因引力而偏转。所以,如果你的 phone 靠在 table 上,质量仍然偏向地面。
因此,您看到的“-10”到“10”是地球加速度 9.81 m/s²。从物理学的角度来看,这是令人困惑的,因为静止的设备显然没有被加速,而传感器仍然显示 9.81 m/s²,所以我们从传感器得到设备加速度加上地球加速度。虽然这是任何物理老师的噩梦,但它非常有用,因为它会告诉您 "down" 在哪里,从而为您提供设备的方向(除了绕重力轴的旋转)。
陀螺仪
名为 "gyroscope" 的传感器是您设备中的另一个样本块,它会主动驱动振动。由于振动运动,它受到科里奥利力(在其参考系中)的影响并在旋转时发生偏转(搜索 "MEMS gyroscope" 会产生更令人惊讶的设备,特别是如果你考虑到它们可以检测到那种规模的科里奥利力)。
但是,偏转不允许您确定绝对角度(就像老式陀螺仪那样),而是与 angular 速度(旋转速率)成正比。因此,您可以预期静止设备的所有轴上的读数均为零,并且只要您围绕该轴旋转设备,就只会看到任何轴的读数。
陀螺仪与加速度计:
- 加速度计测量物体沿轴移动的速度。它在 X 和 Y 和 Z.
内移动的速度有多快
- 陀螺仪测量物体绕轴旋转的速度。它是如何围绕 X 和 Y 和 Z.
旋转的
一开始,你的X或Y或Z会有地球加速度值以米除以平方秒,即9.81 m/s^2
我在 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;
}
}
- 它们没有倒置。加速度计为您提供
ax
、ay
、az
,它们是 3 个方向的加速度。陀螺仪为您提供gx
、gy
、gz
,它们是围绕 3 个方向的旋转速度。 - 这两个传感器可以独立使用。
- 加速度计无法为您指明方向。有方向传感器,但可能已弃用。我认为传感器值与方向相关,但有一些方法可以使它们与方向无关。
您可以从 Play 商店安装一些传感器应用程序并将其与您的值进行比较以进行测试。
这个问题已经问了将近一年了,但我只是偶然发现了这个问题,我的印象是问题的根源是对每个传感器实际测量的内容存在误解。
所以,希望下面的解释能澄清一点,传感器没有切换,但实际上加速度计用于检测方向,并且(恕我直言)陀螺仪不提供绝对方向。
加速度计
您应该将加速度计想象成由一些弹簧支撑的样本质量,因为这就是加速度计(您可以搜索 MEMS 加速度计以找到有关如何在微米尺度上实际实现的示例) .如果您加速设备,质量块将因惯性而推动弹簧,并且质量块的微小偏转会被测量以检测加速度。然而,质量不仅会因实际加速度而偏转,还会因引力而偏转。所以,如果你的 phone 靠在 table 上,质量仍然偏向地面。
因此,您看到的“-10”到“10”是地球加速度 9.81 m/s²。从物理学的角度来看,这是令人困惑的,因为静止的设备显然没有被加速,而传感器仍然显示 9.81 m/s²,所以我们从传感器得到设备加速度加上地球加速度。虽然这是任何物理老师的噩梦,但它非常有用,因为它会告诉您 "down" 在哪里,从而为您提供设备的方向(除了绕重力轴的旋转)。
陀螺仪
名为 "gyroscope" 的传感器是您设备中的另一个样本块,它会主动驱动振动。由于振动运动,它受到科里奥利力(在其参考系中)的影响并在旋转时发生偏转(搜索 "MEMS gyroscope" 会产生更令人惊讶的设备,特别是如果你考虑到它们可以检测到那种规模的科里奥利力)。
但是,偏转不允许您确定绝对角度(就像老式陀螺仪那样),而是与 angular 速度(旋转速率)成正比。因此,您可以预期静止设备的所有轴上的读数均为零,并且只要您围绕该轴旋转设备,就只会看到任何轴的读数。
陀螺仪与加速度计:
- 加速度计测量物体沿轴移动的速度。它在 X 和 Y 和 Z. 内移动的速度有多快
- 陀螺仪测量物体绕轴旋转的速度。它是如何围绕 X 和 Y 和 Z. 旋转的
一开始,你的X或Y或Z会有地球加速度值以米除以平方秒,即9.81 m/s^2