我在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;
}
}
答案 0 :(得分:1)
您可以从Play商店安装一些传感器应用,并将其与您的值进行比较以进行测试。
答案 1 :(得分:0)
这个问题已经存在了将近一年,但是我偶然发现了这个问题,并产生了一个问题的根源,那就是对每个传感器实际测量的误解。
因此,希望下面的解释可以使传感器没有切换,但实际上是使用加速度计来检测方向,而(imho命名错误)陀螺仪不能提供绝对方向。
加速度计
您应该将加速度计想象为一个样本质量,它被一些弹簧保持着,因为加速度计就是这样(您可以搜索MEMS加速度计以找到有关如何在微米级上实际实现的示例)。如果对设备进行加速,则由于惯性,质量块将推向弹簧,并测量质量块的微小挠度以检测加速度。但是,质量不仅会因实际加速度而偏转,还会因重力而偏转。因此,如果您的手机放在桌子上,则重物仍会偏向地面。
因此,您看到的“ -10”到“ 10”是地球在9.81 m /s²处的加速度。从物理学的角度来看,这是令人困惑的,因为在传感器仍显示9.81 m /s²时,静止的设备显然没有被加速,因此我们从传感器获得了设备的加速度加上地球的加速度。尽管这是任何物理老师的噩梦,但它非常有用,因为它可以告诉您“向下”的位置,从而使您确定设备的方向(围绕重力轴的旋转除外)。
陀螺仪
称为“陀螺仪”的传感器是设备中的另一个样本质量,它被主动驱动来振动。由于振动运动,它会受到科里奥利力的作用(在其参考框架内),并且在旋转时会发生偏转(搜索“ MEMS陀螺仪”会产生更多惊人的设备,尤其是当您考虑到它们可以检测到科里奥利的事实时)力)。
但是,挠度不允许您确定绝对角度(就像老式的陀螺仪一样),而是与角速度(转速)成正比。因此,您可以期望一个静止的设备在所有轴上的读数为零,并且仅当您围绕该轴旋转设备时,才能看到任何轴的读数。