Re: [問題] 手機的方向?

看板AndroidDev作者 (PTT新聞)時間12年前 (2013/12/31 16:04), 編輯推噓4(402)
留言6則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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
手機的sensor負責方向及高度,WiFi負責室內所在位置,gps
01/02 07:54, 3F

01/02 07:55, , 4F
負責室外所在位置。
01/02 07:55, 4F

01/02 07:57, , 5F
ps.WiFi需要校正才能用,與gps不同,而且誤差大。
01/02 07:57, 5F

01/02 12:30, , 6F
謝謝大大分享 !! 這個角度我也有取得了~
01/02 12:30, 6F
文章代碼(AID): #1Imdf_UJ (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1Imdf_UJ (AndroidDev)