坂本研 サッカーチーム  

平成15年度
卒業論文

実際のサッカープレイヤーを真似た
シミュレーションサッカープレイヤーの製作

99kc122 松原 弘治

指導教員 坂本 直志助教授

2003年 3月

東京電機大学 工学部 情報通信工学科

目次

1.はじめに

 ロボカップは、ロボット工学や人工知能の研究のために、自律移動ロボットによるサッカーを題材として掲げられた競技であり、小型、中型、シミュレーションなどのリーグが存在する。2002年には、第6回RoboCup世界大会が福岡(日本)、釜山(韓国)で共同開催された。現在では、サッカーだけでなく、大規模災害へのロボットの応用としてレスキュー、次世代の技術の担い手を育てるジュニアなどが組織されている。
 本研究では基礎的なシミュレーションサッカーを行うプログラムを開発した。開発にあたって、「実際のサッカーとの対比」を考慮し、より人間に近い動作を行うシミュレータの研究を始めている。

2.RoboCupについて

2.1 RoboCupとは

 RoboCupサッカーは、ロボット工学と人工知能の融合、そして発展のために、自律ロボットによるサッカーを題材として提唱された。「2050年までに、ヒューマノイド型ロボットでサッカーのFIFA世界チャンピオンに公式ルールで勝利する」という目標を掲げている世界的なプロジェクトである。
 RoboCupには、RoboCupサッカー、RoboCupレスキュー、RoboCupジュニアがある。この中で一番初めに組織されたのがRoboCupサッカーである。RoboCupサッカーは、自律移動ロボットの小型、中型、SONY四脚ロボットの3つのリーグと、コンピューター上で試合をするシミュレーションリーグ、そして2002年には二足歩行のヒューマノイドリーグが加わり、現在は5つのリーグで構成されている。

・ 小型リーグ
 卓球台とほぼ同じ大きさのフィールドで、直径18cm以内に入る小さなロボットが5台以内でチームを組み、オレンジ色のゴルフボールを使って対戦するリーグである。

・ 中型リーグ
 卓球台9枚分の大きさのフィールドで、直径50cm以内に入るロボット4台でチームを組み、オレンジ色のフットサルボールを使って対戦するリーグである。

・ SONY四脚ロボットリーグ
 SONYのエンターテインメントロボットによる3対3で行うリーグである。このリーグは、選抜されたチームに貸与されたロボットで競技を行うため一般参加はできない。

・ シミュレーションリーグ
 コンピュータ上の仮想フィールド上で、1チーム11体のソフトウェアエージェント同士によって行われるリーグ。RoboCupサッカーの中では一番古くから存在するリーグである。

・ ヒューマノイドリーグ
 今現在ロボットの大きさ(クラス)は、40、80、120、180cmクラスがある。競技種目は、片足立ち(参加資格競技として位置づけ、表彰対象外)、二足歩行(各ロボットの身長×5倍の距離を折り返しポイントとし往復する時間で競う) 、ペナルティキック(クラス別に実施、各チーム5本のシュートでゴール数を競う) 、フリースタイル(各チーム任意のデモンストレーションを5分以内で実施)がある。RoboCupサッカーの中で一番新しいリーグである。

 RoboCupレスキューは、大規模災害シミュレーションや災害救助ロボットの研究開発のために組織された。実際の災害時に、RoboCupレスキューのロボットが使用されたこともある。
 RoboCupジュニアは、ロボットの設計制作を通じて次世代のRoboCupの担い手を育てるという目的で組織された。

2.2 RoboCupの歴史

 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のチャンピオンにヒューマノイドリーグのチームが勝つ

