« マイクロマウス2014参加 | トップページ | 第2回ROBO-剣大会に参加 »

2014年11月29日 (土)

Spiritの画像処理・計測・制御の処理

先日のマイクロマウス大会で多く受けた質問は、Spiritのセンサーはどこに付いているのか、というものでした。

このことから察するに、カメラをロボットのセンサーとして使用するということについて馴染みのない方も多かったのではないかと思います。そこで初歩的な部分から簡単に説明してみたいと思います。

Spiritは頭部に搭載したカメラをセンサーとして使用します。カメラから得られた画像をもとに必要な情報を計算によって求め、次の一歩でどちら向きに方向転換するかを決めています。

Input

これは練習用コースにロボットを立たせた状態でロボットのカメラで撮影したデジタル写真です。カメラの性能上は5メガピクセルの画素がありますが、そこまでいらないのでひとまず実験用にはVGA(640x480)で撮っています。ただ、これでも多いので後の処理で更に縮小して使っています。

デジタル画像はプログラムから見ると、各画素に数が入っているデータとなります。カラーカメラの場合は各画素に3個の数(たとえば赤・青・緑色の成分)が入っている形になります。ロボトレース競技には白黒写真(グレースケール画像、単色画像or濃淡画像)で十分なので、濃淡画像に変換して以降扱います。各画素には、明るさを表す数値が入っていることになります。

Binarize

ロボトレース競技は床「白い」線とマーカーが描かれており、これらがセンサーで得たい対象です。そこでまず、画像の「白い」部分とそれ以外を分けます。2値化と呼ばれる処理で画素の持っている明るさが一定値より大きいか小さいかで2つに分けます。これは、その結果を見やすく表したものです。

なお、ここではいくつかの仮定を置くことで「床の線」と「画像の画素の値」がつながっていることを強調しておきます。

  • 床材は黒い塗料で塗られており反射率が低い。白線は反射率が高い。
  • 部屋はそれなりの明るさで照明が付いている。
  • 照明の光が床や白線部分にあたり、その反射光がロボットのカメラに入る。
  • カメラのゲイン(感度)や絞り、露光時間は適切に設定されている。

この例ではうまくいきましたが、床の面が平滑で鏡のようになっていると、天井の照明灯が映り込んで黒い床部分も白く写ってしまう場合があります。そのような状況では、単なる2値化処理ではうまくいかず他の処理が必要になることもあります。

Regions

次にマーカーとコースの線を区別します。そのためには、「マーカー」や「コースの線」といった曖昧な概念を計算可能な形にすることが必要です。いろいろな方法が考えられますが、ひとまず一つの例を示します。白い部分を連結した領域単位に分割して、面積が一定より大きいものをコースの線、他をマーカーであるとします。灰色で表した部分がマーカーとして認識した部分です。実際は他にも基準を持っていますが、まだ開発中段階のため割愛します。

Line

マーカーを除外するとこのようになります。これで次の処理がしやすくなります。

Detectedpoints

この先の処理はまだ仮のものですが、ひとまずの処理例を示しています。画像の下端中央あたりを起点として、そこから一定の距離(この例では画像幅の30%と15%)にある点を求めます。これは、仮想的に楕円形のセンサーがロボットの前方に配置されているような効果を得ようという発想で作ったものです。この2つの点からロボットが線からずれている度合いと線の伸びている方向を得ます。

計測の次は、ロボットの動作を決定する処理です。車両型のロボトレーサーと同様の発想で、「ロボットが線からずれている度合い」と「線の伸びている方向」の2つに適当な係数を掛けて操作量(操舵量に相当)を決定することにしました。ただし、今回は、ロボットの動作は一歩ごとに左右への旋回が強い旋回と弱い旋回の2通り、これに直進を加えて5通り作ったのみで、任意の旋回率を指定できない仕様でした。そのため先に述べた操作量を反映するために5通りに場合分けして次の一歩の方向を決めるようにしました。

以上が今年の大会参加時点においてSpiritに採用した計測と制御の方式です。

以前の記事では「簡易的な制御方式」と言いましたが、一言で言えば幾何(geometry)的な処理をまったく行っていないことを指しています。計測の際にはカメラが地面を斜めに撮っているため生じる透視投影(遠近法)の効果を考慮し、またロボット自身とカメラで撮った地面との位置関係を正しく扱うようにすれば、計測結果を角度や距離といった物理的な量の次元で得ることができます。そうすればロボットの行動の方も物理的関係に基づいて行うことができます。例えば、次に踏み出す足を地面の線の方向と直接一致させる、というようなこともできるようになります。

次は熱田の森ロボット競技会への参加を予定しています。それまでに制御方式を根本的に作り直したいと思います。

|

« マイクロマウス2014参加 | トップページ | 第2回ROBO-剣大会に参加 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/123969/60731338

この記事へのトラックバック一覧です: Spiritの画像処理・計測・制御の処理:

« マイクロマウス2014参加 | トップページ | 第2回ROBO-剣大会に参加 »