首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sphero:获取实时位置数据以停止sphero (android)

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

Stack Overflow用户
提问于 2013-05-19 01:32:17
回答 1查看 1K关注 0票数 1

我正在尝试为sphero构建一个安卓应用程序,我需要在房间的某些区域停止sphero,我正在尝试使用DeviceMessenger.AsyncDataListenerlocatorData上实现这一点。

然而,我注意到,当他还在滚动时,不可能说出他在哪里,当它在特定的坐标集中时,不可能停止它,因为数据到达时会有很大的延迟。他基本上停得更远了,我可以在屏幕上看到坐标随着延迟的增加而增加。我知道通信是异步的,我可能会在通信过程中丢失一些数据,但我认为,通过给他一个围绕我希望他成为的坐标的窗口,我或多或少可以在那个区域阻止他,但它看起来不太好用。

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

EN

回答 1

Stack Overflow用户

发布于 2013-05-23 00:55:33

我以前用过'locatorData‘,你想做什么是很有可能的。有几种方法可以实现这一点。

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

你可以完成你的目标的一个方法是以较慢的速度击球。如果你以50%的功率驾驶,而不是100%,你的结果应该更准确。因此,时延和停止时延对精度的影响较小。

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

您可能还需要查看ConfigureLocator命令,因为这可以将球的起点设置为(x=0,y=0)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16627092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档