2013-03-05 1 views
3

저는 로봇 공인 회전 타원체 용 게임을 쓰고 있습니다. 포럼에서 문제가 있어도 질문 할 수 없습니다. 나는 2 명 이상의 선수를 위해 공 충돌 탐지에 공을 주려고 노력하고있다. 첫Sphero API로 볼과 볼의 충돌을보다 정확하게 감지하는 방법이 있습니까?

모두가 여기에 샘플을주는 : 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 참조에서 나온 것이라고합니다. 두 장치는 자동으로 시간을 동기화하기 위해 동기화되므로 가능한 한 서로 가깝습니다.

누구나 이것을 시도하고 안정적인 솔루션을 제안 했습니까?

답변

3

Sphero의 제조업체 인 Orbotix의 개발자로서 시작했을 때 공과 볼 간의 충돌에 관한 주제가 상당 부분 연구되었습니다.

해결 방법이 문제는 매우 복잡합니다. 이 작품 (감염된 좀비 연구 게임의 경우)을 만들 때 가장 가까운 것은 볼의 크기가 3 인 볼을 감지하는 정확도가 약 80 %입니다. 게임에 넣을 볼이 많을수록 정확도는 떨어집니다 지다. 따라서 우리는 Sphero TAG처럼 취약성이 있기 전에 이동을 중지해야하는 공이 하나씩 있어도 문제를 해결하기로 결정했습니다.

이 기능을 제한하는 몇 가지 요인이 있으며 사용자가 발견 한 것 같습니다. 가장 큰 문제는 공이 운전하는 동안 충돌 감지 성능이 떨어지는 것입니다. 특히 거친 표면이나 공이 빠르게 움직이는 경우. 이것만으로도 데드 타임과 결합 될 때 전공 문제가 발생합니다.

평균 50ms 이내에 콜리 전 타임 스탬프를 얻을 수있었습니다. 휴대 전화간에 패킷을 전송할 때 Wi-Fi 대기 시간을 고려하고 있습니까?

해결 방법은 듣고 싶지 않지만 충돌 감지 기능 내에서 작동하도록 게임 플레이를 조정해야합니다. 즉, 볼을 운전할 때 실제로 느리게 움직이거나 심지어는 태그와 같이 멈출 수 있습니다. 공 충돌없이 볼을 사용하지 않고 어떻게 재미있게 만들 수 있습니까?

+0

wifi latency? 문서를 읽는 것으로부터 영향 타임 스탬프는 스푸로로 만들어졌고, 전화기의 시간을 참조로 사용했기 때문에 대기 시간을 무시할 수있었습니다. 패킷이 수신 된 시점이 아니라 이벤트가 발생한 시점의 기록 이었기 때문입니다. 그래, 난 정말 sphero 태그를 연주 했어, 난 정말 그것을하고 싶지 않았어, 난 정말 그걸 좋아하지 않아, 난 그냥 그것을 스크랩해야 겠네. 조언 주셔서 감사합니다, 도움을 주셔서 감사합니다 –

0

먼저 개발자 지원 포럼을 StackOverflow로 옮기고 있기 때문에 포럼에 게시 할 수 없습니다. 그래서, 당신은 StackOverflow에 와서 Simon이라는 옳은 일을했습니다. 당신은 자랑스러워해야합니다.

사람들을 혼란스럽게하는 대신 여기에서 리디렉션하도록 포럼을 변경했습니다.

0

타임 스탬프 은 Sphero가 생성 한입니다. 그러나 Poll Packet Times 명령을 사용하여 지연 및 오프셋 값을 생성하는 경우에만 의미가 있습니다. API 명령 문서에서 DID 00h, CID 50h를 참조하십시오.

즉, 충돌 감지는 우리가 끝없이 진화하는 기술입니다. 우리는 로봇 내부에서 실시간 슬라이딩 데이터 윈도우에 대해 독창적으로 코딩 된 DFT 주파수 변환을 사용합니다. 매개 변수를 사용하면 실행중인 표면으로 튜닝 할 수 있습니다. 보편적 인 설정이 없습니다. 너무 많은 가양 성을 얻는다면 실험 해보십시오. 알고리즘을 개선 할 아이디어가 있다면 직접 문의하십시오. 아마도 새로운 필터링 방법으로 포함시킬 수 있습니다. 우리는 영리한 아이디어에 항상 열려 있습니다!

+0

고맙습니다.하지만 멀티 볼 게임을 계획하고 있었고 현실적으로 볼 때 각 볼 내부에 NFC와 같은 것이 없다면 잘 작동하지 않습니다. 8 개가 넘는 공이 로밍하는 방식으로 타임 스탬프와 고유 한 ID를 얻을 수 있습니다.하지만 공을 치는 데는 고유 한 ID를 사용하는 것이 좋습니다. –

0

게임 시작시 각 Sphero의 내부 타이머를 동기화 할 수 있습니다. 각 호스트 전화기 내의 동기화 된 타이머와 일치시킬 수 있습니다. 클록은 다를 수 있지만 밀리 초는 밀리 초입니다. 또한 충돌 탐지의 한계점을 낮출 수 있기 때문에 '공격하는'Sphero가 특정 속도로 움직이는 경우에만 '이벤트'(손상, 감염 등)가 발생할 수 있습니다. 또는 그것의 변형.