RoboCup小型機シミュレータ"wemu"利用の手引き
はこだて未来大・秋田純一
akita@is.t.kanazawa-u.ac.jp
wemuとは?
RoboCup小型機部門でのロボットの動作をシミュレートすることを目的としています。ここで想定しているチームは、画像フィードバック、いわゆるビジュアルサーボを採用しています。つまりチームのシステム構成は以下のようであることを仮定します。
- 1. 天井カメラ (フィールド全体の状況をとらえる)
- 2. ビジョンシステム (フィールド上のボールやロボットの座標を求める)
- 3. 情況判断 (座標情報から戦況を判断)
- 4. ロボットの動作決定 (各味方ロボットの動作を決定)
- 5. ロボットへの動作コマンド送信 (各ロボットの動作を無線で送信)
最後の5.によって各ロボットが移動し、その結果が1.に反映されることで、全体で閉ループを構成することになります。
このwemuでは、このうちの1., 2., 5.をコンピュータ上に再現します。つまり、まず「各ロボットの動作コマンド」を入力として受け付けます。この受け付けた動作コマンドに従ってwemu内部のロボットを移動し、衝突等の物理現象を計算します。そしてその結果に基づく座標データを、ビジョンシステムの処理結果である「座標情報」として出力します。
従って、ロボットの動作のために必要な技術的な問題点を分離し、いわゆる「AIらしい」部分である3., 4.の部分のプログラム開発に専念できる環境を提供することができます。
なお各データの送受信はUDPによって行われます。
なおwemu(ver1.14)はここから入手できます。
想定されるシステム構成
通常の小型機部門のチームのシステムは以下のような構成をとっています。
座標データ-------[戦略システム]------->
ロボットの動作コマンド
この座標データを受信してとロボットの動作コマンドの生成する「戦略システム」が実現できれば、普段はこのwemuで計算機上でシミュレーションし、そのまま同一フォーマットのデータを送受信する実機システム(ビジョンシステムと無線システム)と差し替えることで、そのまま実機での動作を実現できることになります。
なおここでは、RoboCup99 Small-size Leagueに参加した"Linked99"のロボット(写真)を想定しています。
画面の構成
「Yロボット使用」グループ
黄色チームの各ロボットを使用するかどうかを選択します。
「Bロボット使用」グループ
青色チームの各ロボットを使用するかどうかを選択します。
「Y座標データ送信」グループ
黄色チームから見た座標データの送信先のホスト名・ポート番号を指定します。座標データは、後述のフォーマットにしたがってこの指定先にUDPで送信されます。
「Y動作コマンド受信」グループ
黄色チームの各ロボットの動作コマンドを受信するポート番号を指定します。動作コマンドは、後述のフォーマットにしたがってこの指定したポートにUDPで送信されなければなりません。ただしロボット#5はキーパーで左右しか動けないため、右の車輪の速度は常に左の車輪の速度と同一になります。
「B座標データ送信」グループ
青色チームから見た座標データの送信先のホスト名・ポート番号を指定します。座標データは、後述のフォーマットにしたがってこの指定先にUDPで送信されます。
「B動作コマンド受信」グループ
青色チームの各ロボットの動作コマンドを受信するポート番号を指定します。動作コマンドは、後述のフォーマットにしたがってこの指定したポートにUDPで送信されなければなりません。ただしロボット#5はキーパーで左右しか動けないため、右の車輪の速度は常に左の車輪の速度と同一になります。
「開始」ボタン
物理現象のシミュレーションを開始します。また、各ロボットの動作コマンドの受信、座標データの送信も開始します。
「停止」ボタン
動作を一時中断します。
入力(ロボット動作コマンド)のフォーマット
各味方ロボットの動作は、1行あたり1台のロボットの動作を以下のフォーマットで記述します。
N L R
各変数の意味は以下の通りです。
- N ロボット番号(1=ロボット#1, ... 5=ロボット#5)
- L 左車輪の回転速度(+1.0=正転最大速度、0.0=停止、-1.0=逆転最大速度)
- R 右車輪の回転速度(+1.0=正転最大速度、0.0=停止、-1.0=逆転最大速度)
なお、各変数は半角スペースまたはタブで区切ります。
[例]
1 0.5 -0.5
ロボット#1の左車輪を最大速度の0.5倍で正転、右車輪を0.5倍で逆転します。従って、ロボット#1はその場で右回転を始めます。
出力(座標データ)のフォーマット
座標データは、1フレームあたり1行で以下のフォーマットで送信されます。
N Sx Sy Bx By Nrf NRe PF1x PF1y MF1x MF1y PF2x PF2y MF2x MF2y ... PE1x PE1y PE2x PE2y ...
各変数の意味は以下の通りです。
- N フレームの通し番号
- Sx Sy フィールドの横・縦の大きさ
- Bx By ボールの座標
- Nrf 味方ロボットの台数
- Nre 相手ロボットの台数
- PF1x PF1y 味方ロボット#1の位置を示す黄色ピンポンの座標
- MF1x MF1y 味方ロボット#1の向き検出用の緑色マーカーの座標
- PF2x PF2y 味方ロボット#2の位置を示す黄色ピンポンの座標
- MF2x MF2y 味方ロボット#2の向き検出用の緑色マーカーの座標
...(これが合計Nrf台分続く)
- PE1x PE1y 相手ロボット#1の位置を示す青色ピンポンの座標
- PE2x PE2y 相手ロボット#2の位置を示す青色ピンポンの座標
...(これが合計Nre台分続く)
なお各変数は半角スペースで区切られます。
ここで用いる座標系は、以下のような通常の数学で用いる座標系です。
y
↑
|
|
+−−−−−−−−→x
O
また、各座標データは、およそビデオレート(33ms)ごとに送出されます。従ってゲーム開始からの経過時間は、
N×33[ms]で与えられます。ただしこの送出時間間隔は実行する計算機の演算性能に依存し、また実機においても画像処理系に依存して長くなる可能性があります。
[例]
120 300 150 150 75 1 2 200 150 200 140 200 50 200 100
- フレーム通し番号100(つまりゲーム開始からおよそ3.9秒後)
- フィールドのサイズは300×150(ドット)
- ボールの位置は(150, 75) (つまりフィールドの中央)
- 味方ロボットの台数は1台
- 相手ロボットの台数は2台
- 味方ロボット#1の位置は(200, 150)、マーカーの位置は(200, 140) (つまり右を向いている)
- 相手ロボット#1の位置は(200, 50)
- 相手ロボット#2の位置は(200, 100)
使用条件等
このソフトウエアの著作権は、秋田純一(akita@is.t.kanazawa-u.ac.jp)が所有します。このソフトウエアは、利用者の責任のものとで利用してください。また、このソフトウエアは未完成のため、再配布等はご遠慮ください。お問い合わせ等は秋田純一(akita@is.t.kanazawa-u.ac.jp)までご連絡ください。
改変履歴
2000.1.8 wemu ver1.0:やや物理モデルに不備があるような気がしますが・・・
2000.1.11 wemu ver1.01:ロボットコマンドの受信バッファを常時最新まで読むように変更
2000.2.3 wemu ver1.10:ボール、ロボットの位置、向き設定を「つまむ」ように変更。ロボット#5(キーパー)を1輪駆動(左車輪へのコマンドのみ受け付け)。フィールドの寸法をルール通りに変更。相手ロボットも動作コマンドを受け付けられるように変更。相手チーム側からみた座標情報もUDPで送信できるように変更。「開始」「停止」ボタンの位置を変更。
2000.2.4 wemu ver1.11: データ送信先等の設定ボタンのバグをfix。
2000.5.24 wemu ver1.12:出力座標フォーマットの説明のバグをfix。
2000.5.28 wemu ver1.13:ボールの位置をときどき「飛ぶ」ように設定。ロボットのマーカー等の位置を±1画素の範囲で変動するように設定。メニューの一部バグfix。
2000.6.1 wemu ver1.14:実画像データを模擬するため、送信する座標のブレを設定可能に&座標データを1フレーム前のものを送信するように変更。