我可以用这段代码计算陀螺仪的角度吗?我的意思是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;
答案 0 :(得分:2)
我认为你正试图获得方向。不,这些公式不正确,这不是你如何在3D中整合角速率,实际上有点棘手。
如果你想要角度,那么只需使用API中的SensorManager.getOrientation()即可。换句话说,有人已经为你编写了这段代码,没有必要重新发明轮子。
不使用偏航,俯仰和滚动任意方向,Euler angles are evil。
如果你的目标是学习,你可以在Direction Cosine Matrix IMU: Theory手稿中找到如何整合3D。这个手稿基本上是一个教程,非常简单明了。
答案 1 :(得分:0)
SensorEvent类的文档提供了如何使用陀螺仪的完整示例。您基本上只需要复制和粘贴代码。有关如何从陀螺仪获取方向,请参阅this answer。