基于无线传感器网络多点定位的 Android 移动定位系统。
通过 RSSI 测距 + 三边定位/最小二乘定位,实现对蓝牙设备的相对定位。支持多台手机协作定位,手机越多精度越高。
- 信号仪表盘:实时显示周围 BLE/WiFi/基站信号强度
- 单设备定位:画8字扫描 + 步行标记 + 三边定位解算
- 批量定位:走一段路径,自动定位周围所有 BLE 设备
- 协作定位:多台手机通过 WiFi Direct/WiFi Aware 组网,互相测量 RSSI 建立坐标系
- 锚点管理:手动添加/删除已知位置的锚点
| 层 | 技术 |
|---|---|
| UI | Jetpack Compose + 自定义 Canvas |
| 语言 | Kotlin |
| 数学核心 | 纯 Kotlin(零 Android 依赖) |
| P2P 通信 | WiFi Direct (TCP Socket) / WiFi Aware |
| 序列化 | kotlinx.serialization |
| 测试 | JUnit 5 |
app/src/main/java/com/siganchor/
├── math/ 纯 Kotlin 算法模块
│ ├── model/ Vec2, Point2D, SignalMeasurement
│ ├── linalg/ Matrix(2×2 求逆、最小二乘)
│ ├── propagation/ LogDistanceModel(RSSI↔距离)
│ ├── localization/ 三边定位、多点定位、加权最小二乘
│ ├── filter/ KalmanFilter1D
│ └── geometry/ Circle, IntersectionSolver
├── signal/ BLE/WiFi/Cell RSSI 采集
├── engine/ 定位引擎、步行检测、协作定位会话
├── network/ WiFi Direct/Aware P2P 通信
└── ui/ Compose 界面 + Canvas 可视化
# 需要 JDK 21 + Android SDK (API 34)
# 设置环境变量 JAVA_HOME, ANDROID_HOME
# local.properties 中配置 sdk.dir
gradlew.bat assembleDebugAPK 输出:app/build/outputs/apk/debug/SigAnchor-v{version}.apk
gradlew.bat testDebugUnitTest46 个单元测试覆盖数学模块(向量、矩阵、路径损耗模型、定位算法、卡尔曼滤波、圆交点)。
使用对数距离路径损耗模型:
将圆方程两两相减消去二次项,得到线性方程组
权重由 RSSI 强度决定:信号越强的锚点权重越大。
多台手机递增式建立坐标系:第一台设为原点,第二台放在 x 轴,后续手机通过三边/最小二乘定位。每台定位后的手机成为新锚点,精度随锚点数增加而提升。
需要以下运行时权限:
ACCESS_FINE_LOCATION— GPS 定位BLUETOOTH_SCAN— BLE 扫描BLUETOOTH_CONNECT— BLE 连接NEARBY_WIFI_DEVICES— WiFi Aware (Android 13+)
MIT