假设我在水平线上有3个信标,我想检查距离中点有多远的距离,所以我想得到该区域的正负值。这意味着我想声明信标的右侧或左侧位置,因此我可以估计信标的当前位置的点。
这是看起来像谷歌地图导航的东西,我想用水平线显示圆形区域上的指针,所以在此之前我想知道如何获得Ibeacon的正面或负面的X-axis
。
有这个问题的解决方案。但它们很复杂,我们将超越StackOverflow答案中的简单代码片段。
主要问题是信标信号是全向的。因此,如果你根据信标的信号强度估计你在3米之外,你不知道哪个方向。对于问题中的2D轴,您不知道自己是左还是右。
第二个问题是,一旦超过1-3米,信号测量的噪声就会变得非常高,使得距离估计误差也很高。这使得即使在如此适中的距离下,像三边测量这样的技术也很差。
对于2D室内定位,一般解决方案是使用RSSI指纹识别。这需要训练数据集,其中在2D网格上的每个点处记录每个信标的相对信号电平的矢量。 (对于1D线也是如此。)训练后,该数据集用于查找位置。为每个信标的相对信号电平创建一个新向量。然后在训练集中搜索最接近的矢量匹配。这会给你你的位置。
您可以查找称为trilateration或multilateration的概念。假设您知道至少3个信标的位置,这些信标的位置使它们分开但信号重叠,您可以解决这些信标之间的任意点。
因此,您的移动应用程序需要做的是:1)了解每个信标的位置(例如x,y)。这些位置可以是任意的,只要它们一致地应用于坐标系中的所有信标即可
2)扫描每个信标的广告数据,其中应包括该信标的RSSI。您可以使用它来估计每个检测到的信标与手机的距离。
3)了解每个信标的位置以及手机与每个信标的距离,您可以使用多点定位功能计算手机相对于信标的位置。有很多可以做到这一点的库,基于非线性最小二乘算法的库可以工作。
我在一些室内导航应用程序上完成了上述操作,质量和准确性在很大程度上取决于您的信标定位。您需要确保在您想要覆盖的任何区域中,附近有3到4个信标,以提供合适的RSSI读数。