最近,我进行了一些研究,以同时使用加速度计和陀螺仪来在不借助GPS的情况下使用这些感应器来跟踪智能手机(请参阅这篇文章)
Indoor Positioning System based on Gyroscope and Accelerometer

为此,我将需要我的方向(角度(俯仰,滚动等)。)因此,到目前为止,我在这里已经完成了以下工作:

public void onSensorChanged(SensorEvent arg0) {
    if (arg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
    {
        accel[0] = arg0.values[0];
         accel[1] = arg0.values[1];
   accel[2] = arg0.values[2];
   pitch = Math.toDegrees(Math.atan2(accel[1], Math.sqrt(Math.pow(accel[2], 2) + Math.pow(accel[0], 2))));

  tv2.setText("Pitch: " + pitch + "\n" + "Roll: " + roll);

   } else if (arg0.sensor.getType() == Sensor.TYPE_GYROSCOPE )
{
  if (timestamp != 0) {
  final float dT = (arg0.timestamp - timestamp) * NS2S;
  angle[0] += arg0.values[0] * dT;
  filtered_angle[0] = (0.98f) * (filtered_angle[0] + arg0.values[0] * dT) + (0.02f)* (pitch);
   }
   timestamp = arg0.timestamp;
 }
}

在这里,我试图与加速度计(螺距)成角度(仅用于测试),通过集成gyroscope_X谷值时间与辅助滤波器对其进行滤波

filtered_angle [0] =(0.98f)*(filtered_angle [0] +陀螺仪x * dT)+(0.02f)*(音高)

带有dT的或多或少开始0.009秒

但是我不知道为什么,但是我的角度不是很准确...当设备在 table 上平放时(屏幕朝上)
Pitch (angle fromm accel) = 1.5 (average)
Integrate gyro = 0 to growing (normal it's drifting)
filtered gyro angle = 1.2

当我将手机抬起90°时(请参阅屏幕朝向我前方的墙壁)
Pitch (angle fromm accel) = 86 (MAXIMUM)
Integrate gyro = he is out ok its normal
filtered gyro angle = 83 (MAXIMUM)

所以角度永远不会达到90 ???即使我尝试举起更多电话...
为什么直到90°才开始呢?我的计算错了吗?还是传感器废话的质量?

我想知道的另一件事是:使用Android时,我不会“读出”传感器的值,但是当它们更改时会收到通知。问题是,正如您在代码中看到的那样,Accel和Gyro共享相同的方法....因此,当我计算滤波角度时,我将采用0.009秒之前的accel度量的音高,不是吗?这可能是我的问题根源吗?

谢谢 !

最佳答案

我只能repeat myself.

您可以通过两次积分线性加速度来获得位置,但是的错误非常可怕。在实践中它是没有用的。 换句话说,您正在尝试解决不可能的事情。

您实际上可以做的只是跟踪方向。

滚动,俯仰和偏航是邪恶的,请不要使用它们。于38:25 checkin the video I already recommended

这是有关如何使用陀螺仪和加速度计跟踪方向的excellent tutorial

您可能会发现有用的类似问题:

track small movements of iphone with no GPS
What is the real world accuracy of phone accelerometers when used for positioning?
how to calculate phone's movement in the vertical direction from rest?
iOS: Movement Precision in 3D Space
How to use Accelerometer to measure distance for Android Application Development
Distance moved by Accelerometer
How can I find distance traveled with a gyroscope and accelerometer?

09-25 10:30