gpt4 book ai didi

bluetooth-lowenergy - iBeacons 的三角测量示例

转载 作者:行者123 更新时间:2023-12-03 05:21:37 30 4
gpt4 key购买 nike

我正在研究使用多个 iBeacons 进行“粗略”室内定位的可能性。该应用程序是一种“博物馆”设置,能够更容易地形成一个包含不同对象位置的网格,然后形成单独的信标(尽管这也不是不可能的)。

是否有使用多个信标对某种位置进行三角测量的示例、经验,或者一些逻辑来帮助我自己编写它?

最佳答案

我一直在进行一些实验,以使用三个信标获得精确位置。

三边测量结果

不幸的是,结果在质量方面非常令人失望。主要有两个问题:

  1. 在非受控环境中,您可以找到金属和其他影响信号的物体,信标接收到的信号强度变化非常频繁,以至于误差范围似乎不可能低于 5 米。
  2. 根据用户处理接收器设备的方式,读数也会发生很大变化。如果用户将他/她的手放在蓝牙天线上,则算法将具有低信号作为输入,因此信标将距离设备很远。请参阅this image查看蓝牙天线的精确位置。

可能的解决方案

在与一位积极劝阻我走这条路的苹果工程师交谈后,我觉得现在更倾向于使用的选项是暴力。尝试每隔 X 米设置一个信标(X 是系统中可容忍的最大误差),以便我们可以通过计算网格上的哪个信标距离设备最近并假设在此信标网格上跟踪给定设备的位置设备位于同一位置。

三边测量算法

不过,为了完整起见,我将三边测量算法的核心功能分享如下。它基于 this article 的第 3 段(“已知的三个距离”) .

- (CGPoint)getCoordinateWithBeaconA:(CGPoint)a beaconB:(CGPoint)b beaconC:(CGPoint)c distanceA:(CGFloat)dA distanceB:(CGFloat)dB distanceC:(CGFloat)dC {
CGFloat W, Z, x, y, y2;
W = dA*dA - dB*dB - a.x*a.x - a.y*a.y + b.x*b.x + b.y*b.y;
Z = dB*dB - dC*dC - b.x*b.x - b.y*b.y + c.x*c.x + c.y*c.y;

x = (W*(c.y-b.y) - Z*(b.y-a.y)) / (2 * ((b.x-a.x)*(c.y-b.y) - (c.x-b.x)*(b.y-a.y)));
y = (W - 2*x*(b.x-a.x)) / (2*(b.y-a.y));
//y2 is a second measure of y to mitigate errors
y2 = (Z - 2*x*(c.x-b.x)) / (2*(c.y-b.y));

y = (y + y2) / 2;
return CGPointMake(x, y);
}

关于bluetooth-lowenergy - iBeacons 的三角测量示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20332856/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com