本项目是基于802.11mc协议的精确时间测量(Fine Time Measurement,FTM) 原理开发的基于精确位置服务的室内定位导航一体化软件,该APP站在巨人的肩膀上(即Google公司开源项目WifiRttScan) 进行增量开发, 并且得益于MIT Berthold K.P. Horn 教授的思路及其对应的研究成果WiFiRttScanX , 实现了支持802.11mc协议FTM功能的AP "凡扫描,皆响应"(指厂商在制造AP时可能不会显式宣传支持FTM)。
项目服务于室内定位、室内导航领域, 瞄准了当今市场室内定位领域设备部署成本高、定位精度差的痛点, 目标是基于802.11mc的WI-FI精确时间测量原理,利用市场上现有部署的支持FTM响应功能的AP,实现米级精度的室内定位。
- 室内实时定位
- 引入科大讯飞SDK,支持语音导航播报
- 结合高德地图SDK,支持室内外地图定位无缝衔接
- 扫描到所有支持FTM功能的AP
- 室内定位
- 室内导航
第三方相关JAR包依赖:(在Application/libs/目录下已下载完毕)
高德地图:AMap_Location_V5.6.1_20211115.jar
定位算法:commons-math3-3.6.1.jar 、trilateration-1.0.2.jar
蜂鸟云地图:fengmap.jar
科大讯飞语音:Msc.jar
安卓开发者直接clone导入项目即可。
略
├── Application
│ ├── docs
│ │ ├── README.md
│ │ └── imgs
│ ├── libs //相关的jar包依赖
│ │ ├── AMap_Location_V5.6.1_20211115.jar
│ │ ├── Msc.jar
│ │ ├── commons-math3-3.6.1.jar
│ │ ├── fengmap.jar
│ │ ├── mysql-connector-java-5.0.7.jar
│ │ ├── trilateration-1.0.2.jar
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ └── java
│ └── com
│ └── example
│ └── android
│ └── wifirttscan
│ ├── APLocationVisualizationActivity.java
│ ├── AccessPointRangingResultsActivity.java
│ ├── LocationPermissionRequestActivity.java
│ ├── MainActivity.java
│ ├── MyAdapter.java
│ ├── entity
│ │ ├── ApInfo.java
│ │ ├── ApRangingHistoryInfo.java
│ │ └── LocationInfo.java
│ ├── utils
│ │ ├── ConvertUtils.java
│ │ ├── DBOpenHelper.java
│ │ ├── DeviceInfoHelper.java
│ │ ├── FMCoordTransformer.java
│ │ ├── FileUtils.java
│ │ ├── LocationAlgorithm.java
│ │ ├── ViewHelper.java
│ │ └── ZipUtils.java
│ └── widget
│ ├── ImageViewCheckBox.java
│ └── NavigationBar.java
├── README.md
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── settings.gradle
└── tree.txt
联系方式:[email protected]
该项目参考了Google的WiFiRttScan app开源代码
灵感来源于Google WifiRttScan和MIT WifiRttScanX。
感谢实验室老师和同学的支持和帮助。
该项目签署了MIT 授权许可,详情请参阅 LICENSE.md
- 优化:项目架构,添加Mysql数据库服务器(本地测试通过)
- 新功能:可通过数据库下发AP位置信息,可上传用户定位信息,设备IP,MAC地址至后台数据库
- 导航功能初步完成
- 问题:方位角回显不准确
- 优化:优化定位点Marker方位角的更新状态,随着高德地图SDK每秒更新一次
- 新功能:导航过程中路径偏移重新规划
- 问题:发现高德定位SDK在一段时间后,方位角就不会更新了,像用的之前的缓存
- 问题:定位经过一段时间后,会重复性报错:至少需要X个支持FTM测量的AP才能定位,mFTMCapableAPs.size():X,此时页面上定位点不再有任何响应,怀疑跟mFTMCapableAPs有关系,异步onRangingResult更改全局变量
- 优化:减少周期性扫描周边AP状态次数,优化为当位置点与10s前的位置点发生较大位移时再进行扫描
- 优化:新增mean_shift 聚类算法,将最近10次定位点的最密集处作为结果,减少漂移概率
- 修复:取消导航之后不能删掉约束后定位导航点和确认导航后多了一个定位点的问题
- 导航功能架构设计初步完成(壳子)
- 修复:上一版本的内存泄漏问题,问题定位在导航定位SDK并没有接入真实导航中
- 问题:确认导航之后多了一个路径约束后的定位导航点,地图中变成了两个定位点,需要在导航过程中把真实定位点隐藏
- 问题:取消导航之后不能删掉约束后定位导航点
- 新功能:结合蜂鸟云室内导航实例demo<FMDemoNavigationAdvance.map.FMNavigationApplication>完善 确认导航 功能
- 新功能:接入科大讯飞语音合成SDK,可进行文字转语音播报
- 问题:导航过程出现Waiting for a blocking GC Alloc内存泄漏问题
- 修复:在APLocationVisualizationActivity.removeAPImageMarker()删除AP图标方法导致的java.util.ConcurrentModificationException异常
- 新功能:基于高德地图定位SDK,实现了定位点方位角随手机朝向进行自动更新
- 新功能:实现定位可视化中FTM capable AP的自动定时刷新,取到最新鲜的WI-FI状态
- 新功能:实现了根据初步定位结果设置导航起点,也可以随意点击地图任意一点设置终点,并计算总路径和预计时间
- 新功能:加入了前端开始导航按钮功能,点击起终点后可进一步确认导航/取消导航返回
- 新功能:实现基本定位可视化效果,定位算法使用Levenberg-Marquardt算法
- 问题:偶尔的定位漂移比较明显,当STA在AP分布中间位置的时候定位比较准