Next: sclient1
Up: クライアントの作り方
Previous: サンプルクライアントの全体構造
Contents
Index
シンプルクライアント
完全なサッカークライアントを開発するためにユーザがなすべき事は,`頭脳'
部分のコードを書くことである.頭脳部分は,前説で述べた
sampleclient を使ってユーザが行ったのと同じことを実行する.
言い替えると,ユーザは,受信したセンサ情報に基づいてコマンド文字列を生
成するコードを書かなければならない,ということである.
もちろん,これは簡単な仕事ではない(多くの研究者が研究対象としてRoboCup
に取り組んでいる).そして,その実装には様々な方法がある.
単純に言って,プレイヤクライアントを開発するためには,ユーザは次の関数
を実現する必要がある:
- [Sensing]
- センサ情報の解析:
前説で示したように,サーバは様々な情報をS式で送信する.
そのため,クライアントはS式を構文解析する必要がある.
そして,特定の内部表現を得るために,クライアントは情報を分析し
なければならない.
例えば,プレイヤの位置やフィールドの状態を推測するために,クラ
イアントは視覚情報を分析する必要がある.何故なら,視覚情報は
物体(フィールド上の目印となる物体や移動物体)の相対的な位置しか
含まないからである.
- [Action Interval]
- コマンド送信間隔の制御:
体の制御を行うコマンド(turn,dash,kickなど)は100msに一回しか
サーバによって受けつけられない.そのため,クライアントはコマン
ド送信前に適切な間隔を待つ必要がある.
- [Parallelism]
- センサと行動の並列実行:
サッカーサーバはセンサ情報とコマンドを非同期に処理する.そのた
め,クライアントはセンサプロセス(センサ情報の取扱い)と行動プロ
セス(コマンド送信の制御)を並列に実行する必要がある.
- [Planning]
- プレイのプランの作成:
クライアントは,センサ情報を用いて適切なコマンド列を生成する必
要がある.もちろん,これがサッカークライアント開発における最終
的な目標である!!
単独動作するプレイヤのシンプルな例,sclient1 と sclient2 をこ
こで示す.これらはボールを追いかけて敵ゴールへとキックするだけである.
ソースは次の場所から得られる:
ftp://ci.etl.go.jp/pub/soccer/client/noda-client-2.0.tar.gz
このサンプルでは,上で述べられた機能が次のように実現されている:
- Sensing 関数に関しては,いずれのサンプルにおいても
class BasePlayer, class FieldState, estimatePos関数の
共通機能を使用する.
これらの機能によって,サンプルプログラムは以下のことを実行する:
- サーバと接続したソケットからデータを受信し,
- S式のデータを解析し,
- 内部データフォーマット(class SensorInfo)へと式を解
釈し,
- 受信データが視覚情報であれば,自身と田の物体の位置を推
定する.
詳細については,ソースコードを参照してもらいたい.
- Action Interval と Parallelism 関数に関しては,サ
ンプルはそれぞれ異なる方法を使用している.
一つ目のサンプル sclient1 は select() 関数のタイムア
ウトを使用する.
二つ目のサンプル sclient2 はマルチスレッド(pthread)を使用
する.
これらは後で説明される.
- Planning 関数に関しては,いずれのサンプルも以下のような
非常に単純なプランナを持つ:
- 過去10サイクルの間ボールを見ていない,またはボールの位
置を過去10サイクル推定できていなければ,周囲を見渡す.
- ボールがキック可能であれば,敵ゴールへとボールをキック
する.
- それ以外の場合,ボールを追いかける(ボールへターンしダッ
シュする).
Subsections
Hidehisa Akiyama
2004-11-21