Sphero:获取实时位置数据以停止sphero(android)

时间:2013-05-18 17:32:17

标签: android sphero-api

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

我注意到,但是当他还在滚动时它是不可能知道他在哪里,并且当它处于某个坐标集时停止它,因为数据很快就会到达。他基本上停止了更远,我可以看到坐标随着屏幕上的延迟而增加。我知道通信是异步的,我可以在通信过程中以某种方式丢失一些数据,但我认为通过给他一个窗口围绕坐标,我希望他能够在该区域中或多或少地阻止他,但它不会看起来效果不错。

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

1 个答案:

答案 0 :(得分:3)

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

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

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

您可以通过执行预测算法来实现此目的。使用'locatorData',您知道球的位置(x,y),并且您知道它的行进速度(vx,vy),您可以预测它将来的位置。因此,当您的算法在1-2秒内确定球将在您的目的地时,您可以提前发送停止命令。

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

我希望这些信息有所帮助!