2.3 RoboCupサッカーシミュレーションリーグ

 本研究では、RoboCupサッカーのうちシミュレーションリーグによる基礎的なサッカーシミュレーションを行うプログラムを作成した。RoboCupサッカーは基本的には一般のサッカーと変わらない。10人と1人のゴールキーパーがチームを構成し、2つのチームが前半3000シミュレーションサイクル(約5分)、後半3000シミュレーションサイクル(5分)内にどれだけ多く、相手ゴールにボール入れるかで勝敗を決する。試合を終えてゴール数が均等の場合は、延長に入って最初にゴールを決めたチームが試合の勝者となる(Vゴール方式)。オフサイドなどの反則も取り入れている。
 シミュレーションリーグはコンピュータネットワーク上に置かれ、1つのサッカーサーバに11個から成るクライアントプログラムを1チームとして、2チーム合計22個のクライアントプログラムがTCP/IPにより接続して行われる。11個のクライアントプログラムは、同一のプログラムでもそれぞれ別のプログラムでも良い。


             図1. シミュレーションサッカーの構成

 又、サーバクライアント間で交わされるメッセージはテキストファイルでリスト形式(see Time ObjInfo ObjInfo...)で表現されている。したがって、クライアントはこの形式のメッセージを取り扱える任意のプログラミング言語を使用できる。クライアントプログラムはプレイヤーの頭脳として、上のような視覚(see)、聴覚情報(hear)をサーバから受け取り、行動を決定して、そのコマンドをサーバに送り返す働きを持っている。下記にまとめる。
などである。このように送受信の繰り返しによって試合が進行していくのである。
 サッカーサーバは、メッセージボード、フィールドシミュレータ、審判の3つによって構成されているが、これらの情報を画面で確認できるようにするために、サッカーモニターに情報を送って画面表示させているのである。また、1つのサッカーサーバに複数のモニタを接続して観戦することもできる。

2.4 ルール

 RoboCupのシミュレーションリーグのルールは通常のサッカーとほぼ同じと考えて良い。ジャッジの中で機械的に行えることはサーバが行う。複雑な判断が必要なことは人間の審判が分担する。

<サーバによるジャッジ>

 サッカーサーバは以下のルールで試合を運営する。

a. ゴールしたとき
 チームが得点したとき、審判はゴールを宣言し全クライアントに知らせ、スコアを更新する。その後 5 秒間中断して、ボールをセンターマークへ移動する。そしてプレイモードを kick_off に変更する。審判が試合を中断している間(5 秒)に、クライアントは自陣へ戻らなくてはならない。もしプレイヤーが時間になっても敵陣に残ったままのときは、審判がプレイヤーを自陣内のランダムな地点へ移動させる。

b. キックオフのとき
 キックオフの直前(ゲームが始まる前、あるいはゴールした後)に、全てのプレイヤーは自陣にいなくてはならない。もしプレイヤーが敵陣にいた場合は、審判がプレイヤーを自陣内のランダムな地点へ移動させる。ゴール後、プレイヤーが自陣へ戻るための時間は 5 秒間である。

c. ボールがフィールドの外へ出たとき
 ボールがフィールドの外にあるとき、審判はボールを適切な場所(タッチライン、コーナー、ゴールエリア)へ戻し、プレイモードをkick_in、 corner_kick、 goal_kick に変更する。コーナーキックの場合、審判は適切なコーナーの内側にボールを置く。

d. プレイを再開するための距離
 プレイモードが kick_off、 kick_in、 corner_kick のとき、審判はボールを中心に半径9.15m の円内の守備中の全プレイヤーを排除する。排除されたプレイヤーはそのとき、その円の周囲に配置される。
 プレイモードが offside のとき、攻撃中の全プレイヤーは non-offside ポジションへ戻される。この場合の攻撃中のプレイヤーとは、オフサイドエリアの中にいる全プレイヤーとボールから 9.15m 内にいる全プレイヤーである。
 プレイモードが goal_kick のとき、攻撃中の全プレイヤーはペナルティエリア外へ移動させられる。ゴールキックが行われる間、攻撃中のプレイヤーはペナルティエリアに再び入ることはできない。ボールがペナルティエリアの外へ出た後、プレイモードはただちに play_on に変わる。

e. プレイモードの制御
 プレイモードが、 kick_off や kick_in、 corner_kick のとき、 ボールが動き出したらすぐに審判はプレイモードを play_on に変更する。

<人間によるジャッジ>

 「妨害行為」 のようなファールは自動的に判断するのが困難である。このような状況を解決するために、サーバは人間が介入するためのインターフェースを提供する。このように、人間の審判が試合を中断し、いずれかのチームにフリーキックを与えることができる。以下は RoboCup 1998 競技会の前に承認されたガイドラインである。
