如何估计两个安卓设备之间的距离? (蓝牙首选)

Posted

技术标签:

【中文标题】如何估计两个安卓设备之间的距离? (蓝牙首选)【英文标题】:How to estimate distance between two android devices? (bluetooth preferred) 【发布时间】:2012-12-23 22:33:22 【问题描述】:

目标是没有真正的距离。这是更简单的事情。 目标是检查另一台设备是否非常接近。对或错。假设 10 或 15 厘米很近,所以我们的检查是正确的,任何更远的设备都无法通过检查并且是错误的。

我的第一个方法是使用api的方法fetchUuidsWithSdp()但是失败了! 无论是几厘米远的设备还是大房间另一端的设备,延迟似乎都是一样的!

即使没有蓝牙,任何解决方案都是可以接受的。例如,我对 wifi direct p2p 协议完全不熟悉。也许那里有一些有用的东西可以粗略估计距离。

编辑:我正在阅读有关接收信号强度指示器(RSSI)的信息。这可以用于我们的特殊情况,粗略估计设备之间的距离。但也许可以结合一些东西来提高准确性。

编辑:我测试了拉尔加的答案。我确实建立了连接,并且在设备之间建立了 ping-pong 的次要协议。 当以 1 字节 进行乒乓球时,非常接近时的平均延迟为 22.6000 毫秒,而在房间的另一个角落时为 22.6087 毫秒。 当以 1024 字节 进行乒乓球时,非常接近时的平均延迟为 40.3173 毫秒,在房间的另一个角落时甚至更小,为 32.3138 毫秒。 毕竟,确实,延迟不携带任何有关距离的信息

谢谢!

【问题讨论】:

【参考方案1】:

你可以measure distance with sound。

【讨论】:

这是一个很好的实现。你知道它背后的原理是如何运作的吗? 我认为它测量发出的声音反弹并返回设备所需的时间(通过扬声器播放声音并通过麦克风收听),但也许有一些更聪明的事情发生,比如interferometry . 必须包含一些声音处理,因为很明显声音本身带有一些关于距离的信息,但我不确定弹回的时间是否足够,因为这意味着会发出一声哔声充足的。此外,当主设备完成播放声音时,在从设备响应之前(处理等)会有延迟,但同时可以很好地测量距离!! 我相信这个链接是人们可以开始的基础:How to Measure the Distance Between Two Locations Using Sound【参考方案2】:

我研究了蓝牙定位,它就像检测信号强度一样简单。要获得真正准确的结果,您还需要考虑您使用的手机类型、电池类型和电池状况。您还必须考虑环境及其对信号强度的影响,以及可能干扰信号的障碍物,例如人、墙壁、桌子等。

要确定距离,您还需要使用三角测量技术来确定移动设备的位置。您还可以在您的环境中设置多个发射器并针对每个发射器进行测量。了解这些发射器的位置后,您就可以计算出手机的位置。

但是,信号强度会有所不同,您必须进行大量校准。有许多科学论文可以深入了解所需的算法。还有几家公司提供这种服务,用于商场、博物馆等。

也就是说,如果你能获得信号强度,那么你应该能够计算出基本的近或远结果,但它不会完全准确,在这种情况下,我仍然认为拥有多个发射器会还是很有帮助的。

Paper, some of the pitfalls PDF(download), another paper

我从谷歌搜索蓝牙定位中阅读了很多论文,这些论文将为您提供一些指导。

【讨论】:

您现在还可以在 Estimote/iBeacon 中查找基于位置/类型的事件。【参考方案3】:

我能想到的唯一可行的方法是使用 NFC。要使用蓝牙或 Wi-Fi,您必须通过信号强度来实现,但每个发射器都不同,因此根本不可靠。

延迟是相当无用的,因为无线电波以光速传播,传播一英寸和一英里之间的时间差基本上为零。要衡量这种差异,您需要比手机更高的分辨率。

【讨论】:

这几乎是一个很好的答案,直到您输入了非常不准确的“英里”评论。 你说得对。这不是速度的问题,而只是力量的问题。接收器的信号有多强。接收者知道这一点。数据或数据的延迟不携带任何有关距离的信息。如果我错了,请纠正我! (我现在将编辑我的问题) +1 OP 说用例是用于文件传输。 NFC 就是为此而设计的,尽管还没有在所有设备上...... 我的印象是,虽然 NFC 可以传输数据,但建议您使用 NFC 建立安全连接,然后将高传输率推迟到更合适的 wifi。 您可以放心地假设,对于我的应用来说,如果 NFC 无处不在,那么我就不需要蓝牙。但我猜这只会在一年多后发生【参考方案4】:

您没有指定此距离检测的目标,但如果您可以为此添加一些额外要求(即手机方向和闪光灯),则可能会使用完全不同的方法。

如果两个设备的方向都让两个摄像头相互面对,则可以使用闪光灯来验证正确的手机和距离。相机图像中产生的白点大小随距离迅速减小,特定的闪光序列可以区分其他手机闪光灯和其他光源。

这可能需要一些调整才能在户外工作,因为对于相同的距离,光斑尺寸会小得多...

问候。

【讨论】:

目标就像传输文件一样简单 :) 用户接近设备并传输文件。恐怕手电筒的整个事情并不能说明它是哪个设备。好的,假设您有一个看到亮点的算法。所以两个人背靠背有手机。状态是“我在”和“我看到一个亮点”。要求是,“你在看一个亮点吗”?然后附近的另外两个人做同样的事情。因此,请求(例如通过蓝牙)“你在打开并看到一个亮点”的设备会得到两个响应!如果我错了,请纠正。 特定闪存序列的建议正是为了解决这个问题。该请求类似于:“如果您是正确的电话,请闪现此随机长度序列”,并且答案确认如果正确的电话对齐,则读取亮点会发生变化,并且对于附近的任何其他电话都将失败。需要明确的是,这只是一个想法,我从未尝试过:-)

以上是关于如何估计两个安卓设备之间的距离? (蓝牙首选)的主要内容,如果未能解决你的问题,请参考以下文章

使用蓝牙获取两个安卓设备之间的距离

如何计算两个Android设备之间的距离? [关闭]

如何计算两个经纬度之间的距离[重复]

安卓怎样连接两个蓝牙?

什么是手机配对,

android audio - 计算两个设备之间的距离