Android Sensor中Gyroscope显示的旋转读书不对

Tody Guo 2011-09-26 04:16:16
各位大侠,
我在使用SDK中的gyroscope代码时,旋转机器,显示旋转的度数不正确。
在旋转机台的时候,还没用旋转到90°,代码显示的度数就已经到90°了。
希望高手能帮忙解决啊?
Sensor.TYPE_GYROSCOPE:



private static final float NS2S = 1.0f / 1000000000.0f;
private float timestamp;
public void onSensorChanged(SensorEvent event){
if (timestamp != 0) {
final float dT = (event.timestamp - timestamp) * NS2S;
angle[0] += event.values[0] * dT;
angle[1] += event.values[1] * dT;
angle[2] += event.values[2] * dT;
}
timestamp = event.timestamp;
}




具体代码如下?



package com.tware.gyrotest;

import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class GyroTestActivity extends Activity implements SensorEventListener {

/** Called when the activity is first created. */
private static final float NS2S = 1.0f / 1000000000.0f;
private float timestamp;
private float[] angle = new float[3];

SensorManager mSensorManager;
private Sensor mGYROSCOPE;
TextView vX;
TextView vY;
TextView vZ;


public GyroTestActivity()
{
angle[0] = 0;
angle[1] = 0;
angle[2] = 0;
timestamp = 0;

}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

vX = (TextView)findViewById(R.id.v_x);
vY = (TextView)findViewById(R.id.v_y);
vZ = (TextView)findViewById(R.id.v_z);

mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mGYROSCOPE = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);


}

public void onSensorChanged(SensorEvent event)
{
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
{
return;
}

if (timestamp != 0) {
final float dT = (event.timestamp - timestamp) * NS2S;
angle[0] += event.values[0] * dT * 100;
angle[1] += event.values[1] * dT * 100;
angle[2] += event.values[2] * dT * 100;
}
timestamp = event.timestamp;


vX.setText("X: " + Float.toString(angle[0]));
vY.setText("Y: " + Float.toString(angle[1]));
vZ.setText("Z: " + Float.toString(angle[2]));


}

public void onResume() {
super.onResume();
mSensorManager.registerListener(this, mGYROSCOPE, SensorManager.SENSOR_DELAY_NORMAL);
}


public void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub

}
}
...全文
666 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tody Guo 2012-05-21
  • 打赏
  • 举报
回复
是我搞错了,SDK中还有很多代码。没有写完整。。。
zhanghui0305 2011-10-28
  • 打赏
  • 举报
回复
我的也是角速度。。。。
lxj_0734 2011-10-12
  • 打赏
  • 举报
回复
我这里面机器陀螺仪读取出来的值不是角度,而是角速度,当你快速转动机器时,读数会增大,静止时会趋于0
Tody Guo 2011-10-11
  • 打赏
  • 举报
回复
是角度啊,只是这个角度不准,很奇怪。
lxj_0734 2011-10-11
  • 打赏
  • 举报
回复
你所读取出来的值根本就不是角度,GYRO没有角度,只有角速度
Tody Guo 2011-09-28
  • 打赏
  • 举报
回复
没有校准。但校准了也没有用啊。唉。。。
充电宝111 2011-09-26
  • 打赏
  • 举报
回复
这个东西需要校准,你校准了么

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