在android中使用陀螺仪获取角度

时间:2013-02-13 05:00:20

标签: android gyroscope

我可以用这段代码计算陀螺仪的角度吗?我的意思是dT的计算是否正确?

public void onSensorChanged(SensorEvent event) {
            switch (event.sensor.getType()) {
      /* Other sensor cases */
           case Sensor.TYPE_GYROSCOPE: 
            for (int j=0;j<3;j++) mGyro[j] = event.values[j];
            if(i==0)
                i=1;
            else
                i=2;
            if(i==1)
                start=System.nanoTime();
                else if(i==2) {
                    finish=System.nanoTime();
                 dT=( finish-start )/1000000000f;
                             i=0;
                }

            angle[0]=(float) ((angle[0]+mGyro[0]*dT)*180/3.1428f);
            angle[1]=(float) ((angle[1]+mGyro[0]*dT)*180/3.1428f);
            angle[2]=(float) ((angle[2]+mGyro[0]*dT)*180/3.1428f);

            break;

2 个答案:

答案 0 :(得分:2)

我认为你正试图获得方向。不,这些公式不正确,这不是你如何在3D中整合角速率,实际上有点棘手。

如果你想要角度,那么只需使用API​​中的SensorManager.getOrientation()即可。换句话说,有人已经为你编写了这段代码,没有必要重新发明轮子。

使用偏航,俯仰和滚动任意方向,Euler angles are evil

如果你的目标是学习,你可以在Direction Cosine Matrix IMU: Theory手稿中找到如何整合3D。这个手稿基本上是一个教程,非常简单明了。

答案 1 :(得分:0)

SensorEvent类的文档提供了如何使用陀螺仪的完整示例。您基本上只需要复制和粘贴代码。有关如何从陀螺仪获取方向,请参阅this answer