1

我可以用这个代码计算陀螺仪的角度吗?我的意思是 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;
4

2 回答 2

2

我假设您正在尝试获取方向。不,这些公式不正确,这不是您在 3D 中整合角速率的方式,这实际上有点棘手。

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

不要任意方向使用偏航、俯仰和滚动,欧拉角是邪恶的

如果您的目标是学习,您可以在方向余弦矩阵 IMU:理论手稿中找到如何在 3D 中集成。这份手稿基本上是一个教程,非常简单明了。

于 2013-02-13T09:40:01.753 回答
0

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

于 2013-09-15T12:11:32.937 回答