本文主要是介绍惯性室内导航入门到精通(1)-步行者航位推算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
之前使用rssi室内定位获得大致定位,这时候使用手机内置传感器进行惯性导航,进行综合定位,使定位更精确。
下一篇:惯性室内导航入门到精通(2)-移动平均法
点击:室内定位主页目录+一维实战+二维实战+安卓惯性导航基础
惯性导航概述
惯性导航是一种不借助外力(接收本体之外的信号)的自主性导航,你只要知道自己的初始位置,知道自己的初始朝向,知道自己每一时刻如何改变了朝向,知道自己每一时刻相对朝向是怎样走的,这样就能得到每时每刻自己的位置。
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]);}
这篇关于惯性室内导航入门到精通(1)-步行者航位推算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!