Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Sphero API是否有更准确的方法检测球对球碰撞?_Ios_Objective C_Collision Detection_Sphero Api - Fatal编程技术网

Ios 使用Sphero API是否有更准确的方法检测球对球碰撞?

Ios 使用Sphero API是否有更准确的方法检测球对球碰撞?,ios,objective-c,collision-detection,sphero-api,Ios,Objective C,Collision Detection,Sphero Api,我正在为sphero机器人球写一个游戏(他们的论坛有问题,似乎无法提问)。我正在尝试为两个或更多的球员进行球对球碰撞检测 首先,他们在这里提供了一个示例: 他们提供的门槛太敏感了,在木地板上,它总是会触发。忘记了这一点,我必须使用两台设备的碰撞时间戳来查看它们是否在大致相同的时间触发碰撞 我的问题是在减去时间戳时,在某些情况下,我得到了非常大的变化,我认为开始时差异相当大。我存储了几个时间戳,这样我就不会错过正确的时间戳,我试着利用死区时间来看看降低它是否有帮助 最常见的是减去2个NSTime

我正在为sphero机器人球写一个游戏(他们的论坛有问题,似乎无法提问)。我正在尝试为两个或更多的球员进行球对球碰撞检测

首先,他们在这里提供了一个示例:

他们提供的门槛太敏感了,在木地板上,它总是会触发。忘记了这一点,我必须使用两台设备的碰撞时间戳来查看它们是否在大致相同的时间触发碰撞

我的问题是在减去时间戳时,在某些情况下,我得到了非常大的变化,我认为开始时差异相当大。我存储了几个时间戳,这样我就不会错过正确的时间戳,我试着利用死区时间来看看降低它是否有帮助

最常见的是减去2个NSTimeInterval,我得到的差值在0.68和0.72之间(我预计反应水平为0.01)。所以我在检查差值是否在0.72以下,连续三次我得到了0.72和0.73之间,好几次我得到了1.5,2.6,1.1甚至3.8

它似乎不可靠。文件上说这一次来自iPhone参考资料。两台设备都同步以自动获取时间,因此它们尽可能彼此接近


有没有人尝试过这一点,并提出了一个可靠的解决方案,即不需要让一个球静止不动?

当我开始作为Sphereo制造商Orbotix的开发人员时,我对球对球碰撞的主题做了大量的研究

这是一个非常复杂的问题。我做这项工作的最接近之处(对于一个受感染的僵尸研究游戏)是在样本大小为3的情况下,检测哪个球击中哪个球的准确率约为80%。你在比赛中投的球越多,准确度就越低。因此,我们决定通过让一个球在易受攻击之前停止移动来消除这个问题,就像在Sphero TAG中一样

有几个因素限制了这种能力,您似乎已经发现了它们。我认为最大的问题是,当球在行驶时,碰撞检测的性能很差。尤其是在粗糙的表面上,或当球快速移动时。仅此一点,再加上死区时间,就会造成重大问题

我能够得到碰撞时间戳,平均在50毫秒之内。在手机之间传输数据包时,您是否考虑了wifi延迟


解决方案可能是你不想听到的,但你应该调整你的游戏,使其在碰撞检测的能力范围内工作。也就是说,当球可以接触到,甚至像在TAG中一样停下来时,球的速度非常慢。问问你自己,如果没有球对球的碰撞,我怎么能让这一切变得有趣呢?

首先,我想说的是,我们正在将我们的开发者支持论坛移到StackOverflow,这就是为什么你不能在论坛上发表文章。西蒙,你来StackOverflow做了正确的事,你应该感到骄傲

我们只是将论坛改为重定向到这里,而不是让人们感到困惑。

时间戳由Sphereo生成。但它们唯一有意义的是,您正在使用Poll Packet Times命令生成延迟和偏移值。请参阅API命令文档中的DID 00h、CID 50h


也就是说,碰撞检测是一项不断发展的技术。我们在机器人内部的滑动数据窗口上采用了巧妙编码的DFT频率变换。参数允许调整到您正在运行的曲面;没有通用设置。如果你获得了太多的假阳性,那么请进行实验。如果您有改进算法的想法,请直接与我们联系,也许我们可以将其作为一种新的过滤方法。我们总是乐于接受聪明的想法

您可以在游戏开始时同步每个Sphereo的内部计时器。这些可以与每个主机电话内的同步计时器相匹配。时钟可能不同,但毫秒就是毫秒。您还可以降低碰撞检测的阈值,从而使“事件”(伤害、感染等)仅在“攻击”球体以一定速度移动时发生。或其变体。

wifi延迟?通过阅读文档,我了解到影响时间戳是Sphereo使用电话时间作为参考创建的,因此我可以忽略延迟,因为它是事件发生时间的记录,而不是数据包接收时间的记录。是的,我玩过sphero tag,我真的不想这么做,因为我真的不是它的粉丝,我想我只能放弃它。谢谢你的建议,为我节省了很多浪费的时间谢谢你的帮助,但我当时正在计划一场多球比赛,事实上,除非每个球里都有类似NFC的东西,否则我看不出这一切都能成功。这样,当8个以上的球在你周围游荡时,你会有时间戳和一个唯一的球击中你的id,但这可能是不可能实现的