我正在尝试通过用户的蓝牙强度(RSSI值)找到用户。
我有 3 个树莓 PI,每个 PI 收集用户的信号强度。假设节点返回:
node1 = 65
node2 = 70
node3 = 75
如何通过三角测量找到用户并在地图上精确定位用户,并输出 RSSI 值?
我研究过三边测量和塞瓦定理,但不知道如何实现它们。
我不确定如何在环境中定位节点,我是否为主节点指定 x=0 y=0 的位置,以及我应该给其他两个节点什么?
你的方法基于一些脆弱的假设。
三边测量是根据到已知位置的三个(或四个,如果是三维)距离测量值来确定空间中的位置。三角测量是根据已知位置的三个角度(信号来自哪个方向)测量值来确定空间中的位置。三个Raspberry PI节点固定在空间中,并且您有一些测量系统,其中每个节点的(x,y (z))位置是已知的。
你拥有的是某些功率单位(例如dBm)的三个信号强度值,并且您希望将其作为到特定接收器的距离的代理。问题是,除非你在一个大的空房间里这样做,否则它不是一个特别好的代理。射频信号从一些东西上反弹,产生很少的干扰节点、阴影和各种有趣的东西。根据环境的混乱程度,这可能会导致三边测量结果的准确性变差,或者完全没有价值。
假设您在空仓库中操作,首先您必须选择一些坐标框架并进行一些测量并为节点分配位置。将一个节点设为零可以简化您的一个测量,您只需要对其他节点进行相对测量。确保 X 轴和 Y 轴垂直。
然后,您将需要生成一些将RSSI与距离相关联的数据。也就是说,远离节点的已知距离并记下RSSI编号是什么。如果幸运的话,每个节点的测量值都相同。可能不是 - 并非所有无线电都是平等创建的。此外,并非所有天线在每个方向上均匀辐射功率。 使用该数据和一些挥手来近似与已知节点位置的距离;从那里开始,实现的其余部分应该是直接的几何图形(正如 Wiki 无疑已经列出的那样)。
正如 Mikeb 回答所述,从信号强度定位设备的方法不是一个好方法(除非您有非常多的节点并且只想找到最近的节点,例如电话蜂窝在没有 GPS 的情况下定位)
另一种方法是测试信号的传播时间
-
为此,您的距离或电子设备必须足够大/快才能完成此任务,以满足您所需的精度
- 你必须有同步时间
- 从每个节点向目标设备发送时间戳数据包(或连续时间信号)
- 在设备上一次(time_of_receive)获取 3 次(每个已知节点一次)
- 将所有 3+1 次发送到需要位置的设备
- 将时差转换为距离
- 时移越远,距离越长...
-
dtime = time_received_from_node-time_of_receive
- 如果您知道发送时间,那么这很容易(
dist = c * dtime
) +/- 环境影响信号速度 - 如果不是(如在GPS上),那么它就更复杂了,您必须从时移中搜索单个节点的开始时间 可以从
- 3 个节点开始,但暴力攻击的复杂性非常可怕,因此节点越多越好
- 如果您的数据传输通道不同步(或延迟),那么短距离的精度也可能很差
- 当你得到 3 个距离时,只需求解 3 个球体的相交
- 中心是节点,半径是计算的距离
- 如果由于错误测量的时间而未找到交叉点,则应在半径上添加一些安全值