室内定位指纹库构建实践:ESP32 地磁采集与 WiFi 网格测量

《传感器与微系统》课程论文的数据侧工作记录:ESP32+ICM20948 地磁采集与姿态校正、WiFi RSSI 网格测量、IDW 插值扩充指纹库与数据可视化。

这学期《传感器与微系统》课程论文做的是室内定位方向的数据工作:在 3m×5m 的实验场地里,人工采集了 WiFi RSSI 与地磁两路指纹,构建了一张 0.5m 网格的指纹库。定位算法本身是论文的核心内容,暂不展开;本文只记录数据采集与预处理的工程实践。

指纹法定位原理

指纹法分离线、在线两个阶段。离线阶段在场地内按网格逐点采集各 AP 的信号强度,形成「位置 ↔ 信号指纹」数据库;在线阶段用实时采到的信号去指纹库里匹配,反推出当前坐标:

指纹法室内定位原理

WiFi RSSI 空间波动大、成本低,地磁信号空间差异明显、不受光照遮挡影响,两者互补——这也是选择这两路指纹的原因。

地磁采集:ESP32 + ICM20948

地磁传感器选用 ICM20948(9 轴 IMU 内置 AK09916 磁力计),主控为 ESP32,Arduino 框架开发。

采集流程:

  1. 通过姿态解算获取横滚角 $\phi$ 与俯仰角 $\theta$
  2. 读取磁力计原始三轴数据 $M^b = [m_x, m_y, m_z]^T$
  3. 用旋转矩阵把设备坐标系下的磁场校正到水平坐标系(z 轴指向上方):

$$R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \ 0 & \cos\phi & \sin\phi \ 0 & -\sin\phi & \cos\phi \end{bmatrix} \qquad R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & -\sin\theta \ 0 & 1 & 0 \ \sin\theta & 0 & \cos\theta \end{bmatrix}$$

  1. 输出三元组:(水平磁场模值,垂直磁场模值,总磁场模值)

采样频率设为 1Hz(宏定义可调)。姿态校正这步很关键——手持设备不可能保证完全水平,不做校正的话,同一位置换个握持角度读数就完全对不上了。

WiFi RSSI 网格测量

  • 场地:约 300cm × 500cm 的室内区域
  • AP 布置:5 个无线接入点
  • 采样:按 1m 网格逐点人工采集,每个网格点记录 5 路 RSSI(dBm)与地磁三模值

原始数据以 xlsx 记录,字段包括网格点物理坐标(cm)、RSSI_1~RSSI_5、地磁三模值(μT)。

预处理:从 1m 实测到 0.5m 指纹库

实测网格 1m 间距偏稀疏,直接做指纹匹配粒度不够。预处理流水线:

  1. 网格提取:从原始测量数据抽取 1m 间隔网格点
  2. IDW 插值扩充:用反距离加权插值把网格加密到 0.5m,扩充指纹库分辨率(插值域的选择有讲究,细节在论文里)
  3. 格式转换:xlsx 统一转 CSV 供后续使用

看看采到的数据

数据好不好,可视化是最直观的检验。5 个 AP 中一路 RSSI 的三维曲面——可以明显看到信号强度随空间的起伏:

WiFi RSSI 三维曲面

地磁总模值的等高线图——场地西部偏高(约 55μT)、东部偏低(约 43μT),空间梯度明显,这正是地磁指纹可用于定位的前提:

地磁总模值等高线

换个角度看地磁场强度曲面:

地磁场强度三维曲面

小结

  • 指纹库质量决定指纹定位的上限,采集阶段的网格规划、姿态校正、传感器选型都比想象中重要
  • 地磁的空间梯度和 WiFi 的互补性在数据里体现得非常直观
  • 融合定位方法本身是论文核心内容,等论文发表后再写一篇展开
使用 Hugo 构建
主题 Stack 由 Jimmy 设计