a. 多量のメッセージによってサーバを溢れさせる
 クライアントはシミュレーションサイクル毎に 3、4 個以上のコマンドをサッカーサーバに送るべきではない。何故なら、サーバを遅延させるからである。

b. 不適当な行為
 もしプレイヤーが不適当な方法で試合に干渉しているのを気づいたら、人間の審判は試合を中断して、反対のチームにフリーキックを与えることができる。

2.5 サッカーサーバについて

2.5.1 サッカーサーバの歴史

 最初のオリジナルのsoccerserverシステムは、1993年9月、ETL(電総研) の野田五十樹氏によって書かれた。このシステムは、マルチスレッドおよび高度プログラミング操作を持つPrologシステムの1種であるMWPと呼ばれるプログラミング言語の実証のためのライブラリモジュールとして構築された。1994年7月には、クライアントサーバ方式の最初のバージョンのサーバが、Lispシステムで書かれた。このLISPバージョンのsoccerserverは、現在のsoccerserverの原型になっている。1995年8月、LISP バージョンのsoccerserverは、C++ で書き直された。以来、サーバはバージョンアップし続けている。

2.5.2 soccer server

 Robo Cupサッカーシミュレーションでは、クライアント・サーバ方式を用いている。このRobo Cupサッカーシミュレーションでは、環境を提供するプログラムがサッカーサーバであり、プレイヤーの意思を決定するものがサッカークライアントである。サーバがクライアントに送る情報は主に、視覚情報(see)、聴覚情報(hear)、感覚情報(sense body)がある。

2.6 see情報

 see情報は、サーバから各クライアントに標準では、150ミリ秒に1回のサイクルで送られてくる。
・(see Time ObjInfo ObjInfo …):see情報。
自分の視野(前方90度)に入っている他のプレイヤーやボール、フィールド上のランドマーク(フラッグやゴール)などの相対位置情報(ObjInfo)が得られる。相対位置はプレイヤー中心の極座標で表示され、遠方の情報には様々な形で雑音が重畳されている。

2.7 hear情報

 ・(hear Time Dir Message):hear情報。
シミュレーションリーグでは、クライアント同士の直接通話を禁じている代わりに、sayコマンドとhearセンサー情報を用意している。各クライアントは(say Message)により、回りにいるプレイヤーに対しMessageを送ることができ、受け取る側にはhear情報が届けられる。ただし、Messageの送り先を指定することはできず、周囲50m以内のプレイヤー全員に伝えられる。

2.8 コマンド

 Robo Cupサッカーシミュレーションでは、プレイヤー操作のために、各クライアントは下記のような基本的な動作コマンドを使用できる。
サッカークライアントはこれらの行動を駆使して設計しなければならない。これらの動作コマンドは、turn_neck、sayを除き、1シミュレーションサイクル(100ミリ秒)に1つだけ処理される。

3.戦術

3.1 サッカーにおける各ポジションの説明

 サッカーのポジションには様々な物があるが、主に3つに分けられる。フォワード(以下FW)、ミッドフィルダー(以下MF)、ディフェンダー{(以下DF)、ゴールキーパー(以下GK)を含む)}である。この3つの中からさらに分けると下図のようになる。サッカーはチームプレーなので、各ポジションが状況に応じて的確に役割をこなすことによって良いチームが出来上がると言える。

                         |--- OH(オフェンシブハーフ)
     |--- CF(センターフォワード)    |--- DH(ディフェンシブハーフ)  
   FW ------ WG(ウィング)       MF------- SH(サイドハーフ)   
                         |--- CH(センターハーフ)   

     |--- CB(センターバック)
   DF------- SB(サイドバック)
     |--- LB(リベロ)
      
                図2. サッカーポジション

<FWの役割>

 FWは主に攻撃を行うため、相手ゴールのそばに位置し、ゴールへシュートを打つのが役割である。ゴールそばの位置により、センターフォワード(以下CF)とウィング(以下WG)に分けられる。一般のサッカーでは1人から3人程度が割り当てられる。
 CFは主に敵ゴール正面に位置し、中央へのパス(センタリング)をゴールに結びつけるのが役割である。他には、ポストプレイや裏のスペースを狙う動きなども要求されるポジションである。
 WGは主に前線の両サイドに位置し、相手のサイドをえぐり中央の選手にセンタリングを上げるのが役割である。このような役割柄、自然と相手との1対1の局面が多いポジションでもある。
 最近では、FWの前線での積極的な守備という面も重要視されてきている。

