Re: [問題] 手機的方向?
※ 引述《orz811017 (orz811017)》之銘言:
: 這學期做android專題 類似室內導航的題目
: 現在判斷 手機的方向 遇到一些問題
: 不知道該如何 把手機自己的坐標系 轉換到 世界的座標系中
: 之前算計步的時候就遇到這問題了
: 只是那時候偷懶只算跟重力的角度來判斷
: (變成二維比較簡單QQ
: 看過paper似乎是要用 旋轉矩陣 * Sensor上X,Y,Z的軸數值
: 可是我跟我趴呢實測好像不太對QQ
: 不知道是Coding太差還是數學太差.....
: 求各位先知前輩為小弟指點一下方向
: 謝謝大家
我不是什麼高手,但是我也吃了一些苦頭,順便分享一下
如果敘述不清楚就再發問吧
android 有關感應器分兩類
1. accelerometer 加速度感應器
2. magnetic方向感應器
12都是根據磁通量來偵測
負責偵測拋擲Pitch、翻滾Roll、旋轉Angle角度改變,
其中旋轉Angle適合拿來當作羅盤使用
取得旋轉Angle有兩種方式,但是其中一種已經過時,故我們不討論
方法如下
1.先繼承SensorEventListener
2.取得SensorManager
mSensorManager =
(SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
3.取得加速感應器
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
4.取得電子陀螺感應器
mMagmetic = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
5.註冊重力感測器、電子羅盤listener
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, mMagmetic, SensorManager.SENSOR_DELAY_NORMAL);
6.複寫EventListener
public void onSensorChanged(SensorEvent event) {
//sensor狀態改變
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
{
magneticFieldValues = event.values.clone();
}
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
accelerometerValues = event.values.clone();
}
getOrientation();
}
7. 取得資料
private void getOrientation(){
float[] SensorValues = new float[3];
float[] R = new float[9];
if (magneticFieldValues[0]!= 0 && accelerometerValues[2]!=0)
{
if (SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticFieldValues))
{
SensorManager.getOrientation(R, SensorValues);
mAngle = SensorValues[0]; //旋轉
mPitch = SensorValues[1]; //拋擲
mRoll = SensorValues[2]; //翻滾
}
}
}
8. 取得角度,要經過一次數據格式的轉換,轉換為度
int angle = Math.round(mAngle * (float)(180.0f/Math.PI) ) *-1;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.63.96.2
※ 編輯: pttnews 來自: 210.63.96.2 (12/31 16:30)
推
01/01 00:11, , 1F
01/01 00:11, 1F
推
01/01 10:48, , 2F
01/01 10:48, 2F
推
01/02 07:54, , 3F
01/02 07:54, 3F
→
01/02 07:55, , 4F
01/02 07:55, 4F
→
01/02 07:57, , 5F
01/02 07:57, 5F
推
01/02 12:30, , 6F
01/02 12:30, 6F
討論串 (同標題文章)