RoboCup小型リーグ向け座標配信システム ccam の手引き

last update: 2003.4.16 Junichi Akita (akita@is.t.kanazawa-u.ac.jp)

RoboCup小型リーグ向け画像配信システム ccam (ver4.00) の使用法について まとめてあります。 なお最新版はここから入手できます。 なお以前バージョンのccam(ver2.14以前)から、 wemu4にあわせてプロトコルが大幅に変更になっています。 以前バージョンはこちら
本システムはおおまかに3つのプログラムからなります。

実際の利用にあたっては、まず xext で色パラメータを設定し、 それをパラメータファイルに保存します。 そのパラメータファイルを使って ccam で座標抽出をします。 戦略決定プログラムは、 wemu4と 同じプロトコルで座標情報の問い合わせをして ccam から座標情報を 取得します。 これらのデータ送受信はすべて UDP で行なわれます。 これに加えて、必要に応じて stat によって座標情報のグラフィック表示を 行なうことができます。 stat は標準で 100ms ごとに自動的に ccam に座標情報の問い合わせを行い、 その結果に基づいてボールやロボット等の位置をグラフィックに表示します。

前提システム

ccam は、以下のシステムを前提とします。

色抽出パラメータ設定ツール xext

xext を make xext でコンパイルしたあと、以下のように起動します。

xext [color.bound_file]

color.bound_file はオプションで、パラメータファイル(後述)が 既にある場合は、その情報をあらかじめ読み込むことができます。 これを指定しない場合はデフォルト値で起動します。

左上が、カメラの生画像(静止画)です。(最初に起動するときは 何も表示されないことがありますので、何回か Redraw するか xawtv等の 生画像表示プログラムで表示を行なってください) 通常の使い方は以下のような順序によります。

  1. 生画像中で、ボール(Ball)、黄チームピンポン(Ping(Y))等を、 それを含むような矩形領域を、2回のマウスの左クリックで指定します。 例えば Ball のタブを選んだ状態で2回左クリックすると、その2点を 頂点とする矩形が赤色で描かれます。この矩形領域は、その中にある 明るい色が対象の色(この場合はボールの色)である、ということを 示しています。この「明るい色」の条件は、V(U)とV(L)の スライダーバーによって上限と下限を指定できます。
  2. 必要な色を矩形領域で選んだら、View ボタンを押して確認します。 Viewボタンは、選んだ矩形領域内でV(U)とV(L)の範囲内の色を 黒色で表示します。対象とする画素(例えばボールの画素のみ)が 黒色になることを確認します。不十分な場合はV(U)とV(L)を調整します。
  3. Startボタンを押すと、右上の領域に、各矩形領域内の対象画素の 色が HS 空間(色相・彩度)にプロットされていきます。
  4. しばらくたったら、あるいは十分HS空間へのプロットができたら、 Stopボタンを押してHS空間へのプロットを止めます。
  5. 各色に対して、HS空間のプロットの画素の集団をほぼ含むように 範囲パラメータを調整します。この範囲パラメータは次のいずれかの 方法で指定します。
  6. 各色のHS空間の範囲パラメータを設定できたら、Extractボタンを 押します。最初に選んだ生画像中の矩形領域内で、設定した 範囲パラメータをみたす色の画素のみを、その色(例えばボールは赤)で 表示します。望みどおりの色抽出ができていなければ、範囲パラメータの 調整を繰り返します。
  7. 念のため生画像の全体に対して、範囲パラメータに基づいて 色抽出を行なうためにはExtractAllボタンを押します。
  8. 矩形領域の設定と範囲パラメータの設定をやりなおすときはClearボタンを 押します。
  9. 生画像を再描画するにはRedrawボタンを押します。
  10. 設定した矩形領域を確認するにはConfirmボタンを押します。
  11. 範囲パラメータの設定が終わったら、SaveColorボタンで ファイル名を指定して保存します。例えばhogeというファイル名を 指定すると、ccam用の色変換テーブル形式でhogeに保存され、 またhoge.boundというファイル名で各色の上下限のみをテキスト形式で 保存できます。これはxextの起動時にコマンドラインオプションとして 指定すると各色の範囲の初期値として使用できます。
  12. 終わったらQuitボタンを押して終了します。
なお各物体の、生画像中での表示色は以下のとおりです。
ボール(Ball)
黄チーム・ピンポン(Y-Mark)
青チーム・ピンポン(B-Mark)
黄チーム・マーカー#1(Y-Marker1)
黄チーム・マーカー#2(Y-Marker2)
青チーム・マーカー#1(B-Marker1)水色
青チーム・マーカー#2(B-Marker2)ピンク

座標抽出・配信プログラム ccam

xextで作成した範囲パラメータファイルをもとに座標抽出と 配信を行ないます。 make ccam でコンパイルしたあと、以下のように起動します。

ccam NRY NRB LUT_FILE

ここでNRYは黄チームのロボットの台数、NREは青チームのロボットの台数、 LUT_FILEはxextで作成した範囲パラメータファイルです。
なおこの際、味方ロボットのマーカーのつけ方を記述した shape.txtというファイルが必要となります。 これは例えば以下のように記述します。