<MFの役割>

 MFは主に攻撃も守備も行うため、FWとDFの間、つまりチームの中心部に位置する。攻撃重視のオフェンシブハーフ(以下OH)と守備重視のディフェンシブハーフ(以下DH)、そしてサイドに位置するサイドハーフ(以下SH)に分けられる。一般のサッカーでは3人から6人程度が割り当てられる。
 OHは主にFWのすぐ後ろに位置し、MFの中で攻撃的な役割を任せられると共に、FWへのラストパスを供給するのが役割である。司令塔と呼ばれるのもこのポジションである。
 DHは主にDFのすぐ手前に位置し、MFの中で守備的役割を任される。ディフェンス陣の負担を軽減するために早い段階で相手の攻撃を潰したり、ミドルシュートを要求される。
 SHは主に両サイドに位置し、攻撃面では中央の選手にセンタリングを上げるのが役割である。守備面では、相手のセンタリングを防いだり、オーバーラップを防ぐ役割がある。相手との1対1の局面が多いポジションである。

<DFの役割>

 DFは主に守備を行うため、味方ゴールのそばに位置し、相手からゴールを奪われないようにする。すなわちシュートを打たれないようにするのが役割である。味方ゴールそばの位置により、センターバック(以下CB)とサイドバック(以下SB)に分けられる。一般のサッカーでは3人から5人程度が割り当てられる。
 CBは主に味方ゴール正面に位置し、相手のセンタリングをゴールに結びつけられないようクリアーしたり、相手のシュートコースを塞いだりするのが役割である。最近では、DFラインの統率という役割も注目されている。
 SBは主に味方ゴール近くの両サイドに位置し、相手にセンタリングを上げさせないという役割がある。このポジションも自然と1対1の局面が多いポジションなので1対1の強さが求められる。さらに、DFでもサイド攻撃に参加するオーバーラップと言う戦術も要求される。
 他にも味方ゴール正面に位置し積極的に攻撃にも参加するリベロ(LB)や、GKの近くに位置し他のDFが抜かれた時に常にカバーリングするスウィーパー(SW)と呼ばれるポジションも存在する。

3.2 本研究におけるポジションの動き

 本研究ではポジションを、FW、MF、DF、GKの4つに分け、それぞれ別々の動作を行うようにプログラムを設計した。以下、それぞれのプログラムの動作を記述した。

3.2.1 FW

 FWの基本的な戦略は、ボールを持っていれば積極的に攻め上がるようにした。

3.2.1.1 ボールを持っている時

1. シュートが可能ならシュートする。この場合、シュートが可能とは、ペナルティエリア近くに自分がいて、自分とゴールを結ぶ線上に障害物がないことである。

2. シュートが可能でないなら、これは3つの条件に分けられる。

   a. playerがゴールを向いていない時
   b. playerとゴールの間に障害物がある時
   c. ゴールが離れている時

a. playerがゴールを向いていない時
 -ゴールに向く

b. playerとゴールの間に障害物がある時
 -この時はさらに幾つかの条件に分けられる。
c. ゴールが離れている時
 -ゴールへ向かってドリブルをする

3.2.1.2 ボールを持っていない時

1. ボールとの距離が遠い時
 -ボールを見るようにする
2. ボールとの距離が近い時
 -ボールに近づく

以下に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                       <短パス>
  <敵が遠いか> → <ドリブルでかわす>

        ↓Yes

  <ドリブル>

                   図3. FWのフローチャート   
              

3.2.2 MF

 MFの基本的戦略は、敵を寄ってきた時に味方が見えればパスをするようにした。以下にMFのフローチャートを示す。

                     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のフローチャート    

3.2.3 DF

 DFの基本的な戦略は、ボールを持っていればクリアするようにした。下記にDFの動作を示す。

                      No                            No
