3

私は sphero というロボット ボールのゲームを書いています (フォーラムに問題があり、質問できないようです)。2 人以上のプレイヤーに対してボール ツー ボールの衝突検出を行おうとしています。

まず第一に、彼らはここでサンプルを提供します: https://github.com/orbotix/Sphero-iOS-SDK/tree/master/samples/CollisionDetection

彼らが提供するしきい値はあまりにも敏感で、木製の床では常にトリガーされます. ちょっと忘れて、両方のデバイスからの影響のタイムスタンプを使用して、ほぼ同時に衝突がトリガーされたかどうかを確認する必要があります。

私の問題は、タイムスタンプを差し引くときです。場合によっては、非常に幅広いバリエーションが得られ、そもそも違いがかなり長いと思います。いくつかのタイムスタンプを保存しているので、正しいタイムスタンプを見逃すことはありません。また、デッド タイムを短くしてみました。

最も一般的に 2 つの NSTimeIntervals を減算すると、0.68 と 0.72 の間の差が得られます (0.01 レベルの反応が予想されます)。したがって、差が 0.72 未満であるかどうかを確認すると、3 回連続して 0.72 から 0.73 の間になり、数回は 1.5、2.6、1.1、さらには 3.8 になりました。

信頼できるものではないようです。ドキュメントによると、今回はiPhoneのリファレンスからのものです。両方のデバイスが同期されて時刻が自動的に取得されるため、可能な限り互いに近い状態になります。

誰かがこれを試して、1つのボールを静止させる必要のない信頼できる解決策を思いついたことがありますか?

4

4 に答える 4

3

SpheroのメーカーであるOrbotixの開発者として始めたとき、私はボール同士の衝突についてかなりの量の研究をしました。

これは解決するのが非常に複雑な問題です。私がこの作品を作るのに最も近かったのは(感染したゾンビの研究ゲームの場合)、サンプルサイズ3のどのボールがどのボールに当たったかを検出するための約80%の精度でした。ゲームに入れるボールが多いほど、精度は低くなります。なる。そのため、Sphero TAGのように、脆弱になる前に1つのボールの移動を停止する必要があるため、この問題を解消することにしました。

この機能を制限するいくつかの要因があり、あなたはそれらを発見したようです。最大の問題は、ボールの走行中の衝突検出のパフォーマンスが悪いことだと思います。特に粗い表面やボールが素早くぎくしゃくした動きをするとき。これだけでも、デッドタイムと相まって大きな問題を引き起こします。

衝突のタイムスタンプを平均50ミリ秒以内に取得することができました。電話間でパケットを送信する際にwifiの遅延を考慮していますか?

解決策はおそらく聞きたくないものですが、衝突検出の機能の範囲内で機能するようにゲームプレイを微調整する必要があります。つまり、ボールが接触できる場合、またはTAGのように停止する場合でも、ボールの駆動は非常に遅くなります。ボール同士の衝突なしでこれを楽しくするにはどうすればよいですか?

于 2013-03-06T20:59:39.497 に答える
0

タイムスタンプSpheroによって生成されます。ただし、これらは、PollPacketTimesコマンドを使用して遅延値とオフセット値を生成している場合にのみ意味があります。APIコマンドドキュメントのDID00h、CID50hを参照してください。

そうは言っても、衝突検出は私たちの側から進化し続けるテクノロジーです。ロボット内部のスライディングデータウィンドウで、巧妙にコード化されたDFT周波数変換をリアルタイムで採用しています。パラメータを使用すると、実行しているサーフェスに合わせて調整できます。普遍的な設定はありません。誤検知が多すぎる場合は、実験してください。アルゴリズムを改善するためのアイデアがある場合は、直接お問い合わせください。新しいフィルタリング方法として含めることができます。私たちは常に賢いアイデアを受け入れています!

于 2013-03-18T20:04:57.113 に答える
0

まず、ここで開発者サポートフォーラムをStackOverflowに移動しているため、フォーラムに投稿することはできません。だから、あなたはStackOverflowに来て、正しいことをしました、Simon、そしてあなたは誇りに思うべきです。

人々を混乱させるのではなく、ここにリダイレクトするようにフォーラムを変更しました。

于 2013-03-13T20:49:58.690 に答える