Android的互补滤镜(Gyro + accel)

Ale*_*xis 6 android tracking accelerometer filter gyroscope

最近我做了一些研究,使用加速度计+陀螺仪来使用那些传感器在没有GPS帮助的情况下跟踪智能手机(参见这篇文章) 基于陀螺仪和加速度计的室内定位系统

为此我需要我的方向(角度(俯仰,滚动等))所以这里到目前为止我所做的:

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;
 }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我试图从我的加速度计(音调)角度(仅用于测试),从陀螺仪_X的集成通过时间过滤它与互补滤波器

filtered_angle [0] =(0.98f)*(filtered_angle [0] + gyro_x*dT)+(0.02f)*(音高)

与dT开始或多或少0.009 secondes

但我不知道为什么,但我的角度不是很准确......当设备平放在桌子上时(屏幕朝上)

Pitch (angle fromm accel) = 1.5 (average) 
Integrate gyro = 0 to growing (normal it's drifting) 
filtered gyro angle = 1.2
Run Code Online (Sandbox Code Playgroud)

当我拿起90°的手机时(看到屏幕朝向我面前的墙壁)

Pitch (angle fromm accel) = 86 (MAXIMUM) 
Integrate gyro = he is out ok its normal 
filtered gyro angle = 83 (MAXIMUM)
Run Code Online (Sandbox Code Playgroud)

所以角度永远不会达到90 ??? 即使我尝试将手机抬得多一点......为什么直到90°才行?我的计算错了吗?或传感器垃圾的质量?

我想知道的另一件事是:使用Android我不会"读出"传感器的值,但是当它们发生变化时我会收到通知.问题在于,正如您在代码中看到的那样,Accel和Gyro共享相同的方法....因此,当我计算滤波后的角度时,我会在之前的几秒钟内采取加速度测量的间距,不是吗?这可能是我问题的根源吗?

谢谢 !

Ali*_*Ali 5

我只能重复自己.

通过将线性加速度积分两次得到位置,但误差很大.它在实践中毫无用处.换句话说,你正试图解决不可能的问题.

你实际上可以做的是跟踪方向.

滚动,俯仰和偏航是邪恶的,不要使用它们.请查看我已经推荐的视频,时间是38:25.

这是一个关于如何使用陀螺仪和加速度计跟踪方向的优秀教程.

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

在没有GPS的情况下跟踪iphone的
小动作当用于定位时,手机加速度计的真实世界准确度是多少?
如何计算手机在休息时垂直方向的运动?
iOS:3D空间中的移动精度
如何使用加速度计测量Android应用程序开发的
距离加速度计移动的距离
如何找到陀螺仪和加速度计的行进距离?


归档时间:

查看次数:

18477 次

最近记录:

8 年,8 月 前