<ボールは見えるか>  →  <hear情報があるか>  →  <ボールを探す>

    ↓Yes             
             No
<ボールが近くにあるか>  →  <指定座標に移動>

    ↓Yes        
           No
<ボールが蹴れるか>    →  <ボールに近づく>

    ↓Yes

   <クリア>

                             図5. DFのフローチャート

3.3 共通のアルゴリズム

 ここでは、各プログラムで共通に使用したサブルーチンについて説明する。

3.3.1 自分の位置の把握

<プログラム内での計算の概略>
 例えばクライアントとflagが下図(例1)のような関係にあったとする。クライアントの見える範囲は常に90度であり視線を変えない限り見える範囲は変わらない。

             図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)が下式
XP = XA + (dA * cos A)
YP = YA + (dA * sin A)
より計算することができるのである。例えば、図7(例2)のような距離、角度、座標とすると、

             図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度であることが分かる。この値を用いて絶対座標を求めると
XP = 52.5 - (6.2 * cos 48) = 48.4
YP = -34 + (6.2 * sin 48) = -29.4
 以上の計算式より、クライアントPの絶対座標は(48.4, -29.4)であることが分かる。この絶対座標の求め方は、flagが遠ければその分誤差も含んでしまうため正確さはやや欠けるがおおよその位置を求めることができる。

3.3.2 絶対方向の求め方

<絶対方向の説明>

 絶対方向は、自分プレイヤーの中心を原点とし、その原点を通りY軸と平行な直線の敵ゴール側を常に0度として考える。

<プログラム内での計算の概略>

 例えば、クライアントの位置、クライアントの目線、flagが下図(例1)のような関係にあったとする。この時flag Aが視界に入っている。

             図8. 絶対方向 (例1)

クライアントの絶対方向を求めるためには、仮想的なflag Bを立てる必要がある。このflag Bは、クライアントとflag Aとflag Bの間に直角三角形を作るために立てたものである。図8を見れば分かるようにflag Bの絶対座標は、flag Aのx座標、クライアントのy座標を抜き出して(XA,YP)となる。クライアントからflag Bまでの距離bは
b = XA - XP
サーバから送られてくるsee情報より、クライアントからflag Aまでの距離aと角度γが分かるので次式が立てられる。
            b
cos θ =  ——
            a

そして、

               b
θ = arccos  ——
               a
と表すことができるので、クライアントの絶対方向は

絶対方向 = γ + θ

となり求められる。
 図9(例2)のような距離、角度、座標とすると、

             図9. 絶対方向 (例2)

θは
              36.2
cos θ =    ———
              53.5
 
               36.2
θ = arccos  ———
               53.5  

θ = 47.4

絶対方向 = 47.4 - 7 = 40.4
以上の計算式からクライアントの絶対方向は、40.4度であることが分かる。この方法は、ある程度正確にクライアントの絶対座標が前の段階で出ている必要がある。もし、クライアントの絶対座標が大きくずれている時は同じようにクライアントの絶対方向もかなり誤差を含んでしまう結果になる。

3.3.3 指定座標への移動

 シミュレーションサッカーの中で、指定した座標に移動するという場面は多々ある。特に、プレイヤーがボールを持っていない時の動きを実現する場合は不可欠な要素であると言えるであろう。 <プログラム内での計算の概略>
 例えば、クライアントの位置、クライアントの目線、クライアントの絶対方向、指定座標が下図のような関係にあったとする。この時、クライアントの絶対座標、クライアントの絶対方向(θ)は分かっている。指定した座標の方向へturnするには、角度γを求める必要がある。

図10. 関係図(クライアント,フラッグ,指定座標) 

角度γを求めるには図のように、クライアントと指定座標(XS , YS)との間に直角三角形を作るための仮想的なフラッグ、flag Aを立てる必要がある。このflag Aの座標は自然と(XS , YP)であることが分かる。クライアントから仮想的なflag Aまでの距離aは

a = XS - XP

仮想的なflag Aから指定座標Sまでの距離bは
b = YS - YP

と表すことができるので、角度γは
             b
tan γ =  ———
             a

       b    
γ = arctan ———
              a
