PDR与RSSI融合定位入门:从原理到实践
1. 前言
为什么要融合?
单独PDR(惯性导航):靠IMU(加速度计+陀螺仪)估算人的行走轨迹,优点是连续性好、无须外部基站,缺点是长时间会累积误差、漂移。
单独RSSI定位:靠蓝牙/无线信号的强度(RSSI)推断当前位置,比如“离哪个信标最近就在哪”,优点是误差不会累积,缺点是瞬时跳变大、易受环境影响。
融合定位:结合两者优点——PDR补连续,RSSI定锚点,整体轨迹又连续又准确!
2. 核心知识预备
2.1 PDR是什么?
PDR(Pedestrian Dead Reckoning,行人航位推算)用传感器推算“我走了多少步、每步多长、朝哪个方向”,逐步叠加得到轨迹。
步数:靠加速度传感器,检测“走了一步”
步长:通常设为常数,或根据步频自适应估计
航向角:用陀螺仪、地磁等算出“当前朝向”
举个例子:
假如你站在(0,0),向正东走两步,每步0.7米,轨迹点是:
第1步:(0,0)→(0.7,0)
第2步:(0.7,0)→(1.4,0)
2.2 最邻近RSSI定位是什么?
最邻近算法(Nearest Neighbor),就是找出当前采集到的RSSI指纹,和指纹库里哪个点最相似,直接用那个点的坐标作为当前位置。
指纹库:提前在室内各点采集好信号强度(比如Beacon1:-60dBm,Beacon2:-70dBm...)
实时采集:当前采到的信号强度和指纹库比一比,距离(欧氏距离/曼哈顿距离)最近的那个点,就是推测的当前坐标。
3. 步步为营——PDR与RSSI融合的流程
本部分带你按实际开发/实验的顺序,一环套一环地理解和操作
Step 1:数据准备
3.1.1 获取IMU数据(做PDR)
手机或穿戴设备,记录加速度、角速度等IMU原始数据
小白建议:用现成的APP(如“Sensor Logger”)采集,加速度/角速度采集频率≥50Hz更好
3.1.2 构建指纹库(做RSSI定位)
在目标区域均匀布点,每点采集一段时间RSSI信号,存下每个点的信号向量
小白建议:同一设备同一高度采集,避免人为误差
3.1.3 实时采集RSSI信号
定期(如每1秒)采集当前时刻所有信标的信号强度
Step 2:分别单独定位
3.2.1 用PDR推步进轨迹
检测每个“步”事件
估算步长(可设常数0.7米,或步频自适应公式)
估算每步的航向(初期可直接用手机航向传感器,后续可用卡尔曼滤波融合)
3.2.2 用最邻近RSSI推瞬时坐标
每个采样时刻,取当前RSSI信号
计算和指纹库每个点的距离(比如欧氏距离),取距离最小的那个点
用该点的坐标,作为当前的“RSSI定位结果”
Step 3:核心——PDR与RSSI轨迹融合
为什么要融合?
PDR的轨迹有时偏离实际道路,但连续性强;
RSSI定位点比较“跳”,但能纠正PDR的累积漂移;
融合后:轨迹既平滑,又能定期“拉回”真实路径!
融合方法一:简单重置法(小白入门最易上手)
每N步/每隔T秒,把PDR当前坐标“拉回”到RSSI定位点
实时用PDR推进每个轨迹点
一旦新一帧RSSI定位结果出来,就用它矫正PDR轨迹点(直接赋值,或平滑一下)
举例:
走路5秒,PDR算你在(10, 4),此时最近的RSSI点位置是(8, 5),
可以直接把PDR轨迹“拉”到(8, 5),或者平滑一下:
融合坐标 = 0.7*PDR坐标 + 0.3*RSSI坐标
融合方法二:卡尔曼滤波(进阶,建议后期深入)
用卡尔曼滤波,把PDR轨迹作为预测,RSSI结果作为观测,不断更新最优估计
这样既能充分利用PDR的连续性,也能防止RSSI跳变带来的大幅漂移
小结:
简单融合:直接“拉回”或加权平均
复杂融合:用卡尔曼滤波、粒子滤波等(初学者可以先用前者)
4. 常见问题与小贴士
Q1:为什么单靠PDR会“漂”?
IMU会有噪声和零点漂移,时间一长,误差就累积了。
Q2:RSSI的“最邻近”为什么容易跳?
因为环境反射和遮挡很大,信号瞬时变化大,定位会“闪现”到别处。
Q3:我怎么调节融合“强度”?
如果RSSI很可靠,可以多用RSSI矫正(融合时权重大);如果环境干扰大,可多依赖PDR。
Q4:有没有现成的开源项目?
可以搜索“OpenPDR”, “IndoorLoc”, “PDR+RSSI Fusion”等关键字,很多Github项目都有相关实现。