作者pttnews (PTT新闻)
看板AndroidDev
标题Re: [问题] 手机的方向?
时间Tue Dec 31 16:04:11 2013
※ 引述《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)
1F:推 ian90911:推 01/01 00:11
2F:推 asilzheng:推 01/01 10:48
3F:推 johnpage:手机的sensor负责方向及高度,WiFi负责室内所在位置,gps 01/02 07:54
4F:→ johnpage: 负责室外所在位置。 01/02 07:55
5F:→ johnpage:ps.WiFi需要校正才能用,与gps不同,而且误差大。 01/02 07:57
6F:推 orz811017:谢谢大大分享 !! 这个角度我也有取得了~ 01/02 12:30