と書ける。よって、クライアントが指定した座標の方向へ向くには下側の方へ(θ+γ)度turnすれば良い。したがってコマンド(turn θ+γ)をサーバに送れば指定座標の方向へ体を向けることができる。そして次にコマンドdashをサーバに送り続ければ指定座標へ移動することが可能になる。
 しかしこの方法は、クライアントの絶対座標とクライアントの絶対方向がある程度正確に表されていないと誤差がかなり大きくなってしまうで、大体の位置にしか移動できない。

4.実験

<<実験1>>

 3章で述べたFWとDFを用いて1対1の実験をした。最初FWはセンターサークル真ん中に位置させ、DFはペナルティエリア前に位置させた(図11)。FWがゴールを決めればFWが勝ち、DFがクリアすればDFの勝ちである。合計100回戦わせた。ここでは、FWの動きもテストするためゴールを決める決めない関係なしにFWがDFを交わす動作をしたかもカウントした。

                      図11. 1対1のFWとDFの配置


                                                                  |---<その後FWが勝ち 47回>
           |---<FWがDFを交わす動作を行った回数 68回>---| 
                   |                                          |---<その後DFが勝ち 21回>
<対戦数 100回>---|
           |                                                    
            |---<FWがDFを交わす動作を行わなかった回数(DFが勝ち) 32回> 
                                                                            
最終的な結果 ・・・ FW  47勝  DF  53勝 

<<実験2>>

 実際のRoboCupシミュレーションサッカーのルールに従い、11対11の試合を行った。(図12)ここでは、3章で述べたFWとMFとDFを多少改良したチーム「SKMILAN」を用いた。このチームの主な動きは、ドリブルはほとんどせずに、ロングパスを主体としたチームである。相手はRoboCupサッカーシミュレーションリーグ(Japan Open)で過去に3位になったこともあるチーム「Harmony」(北海道大学大学院)を選択した。計5試合行い結果を記録した。(表1)

                      図12. 11対11(SKMILAN vs Harmony)
<結果>      
表1. SKMILANとHarmonyの試合結果
前半後半最終結果
SKMILANHarmonySKMILANHarmonySKMILANHarmony
第1試合01405019
第2試合040509
第3試合0707014
第4試合011012023
第5試合01314117

<<実験3>>

 実際のRoboCupシミュレーションサッカーのルールに従い、11対11の試合を行った。ここでは、「SKMILAN」を多少改良したチーム「S_drible」と、実験2と同様のチーム「Harmony」を使用した。実験2ではロングパス主体のチームで試合を行ったが、この実験3ではドリブル主体のチーム「S_drible」を使用。同じように結果を記録した。(表2)

<結果>      
表2. S_dribleとHarmonyの試合結果
前半後半最終結果
S_dribleHarmonyS_dribleHarmonyS_dribleHarmony
第1試合017016033
第2試合017014031
第3試合018014032
第4試合014015029
第5試合016016032

<<実験4>>

 実際のRoboCupシミュレーションサッカーのルールに従い、11対11の試合を行った。ロングパス主体チーム「SKMILAN」と、ドリブル主体チーム「S_drible」を対戦させた。どちらも「Harmony」には敗北している。同じように計5試合行い、結果を記録した。(表3)

<結果>      
表3. SKMILANとS_dribleの試合結果
前半後半最終結果
SKMILANS_dribleSKMILANS_dribleSKMILANS_drible
第1試合213151
第2試合201232
第3試合322052
第4試合412162
第5試合220224

5.実験結果に対する分析

<<実験1の分析>>

 FWには、敵が近くに寄ってきたらドリブルの角度を変えてDFを交わすというプログラムが組み込まれている。本来ならFWがゴールは決めないにしても、100%の確率で「DFを交わそうとする動作」は行うはずである。しかし実験1の結果を参照すれば分かる通り、100回中68回し かその動作を行っていない。DFを交わそうとする前にDFに詰められてクリアされるケースが目立った。この原因としては、ドリブルの大きさに問題があると考えられる。敵の動きやボールの動き、そして自プレイヤーの動きを考えながら未来のボールの位置や敵の位置、自分の位置が計算できれば、確実に敵を交わす動作は行うはずである。
 FWの47勝、DFの53勝という結果は、ほぼ同じ力であると言えるであろう。上記のような未来の予測という機能を加えれば同一のDFと対戦した時に、FWの勝率は格段に上がると考えられる。

