1.はじめに
ロボカップは、ロボット工学や人工知能の研究のために、自律移動ロボットによるサッカーを題材として掲げられた競技であり、小型、中型、シミュレーションなどのリーグが存在する。2002年には、第6回RoboCup世界大会が福岡(日本)、釜山(韓国)で共同開催された。現在では、サッカーだけでなく、大規模災害へのロボットの応用としてレスキュー、次世代の技術の担い手を育てるジュニアなどが組織されている。
本研究では基礎的なシミュレーションサッカーを行うプログラムを開発した。開発にあたって、「実際のサッカーとの対比」を考慮し、より人間に近い動作を行うシミュレータの研究を始めている。
1992年 RoboCup発足 1995年 RoboCup構想発表 1997年 第1回RoboCup世界大会がシミュレーション、小型、中型の3リーグが名古屋(日本)で開催 1998年 SONY4脚ロボットリーグが実機リーグに加わる 第1回RoboCupジャパンオープン開催(東京、青山) 第2回RoboCup世界大会開催(フランス、パリ) 1999年 第2回RoboCupジャパンオープン開催(愛知、名古屋) 第3回RoboCup世界大会開催(スウェーデン、ストックホルム) ヒューマノイドリーグの概要が発表される 2000年 第3回RoboCupジャパンオープン開催(北海道、函館) 第4回RoboCup世界大会開催(オーストラリア、メルボルン) ヒューマノイドリーグのデモンストレーションが行われる 2001年 第4回RoboCupジャパンオープン(福岡市) 2001年 第5回RoboCup世界大会(シアトル、アメリカ) 2002年 第6回RoboCup世界大会(福岡、日本 & 釜山、韓国) : 2050年 FIFAのチャンピオンにヒューマノイドリーグのチームが勝つ
図1. シミュレーションサッカーの構成
又、サーバクライアント間で交わされるメッセージはテキストファイルでリスト形式(see Time ObjInfo ObjInfo...)で表現されている。したがって、クライアントはこの形式のメッセージを取り扱える任意のプログラミング言語を使用できる。クライアントプログラムはプレイヤーの頭脳として、上のような視覚(see)、聴覚情報(hear)をサーバから受け取り、行動を決定して、そのコマンドをサーバに送り返す働きを持っている。下記にまとめる。
|--- OH(オフェンシブハーフ)
|--- CF(センターフォワード) |--- DH(ディフェンシブハーフ)
FW ------ WG(ウィング) MF------- SH(サイドハーフ)
|--- CH(センターハーフ)
|--- CB(センターバック)
DF------- SB(サイドバック)
|--- LB(リベロ)
図2. サッカーポジション
No
<ボールが見えるか> → <ボールを探す>
↓Yes
No No
<ボールを追いかける範囲にあるか> → <絶対座標は確かか> → <ボールへ向く>
| ↓Yes
| No
| <自分が行動範囲内か> → <指定座標へ移動>
|Yes
| ↓Yes
|
| <ボールへ向く>
↓
No No
<ボールを蹴れるか> → <ボールが直線上にあるか> → <ボールへ向く>
| ↓Yes
|Yes
| <ボールに近づく>
↓
No No
<ゴールrが見えるか> → <ゴールlが見えるか> → <90度の方向キック>
| ↓Yes
|Yes
| <逆方向へキック>
↓
No No
<ペナルティエリア外か> → <敵が見えるか> → <シュート>
| ↓Yes
| No
|Yes <敵が直線上にいるか> → <シュート>
|
↓ ↓Yes
No No No
<敵が見えるか> → <ドリブル> <敵が遠いか> → <味方が見えるか> → <ドリブルでかわす>
| ↓Yes ↓Yes
| No
|Yes <ドリブル> <味方が近いか> → <中パス>
|
| ↓Yes
↓
No <短パス>
<敵が遠いか> → <ドリブルでかわす>
↓Yes
<ドリブル>
図3. FWのフローチャート
No
<ボールが見えるか> → <ボールを探す>
↓Yes
No No
<ボールを追いかける範囲にあるか> → <絶対座標は確かか> → <ボールへ向く>
| ↓Yes
| No
| <自分が行動範囲内か> → <指定座標へ移動>
|Yes
| ↓Yes
|
| <ボールへ向く>
↓
No No
<ボールを蹴れるか> → <ボールが直線上にあるか> → <ボールへ向く>
| ↓Yes
|Yes
| <ボールに近づく>
↓
No No
<ゴールrが見えるか> → <ゴールlが見えるか> → <90度の方向キック>
| ↓Yes
|Yes
| <逆方向へキック>
↓
No No
<ペナルティエリア外か> → <敵が見えるか> → <シュート>
| ↓Yes
| No
|Yes <敵が直線上にいるか> → <シュート>
|
↓ ↓Yes
No No No
<敵が見えるか> → <ドリブル> <敵が遠いか> → <味方が見えるか> → <ドリブルでかわす>
| ↓Yes ↓Yes
| No
| <ドリブル> <味方が近いか> → <中パス>
|Yes
| ↓Yes
|
↓ <短パス>
No No
<敵が遠いか> → <味方が見えるか> → <ドリブルでかわす>
↓Yes ↓Yes
No
<ドリブル> <味方が近いか> → <中パス>
↓Yes
<短パス>
図4. MFのフローチャート
No No
<ボールは見えるか> → <hear情報があるか> → <ボールを探す>
↓Yes
No
<ボールが近くにあるか> → <指定座標に移動>
↓Yes
No
<ボールが蹴れるか> → <ボールに近づく>
↓Yes
<クリア>
図5. DFのフローチャート
図6. 絶対座標 (例1)
サーバから送られてくるsee情報は、物体の名前、物体の距離、目線を0度とした時の角度(45度〜-45度)である。つまりsee情報より、クライアントからflag Aまでの距離bAと角度θA、クライアントからflag Bまでの距離dBと角度θBが分かるのである。flag AからflagBの距離dCは、flagの座標が定められているので計算により正確に求められる。以上のことを踏まえると正弦定理より、
dB c
——— = ————————
sin A sin (θA - θB)
と表すことができる。変形すると、
sin (θA - θB) *dB
sin A = —————————
c
であるから
sin (θA - θB) * dB
A = arcsin —————————
c
よって角度Aを求めることができる。この結果、クライアントはflag Aのところから角度A、距離bの位置にいると分かる。そして、この角度Aを使うことにより絶対座標(XP, YP)が下式
図7. 絶対座標 (例2)
同じように正弦定理を用いて
4.7 5.2
——— = ————————
sin A sin(20 + 36)
sin (56) * 4.7
sin A = ————————
5.2
sin A = 0.73
A = arcsin 0.73
A = 48
flag Aの角度は約48度であることが分かる。この値を用いて絶対座標を求めると
図8. 絶対方向 (例1)
クライアントの絶対方向を求めるためには、仮想的なflag Bを立てる必要がある。このflag Bは、クライアントとflag Aとflag Bの間に直角三角形を作るために立てたものである。図8を見れば分かるようにflag Bの絶対座標は、flag Aのx座標、クライアントのy座標を抜き出して(XA,YP)となる。クライアントからflag Bまでの距離bは
b
cos θ = ——
a
そして、
b
θ = arccos ——
a
と表すことができるので、クライアントの絶対方向は
図9. 絶対方向 (例2)
θは
36.2
cos θ = ———
53.5
36.2
θ = arccos ———
53.5
θ = 47.4
絶対方向 = 47.4 - 7 = 40.4
以上の計算式からクライアントの絶対方向は、40.4度であることが分かる。この方法は、ある程度正確にクライアントの絶対座標が前の段階で出ている必要がある。もし、クライアントの絶対座標が大きくずれている時は同じようにクライアントの絶対方向もかなり誤差を含んでしまう結果になる。
図10. 関係図(クライアント,フラッグ,指定座標)角度γを求めるには図のように、クライアントと指定座標(XS , YS)との間に直角三角形を作るための仮想的なフラッグ、flag Aを立てる必要がある。このflag Aの座標は自然と(XS , YP)であることが分かる。クライアントから仮想的なflag Aまでの距離aは
b
tan γ = ———
a
b
γ = arctan ———
a
と書ける。よって、クライアントが指定した座標の方向へ向くには下側の方へ(θ+γ)度turnすれば良い。したがってコマンド(turn θ+γ)をサーバに送れば指定座標の方向へ体を向けることができる。そして次にコマンドdashをサーバに送り続ければ指定座標へ移動することが可能になる。
図11. 1対1のFWとDFの配置
|---<その後FWが勝ち 47回>
|---<FWがDFを交わす動作を行った回数 68回>---|
| |---<その後DFが勝ち 21回>
<対戦数 100回>---|
|
|---<FWがDFを交わす動作を行わなかった回数(DFが勝ち) 32回>
最終的な結果 ・・・ FW 47勝 DF 53勝
図12. 11対11(SKMILAN vs Harmony)
<結果>
| 前半 | 後半 | 最終結果 | ||||
| SKMILAN | Harmony | SKMILAN | Harmony | SKMILAN | Harmony | |
| 第1試合 | 0 | 14 | 0 | 5 | 0 | 19 |
| 第2試合 | 0 | 4 | 0 | 5 | 0 | 9 |
| 第3試合 | 0 | 7 | 0 | 7 | 0 | 14 |
| 第4試合 | 0 | 11 | 0 | 12 | 0 | 23 |
| 第5試合 | 0 | 13 | 1 | 4 | 1 | 17 |
| 前半 | 後半 | 最終結果 | ||||
| S_drible | Harmony | S_drible | Harmony | S_drible | Harmony | |
| 第1試合 | 0 | 17 | 0 | 16 | 0 | 33 |
| 第2試合 | 0 | 17 | 0 | 14 | 0 | 31 |
| 第3試合 | 0 | 18 | 0 | 14 | 0 | 32 |
| 第4試合 | 0 | 14 | 0 | 15 | 0 | 29 |
| 第5試合 | 0 | 16 | 0 | 16 | 0 | 32 |
| 前半 | 後半 | 最終結果 | ||||
| SKMILAN | S_drible | SKMILAN | S_drible | SKMILAN | S_drible | |
| 第1試合 | 2 | 1 | 3 | 1 | 5 | 1 |
| 第2試合 | 2 | 0 | 1 | 2 | 3 | 2 |
| 第3試合 | 3 | 2 | 2 | 0 | 5 | 2 |
| 第4試合 | 4 | 1 | 2 | 1 | 6 | 2 |
| 第5試合 | 2 | 2 | 0 | 2 | 2 | 4 |