# robot shape specification file for ccam-4.00
# 
#         +
# +-----+ |
# |# O *| -> 0deg
# +-----+
#  O = mark
#  * = submark1 ;M1(large)/m1(small)
#  # = submark2 ;M2(large)/m2(small)
#  dir = direction of robot's front; CCW from 0deg
#
#-----------------
# # M1/m1 M2/m2 dir size team ID name
# 2 1 90 5 Y 3 HOGE
#-----------------
# in this case; large M1 & small m2 are used; size (robot's radius)=5pixel
#               Y's robot ID=3, front is below
# 
#  front
#    |
# +-----+  * = large M1
# |# O *|  # = small m2
# +-----+  robot name: HOGE
#
1 1 90  10 Y 1 Y-Robot1
2 2 90  10 Y 2 Y-Robot2
1 0 0   10 Y 3 Y-Robot3
0 1 0   10 Y 4 Y-Robot4
1 2 0   10 Y 5 Y-Robot5
#から始まる行はコメントです。 使用する黄・青各チームのロボットに対して、 マーカー#1・マーカー#2がついているかどうか、 ついている場合はその大きさ(大または小)と、 それらのマーカーとロボットの「前」との対応を 記述します。 ここに示したサンプルの場合、各ロボットは次のような 形状をもつことになります。

ここでは黄=Y-Ping、緑=Y-Marker1、紫=Y-Marker2として示してあります。 なおこれらのマーカは、ピンポン(黄・青)の周囲の、距離が sizeで指定されている画素数分の円形領域のみを対象に行ないます。 従って各ロボットのおおよその寸法(画面上での画素数)をこのsize.txtに 指定します。
また各マーカーの大小は面積で判断しますが、その閾値は ccamのソース中で指定してありますので コンパイル前に確認してください。 青チームのロボットについても同様です。 なお相手チームのマーカが不明な場合、あるいは上記のような 規則に従ってマーカがついていない場合(現実の試合ではよくあると 思われます)は、shape.txt に何も記述しないでください。 上記の例では、青チームのロボットのマーカを使用しないことになります。 ただしこの場合、ccamで得られる青チームのロボットの「向き」は 常に「-1」となります。
またccam起動時には、フィールドのサイズを指定する size.txtというファイルも必要になります。 これはフィールドの左上と右下の隅の座標(xextでマウスカーソルの位置として 確認できます)を、以下のような形式で記述します。
10 20 400 300
1行目に4つの数字を記述し、この場合は左上が(10,20)、右下が(400,300)で あることを示しています。 2行目以降は無視されます。
ccamの稼動中は、ソース中で#defineで指定したオプションに従って 適宜詳細な情報を標準出力に表示します。 なお最後の()内に表示される(30.0)などの数値は 毎秒処理されるフレーム数を表しています。 一般的なPCであればほぼ30.0(NTSCのフルフレームレート)が 出せると思いますが、これが低すぎる場合は、 もう少し高速なPCを用意するか、不必要な常駐プログラムを止める 等の処置をしてください。
あとは戦略プログラムから座標問い合わせを行い、 座標情報を取得してその後の動作を行ないます。 なお座標情報中のロボット番号は、wemu4と同様に以下の順になります。
  1. フレーム番号、フィールドサイズ、ボール位置
  2. 味方チーム(問い合わせ時に指定したチーム)のロボット数
  3. 相手チーム(問い合わせ時に指定しなかったチーム)のロボット数
  4. 自分のロボット(問い合わせ時に指定したID)の位置と向き
  5. 味方チームの他のロボットに対して、shape.txtで指定したIDの順に 並べ替えた順に位置と向き
  6. 相手チームのロボットの位置と向き(shape.txt中のIDの順)

座標ビューア stat

ccamで抽出されたボールや各ロボットの位置等をグラフィック表示します。

stat CCAM_HOST CCAM_PORT ID_FIRST

CCAM_HOSTはccamが稼動しているホスト名です。 例えばccamと同じPC上でstatを起動する場合は localhostで構いません。 CCAM_PORTはccamの座標配信問い合わせ先のUDPポート番号です。 CCAM_PORTはccamのソース中で指定できますが、 デフォルトは10030です。 またフィールド内にいる黄色チームのロボットのうち、 一番IDが若いもののIDを、ID_FIRSTで指定します。

なお画面中、三角形のとがった先がロボットの「前」になります。 またロボットの脇に表示される数本の短い縦線は、 フィールド内でロボットのIDを、若い順に並べたときの順序をあらわします。


改変履歴

2001.5.4 ccam ver1.25:最初のバージョン。
2002.6.11 ccam ver2.00: 座標フォーマットを変更。
2002.6.27 ccam ver2.10: 角度計算関係のバグfix。
2002.9.8 ccam ver2.11: Copyrightを修正。
2002.9.9 ccam ver2.12: 戦略側のサンプルプログラムsample.cを添付
2002.10.31 ccam ver2.13: LGPLで公開。
2002.12.1 ccam ver2.14: 細かいバグfix。
2003.3.4 ccam ver2.20: プロトコルをwemu4にあわせる。
2003.4.15 ccam ver4.00: バージョン番号をwemu4にあわせる。
akita@is.t.kanazawa-u.ac.jp