这学期《传感器与微系统》课程论文做的是室内定位方向的数据工作:在 3m×5m 的实验场地里,人工采集了 WiFi RSSI 与地磁两路指纹,构建了一张 0.5m 网格的指纹库。定位算法本身是论文的核心内容,暂不展开;本文只记录数据采集与预处理的工程实践。
指纹法定位原理
指纹法分离线、在线两个阶段。离线阶段在场地内按网格逐点采集各 AP 的信号强度,形成「位置 ↔ 信号指纹」数据库;在线阶段用实时采到的信号去指纹库里匹配,反推出当前坐标:

WiFi RSSI 空间波动大、成本低,地磁信号空间差异明显、不受光照遮挡影响,两者互补——这也是选择这两路指纹的原因。
地磁采集:ESP32 + ICM20948
地磁传感器选用 ICM20948(9 轴 IMU 内置 AK09916 磁力计),主控为 ESP32,Arduino 框架开发。
采集流程:
- 通过姿态解算获取横滚角 $\phi$ 与俯仰角 $\theta$
- 读取磁力计原始三轴数据 $M^b = [m_x, m_y, m_z]^T$
- 用旋转矩阵把设备坐标系下的磁场校正到水平坐标系(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}$$
- 输出三元组:(水平磁场模值,垂直磁场模值,总磁场模值)
采样频率设为 1Hz(宏定义可调)。姿态校正这步很关键——手持设备不可能保证完全水平,不做校正的话,同一位置换个握持角度读数就完全对不上了。
WiFi RSSI 网格测量
- 场地:约 300cm × 500cm 的室内区域
- AP 布置:5 个无线接入点
- 采样:按 1m 网格逐点人工采集,每个网格点记录 5 路 RSSI(dBm)与地磁三模值
原始数据以 xlsx 记录,字段包括网格点物理坐标(cm)、RSSI_1~RSSI_5、地磁三模值(μT)。
预处理:从 1m 实测到 0.5m 指纹库
实测网格 1m 间距偏稀疏,直接做指纹匹配粒度不够。预处理流水线:
- 网格提取:从原始测量数据抽取 1m 间隔网格点
- IDW 插值扩充:用反距离加权插值把网格加密到 0.5m,扩充指纹库分辨率(插值域的选择有讲究,细节在论文里)
- 格式转换:xlsx 统一转 CSV 供后续使用
看看采到的数据
数据好不好,可视化是最直观的检验。5 个 AP 中一路 RSSI 的三维曲面——可以明显看到信号强度随空间的起伏:

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

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

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