前言
之前使用rssi室内定位获得大致定位,这时候使用手机内置传感器进行惯性导航,进行综合定位,使定位更精确。
点击:室内定位主页目录+一维实战+二维实战+安卓惯性导航基础
惯性导航概述
惯性导航是一种不借助外力(接收本体之外的信号)的自主性导航,你只要知道自己的初始位置,知道自己的初始朝向,知道自己每一时刻如何改变了朝向,知道自己每一时刻相对朝向是怎样走的,这样就能得到每时每刻自己的位置。
PDR算法概述
PDR算法能在无信标条件下,通过加速度三轴加速度值和方向角对行走路线进行相对定位。在进行PDR算法时候,需要知道步长以及方向。
已知坐标为一个向量(E0,N0),求得步长在该角度的向量。获得下一步位置
所以,当知道步长和方向角即可以获得轨迹。
大致方向,步长计算通过手机内置三轴加速度传感器获得,方向通过加速度传感器以及磁力计共同获得。
加速度传感器
手机中有多种传感器,而我们需要使用其中的加速度传感器来进行导航。加速度传感器是一种能够测量加速度的传感器。在手机静止时,传感器返回的是地球引力9.8m/s^2。通过调用安卓api可以轻松获得三轴的加速度值。
如图所示,手机内置的加速度传感器为三轴加速度传感器,即加速度的变化会显示在x,y,z轴上。举例(当y朝天时三轴为 0,9.8,0 。 当z朝天时为 0 ,0 ,9.8)
加速度传感器的使用
使用系统api
获得系统中的加速度传感器
private SensorManager sensorManager;
private Sensor sensor;
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
/**
* Senor.TYPE_LIGHT:光照传感器
* Senor.TYPE_GRAVITY:重力传感器
* SenorManager.getOrientation(); 方向传感器
* Senor.TYPE_ACCELEROMETER: 加速度传感器
*/
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
注册函数和 解除注册
protected void onResume() {
super.onResume();
if(sensorManager != null){
/**
* 第三个参数决定传感器信息更新速度
* SensorManager.SENSOR_DELAY_NORMAL:一般
* SENSOR_DELAY_FASTEST:最快
* SENSOR_DELAY_GAME:比较快,适合游戏
* SENSOR_DELAY_UI:慢
*/
sensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_UI);
}
}
protected void onPause() {
super.onPause();
if(sensorManager != null){
//解除注册
sensorManager.unregisterListener(this,sensor);
}
}
传感器监听函数
x,y,z值就是加速度传感器的三轴加速度值
public void onSensorChanged(SensorEvent event) {
//Sensor 发生变化时,在次通过event.values获取数据
float x = (event.values[0]);
float y = (event.values[1]);
float z = (event.values[2]);
}