RoboCup小型リーグ向け座標配信システム ccam の手引き
last update: 2002.1.6, Junichi Akita (akita@is.t.kanazawa-u.ac.jp)
RoboCup小型リーグ向け画像配信システム ccam の使用法について
まとめてあります。
なお最新版はここから入手できます。
※近日中にプロトコルを一部変更します。
変更予定はこちら
本システムはおおまかに3つのプログラムからなります。
- 色パラメータ設定ツール xext
- 座標抽出・配信プログラム ccam
- 座標ビューア stat
実際の利用にあたっては、まず xext で色パラメータを設定し、
それをパラメータファイルに保存します。
そのパラメータファイルを使って ccam で座標抽出をします。
戦略決定プログラムは、
wemu3と
同じプロトコルで座標情報の問い合わせをして ccam から座標情報を
取得します。
これらのデータ送受信はすべて UDP で行なわれます。
これに加えて、必要に応じて stat によって座標情報のグラフィック表示を
行なうことができます。
stat は標準で 100ms ごとに自動的に ccam に座標情報の問い合わせを行い、
その結果に基づいてボールやロボット等の位置をグラフィックに表示します。
前提システム
ccam は、以下のシステムを前提とします。
- Linux 2.2以降(FreeBSDでもOKかも)
- Video for Linux 2 (V4L2) を利用できる環境
- V4L2で利用可能なフレームグラバ (Bt8x8系チップ搭載のもの)
- gtk ver1.2以降を利用できる環境
- 1色または2色で、大または小の2種類までの大きさのマーカーを
つけている味方ロボット
色抽出パラメータ設定ツール xext
xext を make xext でコンパイルしたあと、以下のように起動します。
xext [color.bound_file]
color.bound_file はオプションで、パラメータファイル(後述)が
既にある場合は、その情報をあらかじめ読み込むことができます。
これを指定しない場合はデフォルト値で起動します。
左上が、カメラの生画像(静止画)です。(最初に起動するときは
何も表示されないことがありますので、何回か Redraw するか
xawtv 等の
生画像表示プログラムで表示を行なってください)
通常の使い方は以下のような順序によります。
- 生画像中で、ボール(Ball)、味方ピンポン(Ping(F))等を、
それを含むような矩形領域を、2回のマウスの左クリックで指定します。
例えば Ball のタブを選んだ状態で2回左クリックすると、その2点を
頂点とする矩形が赤色で描かれます。この矩形領域は、その中にある
明るい色が対象の色(この場合はボールの色)である、ということを
示しています。この「明るい色」の条件は、V(U)とV(L)の
スライダーバーによって上限と下限を指定できます。
- 必要な色を矩形領域で選んだら、View ボタンを押して確認します。
Viewボタンは、選んだ矩形領域内でV(U)とV(L)の範囲内の色を
黒色で表示します。対象とする画素(例えばボールの画素のみ)が
黒色になることを確認します。不十分な場合はV(U)とV(L)を調整します。
- Startボタンを押すと、右上の領域に、各矩形領域内の対象画素の
色が HS 空間(色相・彩度)にプロットされていきます。
- しばらくたったら、あるいは十分HS空間へのプロットができたら、
Stopボタンを押してHS空間へのプロットを止めます。
- 各色に対して、HS空間のプロットの画素の集団をほぼ含むように
範囲パラメータを調整します。この範囲パラメータは次のいずれかの
方法で指定します。
- 扇形領域: Arcをチェックした場合。H(L)とH(U)で角度方向の
下限と上限を、S(L)とS(U)で半径方向の下限と上限を指定します。
- 矩形領域: Rectをチェックした場合。H(L), H(U), S(L), S(U)で
矩形領域の上端と下端、左端と右端を指定します。
- 各色のHS空間の範囲パラメータを設定できたら、Extractボタンを
押します。最初に選んだ生画像中の矩形領域内で、設定した
範囲パラメータをみたす色の画素のみを、その色(例えばボールは赤)で
表示します。望みどおりの色抽出ができていなければ、範囲パラメータの
調整を繰り返します。
- 念のため生画像の全体に対して、範囲パラメータに基づいて
色抽出を行なうためにはExtractAllボタンを押します。
- 矩形領域の設定と範囲パラメータの設定をやりなおすときはClearボタンを
押します。
- 生画像を再描画するにはRedrawボタンを押します。
- 設定した矩形領域を確認するにはConfirmボタンを押します。
- 範囲パラメータの設定が終わったら、SaveColorボタンで
ファイル名を指定して保存します。例えばhogeというファイル名を
指定すると、ccam用の色変換テーブル形式でhogeに保存され、
またhoge.boundというファイル名で各色の上下限のみをテキスト形式で
保存できます。これはxextの起動時にコマンドラインオプションとして
指定すると各色の範囲の初期値として使用できます。
- 終わったらQuitボタンを押して終了します。
なお各物体の、生画像中での表示色は以下のとおりです。
ボール(Ball) | 赤 |
味方ピンポン(Ping(F)) | 黄 |
相手ピンポン(Ping(E)) | 青 |
味方マーカー#1(Marker#1) | 緑 |
味方マーカー#2(Marker#2) | 紫 |
座標抽出・配信プログラム ccam
xextで作成した範囲パラメータファイルをもとに座標抽出と
配信を行ないます。
make ccam でコンパイルしたあと、以下のように起動します。
ccam NRF NRE LUT_FILE
ここでNRFは味方ロボットの台数、NREは相手ロボットの台数、
LUT_FILEはxextで作成した範囲パラメータファイルです。
なおこの際、味方ロボットのマーカーのつけかたを記述した
shape.txtというファイルが必要となります。
これは例えば以下のように記述します。
# robot shape specification file for ccam
#
# +
# +-----+ |
# |# O *| -> 0deg
# +-----+
# O = ping * = marker1 ;M1(large)/m1(small)pong
# * = marker1 ;M1(large)/m1(small)
# # = marker2 ;M2(large)/m2(small)
# dir = direction of robot's front; CCW from 0deg
#
#-----------------
# # M1/m1 M2/m2 dir ID name
# 2 1 90 5 HOGE
#-----------------
# in this case; large M1 & small m2 are used; robot ID=5, front is below
#
# front
# |
# +-----+ * = large M1
# |# O *| # = small m2
# +-----+ robot name: HOGE
#
1 1 90 1 Robot1
2 2 90 2 Robot2
1 0 0 3 Robot3
0 1 0 4 Robot4
1 2 0 5 Robot5
#から始まる行はコメントです。
使用する各ロボットに対して、
マーカー#1・マーカー#2がついているかどうか、
ついている場合はその大きさ(大または小)と、
それらのマーカーとロボットの「前」との対応を
記述します。
ここに示したサンプルの場合、各ロボットは次のような
形状をもつことになります。
ここでは黄=Ping(F)、緑=Marker#1、紫=Marker#2として示してあります
また各マーカーの大小は面積で判断しますが、その閾値は
ccamのソース中で指定してありますので
コンパイル前に確認してください。
またccam起動時には、フィールドのサイズを指定する
size.txtというファイルも必要になります。
これはフィールドの左上と右下の隅の座標(xextでマウスカーソルの位置として
確認できます)を、以下のような形式で記述します。
10 20 400 300
1行目に4つの数字を記述し、この場合は左上が(10,20)、右下が(400,300)で
あることを示しています。
2行目以降は無視されます。
なお各マーカの探索は、味方ピンポン(この場合は黄)の周囲の
一定範囲のみ行ないます。
その範囲はロボットの寸法に依存しますが、
これはccamのソース中で指定してありますので
コンパイル前に確認してください。
ccamの稼動中は、ソース中で#defineで指定したオプションに従って
適宜詳細な情報を標準出力に表示します。
なお最後の()内に表示される(30.0)などの数値は
毎秒処理されるフレーム数を表しています。
一般的なPCであればほぼ30.0(NTSCのフルフレームレート)が
出せると思いますが、これが低すぎる場合は、
もう少し高速なPCを用意するか、不必要な常駐プログラムを止める
等の処置をしてください。
あとは戦略プログラムから座標問い合わせを行い、
座標情報を取得してその後の動作を行ないます。
なお座標情報中のロボット番号は、
存在するロボットに対して、shape.txtで指定したIDの順に
並べ替えた後の番号になります。
例えばID=1, ID=2, ID=4の3台のロボットが存在する場合、
ID=4のロボットは、「3番目のロボット」として
座標情報中に現われます。
座標ビューア stat
ccamで抽出されたボールや各ロボットの位置等をグラフィック表示します。
stat CCAM_HOST CCAM_PORT
CCAM_HOSTはccamが稼動しているホスト名です。
例えばccamと同じPC上でstatを起動する場合は
localhostで構いません。
CCAM_PORTはccamの座標配信問い合わせ先のUDPポート番号です。
CCAM_PORTはccamのソース中で指定できますが、
デフォルトは10030です。
改変履歴
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。
akita@is.t.kanazawa-u.ac.jp