1

我正在尝试为 sphero 构建一个 android 应用程序,我需要在房间的某些区域停止 sphero,并且我正在尝试locatorData使用DeviceMessenger.AsyncDataListener.

然而,我注意到,当他还在滚动时,不可能知道他在哪里,当它在某个坐标集时停止它是不可能的,因为数据到达的延迟很大。他基本上停得更远,我可以看到坐标随着屏幕上的延迟而增加。我知道通信是异步的,我可能会在通信过程中以某种方式丢失一些数据,但我认为通过在我希望他所在的坐标周围给他一个窗口,我可以或多或少地阻止他在那个区域,但它没有看起来它工作得不体面。

目前,我想出的唯一解决方案是发送滚动命令,根据速度计算滚动到这些坐标所需的时间并发送延迟停止命令,但我不喜欢这样解决方案,当我实现我需要的所有功能时,我认为从长远来看它不会正常工作。locatorData有没有人对在这种情况下以及如何使用它有任何建议?

4

1 回答 1

3

我以前使用过'locatorData',你想要做的事情是很有可能的。有几种方法可以实现它。

您遇到的巨大延迟不是通信延迟,而是定位器传感器每秒仅更新 10 次 (10Hz) 的事实。但是,这仍然应该足够多的时间在您将球停在边界内的限制范围内工作。另一个因素是,你有没有想过球需要大约 1-2 英尺才能停下来?这取决于您发送停止滚动命令时球的移动速度。

驾驶室实现目标的一种方法是以较慢的速度击球。如果您以 50% 的功率而不是 100% 的功率行驶,您的结果应该更准确。因为,时间延迟和停止延迟对精度的影响较小。

您可以实现此目的的另一种方法是执行预测算法。使用'locatorData',你知道球在哪里(x,y),你知道它的速度(vx,vy)你可以预测它将来会在哪里。因此,当您的算法确定球将在 1-2 秒内到达您的目的地时,您可以提前发送停止命令。

您可能还想查看 ConfigureLocator 命令,因为这可以使您的球的起点为 (x=0, y=0)。

我希望这个信息帮助!

于 2013-05-22T16:55:32.727 回答