<<実験2の分析>>

 実験2では、本研究で作成したチームをベースにしそれを少し改良したチーム「SKMILAN」を用いてチーム「team Harmony」と試合を行った。SKMILANは、主にボールがきたら前へ大きく蹴り出すサッカーである。それに対してHarmonyは、サイド攻撃を中心に攻め上がりセンタリングを上げ、FWがダイレクトボレーシュートを決めるという戦略が多かった。結果を見てみると、かなりの点差が開いている。何故このような点差になったのか考えてみる。
 まず1つに挙げられるのは、ボールが近くに来た時にボールを見つけ、そしてボールのある位置まで辿り着く合計時間である。Harmonyはこれがとても短かった。SKMILANはHarmonyに比べ時間がかかった。これによりHarmonyのセンタリングにも反応するのに時間がかかり直接点に繋がってしまうのである。次に考えられるのは、フォーメーションの完成度である。SKMILANは時間が経過するにつれて当初4(DF)-3(MF)-3(FW)だったフォーメーションがばらばらになる。しかし、Harmonyはとても正確にクライアントの行動範囲を制御している。SKMILANも自分の行動範囲の制御がうまくいけばさらに向上すると考えられる。

<<実験3の分析>>

 実験3では、「SKMILAN」を改変したチーム「S_drible」を用いて実験2同様「team Harmony」と試合を行った。SKMILANがロングパス主体のチームだったのに対して、S_dribleは主にドリブル主体のチームである。結果を参照してみると、SKMIANとHarmonyで試合をした時(実験2)よりも点差が開いている。
 この原因を考えてみると、やはりここでもボールを見つけるスピードが関わってくると考えられる。ドリブルは本来、「kick」「turn」「dash」コマンドの繰り返しにより成立する。ボールを見つけるスピードが遅ければ、その分ドリブルのサイクルが遅れるのである。よって、敵プレイヤーにすぐ詰められボールを奪われるケースがかなり目立った。未来のボールの位置予測ができればもっとスムーズにドリブルが行え、またボールを奪われる回数も減ると考えられる。

<<実験4の分析>>

 実験2で用いた「SKMILAN」(ロングパス主体)と、実験3で用いた「S_drible」(ドリブル主体)を使用して試合を行った。共に「team Harmony」に敗戦している。実験2、及び3の結果を参照してみると両チームとも点差がかなり開いているが若干、SKMILANの方が点差が少ないように思われる。よって単純に考えればSKMILANの方が強いと考えられる。
 実際に、実験4の結果を見てみるとSKMILANの4勝1敗、S_dribleの1勝4敗であった。これによりSKMILANの勝率が80%であり、S_dribleの勝率が20%と理解することができる。これは、SKMILANの方がS_dribleよりも優れているチームであると言えるであろう。  何故このような結果になったのか考えてみると、S_dribleチームのドリブルの精度によると思われる。ドリブルの精度がかなり優れていてどのような敵も交わせるなら、パスなど必要ないのである。しかしS_dribleチームのドリブルはそこまで優れていなかったためこのような実験結果になったと考えられる。

6.まとめ

 本研究では、「ドリブル」、「シュート」などの基本的なサッカープレイヤーの動きは真似できたと思われる。しかし「パス」の完全なる実装はうまくいかなかった。これを実装するには、ボールの動き、味方の動き、相手の動きなどを予測できる機能を追加する必要があると考えられる。他にも、sayコマンドを用いた協調する動きも殆ど実装することができなかったので、より強いチームを作成するにはこのような協調動作を組み込むことも重要だと考える。


参考文献/URL

http://www.robocup.or.jp : ロボカップ日本委員会
http://www.robocup.org : ロボカップ公式ホームページ
http://www.ita.tutkie.tut.ac.jp/~watta/RoboCup/jmanual/main.html : Soccerserver Manual(日本語版)
http://www.gs.kochi-tech.ac.jp/055110g/RoboCup/exp4_2001/robocup/ : 高知工科大学