2017-02-15 9 views
0

私は現在、自分の携帯電話から向きデータを受け取ってスピードメーターを実装しています。私は、デバイスがテーブルか何かの上に置かれている間、これは正常に動作し、私はとにかく、このような方位など。 として、自分の携帯電話からの回転データを受信することができていますこれにより定数回転装置 - 正しい方位データを受け取る方法?

SensorManager.getRotationMatrix(R, I, gravity, geomagnetic); 
float orientation[] = new float[3]; 
SensorManager.getOrientation(R, orientation); 
float azimuth = orientation[0]; 
double azimuthD = Math.toDegrees(azimuth); 
if(azimuthD < 0) azimuthD = 360 + azimuthD; 

を使用しています。しかし、特定の点を中心に回転すると(私の場合、装置は車輪に固定され、一定の速度で回転する)、値は正確ではありません。私は、重力と地磁気センサーを使用しているので、これらのセンサーに影響する力と回転しながら衝突する可能性があると私は信じています。 As the wheel turns, the rotation changes relative to a point, but the local device rotation stays the same.

多くのノイズの多いデータに遭遇することなく、デバイスが回転している間にデバイスの向きにアクセスするにはどうすればよいですか? 私は'Sensor.TYPE_ROTATION_VECTOR 'プロパティについていくつか読んでいますが、それがどのように動作するのかは分かりませんでした。また、コーディネーションシステムを再構築する可能性についても読んでいますが、私の電話機は5°〜10°の角度で床に垂直になることは決してありません。 私は助けていただければ幸いです。

乾杯、 viehlieb

答えて

0

私は私は私の答えを見つけたと思います。 解決策は、上記のすべてのコードを捨てて、明らかにジャイロスコープを使用することでした。 ジャイロスコープの値は、デバイスの回転角速度を測定します。使用される座標系は、装置自身の座標系である。私の場合、関連する値はz軸周りの回転です。 値は1秒あたりの輻射量であり、ホイールの円周を乗算するとm/sにマッピングできます。だから、トリックはOnSensorChanged方法にあった:

if(sensorEvent.sensor.getType() == Sensor.TYPE_GYROSCOPE){ 
gyroscope = sensorEvent.values; 
double rotZ = gyroscope[2]; 
double degrees = Math.toDegrees(gyroscope[2]); 
//calculate the speed with circumference = 2.23m 
float speed = (float) degrees/ 360.0f * 2.23f * 3.6f; 
} 

今あなたが正確な値を持っているしたい場合は、配列に格納し、平均値を計算することができます。 onSensorChangedメソッドが呼び出されるたびに、20回ごとに配列をクリアすることを忘れないでください。 SENSOR_DELAY_GAMEを登録すると、平均を構築するのに十分なデータが得られます。

関連する問題