5. 5
• 시간에 따른 공의 움직임을 모델링
ball_pos(t)
• 시간에 따른 선수의 움직임을 모델링
player_pos(t)
• 선수와 공의 위치가 일치할 수 있는지 확인
ball_pos(t) = player_pos(t)
Modeling
6. 6
패스 이벤트
• 패스 시작 이벤트
• 가속도만이 아니라 속력 변화도 감지
• 점유선수(possession)와의 거리,
가장 가까운 센서와의 거리를 참고
• 공이 뜨지 않는 패스(숏패스)만 처리(z-axis)
• 패스 도착 이벤트
• 마찬가지로 가속도와 속력변화 감지
• 패스 시작부터, 패스 도착까지 받는 선수의 이동경로
누적
10. 10
패스 볼의 이동 모델링
• 주어진 공의 현재 위치, 목표 위치
초기 속력, 저항에 의한 감속
• 공의 위치이동 식
pos = pos0 + t * init_vel + 0.5 * (-accel) * t2
11. 11
패스 받는 선수의 움직임
시간
위치
역방향 감속
정방향 가속
등속 운동
트래핑 위치 도달
12. 12
패스 받는 선수의 움직임
• 100 달리기의 가속, 종단속력을 이용
• Usain Bolt
• Peak acceleration (first 10m) : 5.8 m/s2
• Max speed (60m~90m) : 12.2 m/s
• Average acceleration (0~60m) : 3.3 m/s2
• 적당히 조정된 값을 사용
• Braking/turning acceleration : 6.0 m/s2
• Max speed : 10.0 m/s
• Average acceleration : 3.0 m/s2
13. 13
선수의 이동 모델링
• 1 단계 (방향 전환)
• 현재 속도 벡터를 목표 방향 벡터로 전환
• Cross product 로 목표 방향 성분/직교 성분으로 분해
• 최대 가속력으로 방향전환, 이동 거리는 무시
• 2 단계 (가속 운동)
• 평균 가속력으로 목표 지점을 향해 돌진
• 등가속 운동으로 처리
• 3 단계 (등속 운동)
• 종단 속력 도달 이후에는 등속 운동으로
• 4 단계 (목표 지점 도달, 패스가 오는 방향으로)
• 패스의 목표 지점 도달하면, 패스가 오는 방향으로 달려간다고 가정
14. 14
패스 성공 여부 결정
• 패스를 받을 선수 player_recv
• 인터셉트할 가능성이 있는 선수 player_intercept
• 패스 성공여부
• query(player_recv) and !query(player_intercept)
• query_time(player_recv) < query_time(player_intercept)
• 튜닝
• 아주 가까울 때, 인터셉트 확률 증가 (수비각 증가)
• 인테셉트의 커버 범위 증가
(트래핑은 정확도를 요구하지만, 인터셉트는 막기만 해도 성공)
• 성능 개선, 불필요한 쿼리 요청 제거
15. 15
Visualize
• 여러 가지 정보 표시
• 선수 움직임, 패스 추천 표시
• 패스 이벤트
• 공의 속력, 가속력, 높이 그래프
• 선택한 선수의 속력, 센서별 속력 그래프
• 부가 기능
• 시간 이동기능, 시간 정지
• 센서 선택하여 그래프에 표시
16. 16
평가
• 대체로 맞는 결과
• 패스 차단 가능성을 계산
• 패스 받는 선수의 움직임을 고려하여 공간 패스
• 추천하는 패스가 실제로 발생하는 패스를 포함
• 계산 모델에 따른 패스 추천과 실제의 차이
• 패스를 주는 선수의 움직임, 이동방향 고려가 없음
• 롱 패스(뜬 볼 패스)에 대한 고려는 하지 않음
• 계산적으로는 패스가 가능하나,
축구 전략 상 무리한 패스를 추천
17. 17
평가
• Query계산에 Hadoop을 사용하지 않음
• 계산의 복잡성 때문에 Hadoop을 사용하지 않고,
로컬 머신에서 C, Python으로 작업
• 일부 계산은 지난 프로젝트의 Hadoop 코드를 이용
• 시간대 별로 나누면 Hadoop으로도 구현이 가능
• 그래프, 시각화 구현
• 그래프, 시각화로 실제 선수들의 움직임, 패스 양상을 파악
• 시각화에 의해서 잘못된 계산 결과가 확연히 드러나,
디버그에 용이