ロボトレース

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

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

| | コメント (0) | トラックバック (0)

2014年9月28日 (日)

Dust Devilの駆動部構造と小物

Dust Devilの「付属品」や製作にあたって工夫した点についてです。

Cimg2115

ロボット運搬用の箱です。菓子の空箱を再利用しました。

Cimg2114Cimg2116Dust_devil_wheel_mounter_design

アルミで作ったスパナとその使い方です。車軸にはM3のネジが切られており、フレームを両側からナットで挟んで締め付けることで固定します。その際に外側のナットをこのようにして回します。また、同時にネジをドライバーで回すことで、歯車が自由に回りかつガタつかないように調整します。歯車とホイールは一体化しており、車軸と摺動しつつ回ります。ビュートローバーに採用されているタミヤのダブルギヤボックスの青い歯車(2段ギア; 36T/12T)を使いました。

なお、車軸は固定に要する部分だけネジになっていてギアと摺動する部分は円柱のままであることが望ましいのですが、現在のところはありあわせの部品で作ったため全体がネジになっています。ネジ部分は3mmよりも若干細いためガタが出たり、ネジ山に歯車の内部が削られて摩耗しやすいという欠点がありますがひとまず見送りとなりました。

Cimg2118

モーターマウント加工用の治具です。フレームは水平な底板と垂直なモーターマウントに分けて板材から削り出します。底板にポケット加工してそこにモーターマウントをはめ込み、ネジで固定します。そのネジのための穴は板の横面方向のため、私の持っているCNCフライス盤では自動加工できません。そのため底板のポケット加工部分と同じ形をした治具を作り、ピンバイスでネジの下穴を開けました。

| | コメント (0) | トラックバック (0)

2014年度マイクロマウス関西地区大会に出場

9月21日に開催された2014年度マイクロマウス関西地区大会 に参加しました。新しい試みとして、ロボトレース競技が初級者ルールで行われました。私はロボトレース競技(関西支部版初級者ルール)に2台参加しました。

Dust Devil: 10秒580、6位

Cimg1985

Dust Devilは8月頃に制作したビュートロボコン用のライントレーサーです。モーターとCPUボードはキット付属のものを使用しています。学習用ロボットキットをもとに、まずはプログラムを、次はセンサーを、最後に機械機構をという順で改造して性能を上げていったものです。

キットに使われているFA-130タイプの模型用DCブラシモーター(コア有り)は出力の大きさや高速応答性では高価なモーターとくらべて劣ります。それでも慣性モーメントと質量を減らすことでモーターの出力不足を補ってかつ適切に制御することで、ある程度までは高速でスムーズに走れることを示せたのではないかと思います。

なお、ビュートロボコンに例年参加している淀川工科高校のチームも今回の大会に参加していて、接戦となりました。

Spirit: リタイア

Cimg2112

現在製作中の自律型ヒューマノイドロボットです。前日に最低限の電装系ができたものの、残念ながらソフトウェアが間に合わずにリタイアとなりました。来月下旬に韓国で行われるヒューマノイドロボットの競技会の自律型部門に出場するために開発を続けています。詳細は後日紹介したいと思います。

Cimg2073

昨年の全日本マイクロマウス大会には、ヘリコプター型のロボットで出場しました。今年は歩行型のロボットであるSpiritで出場を予定しています。車両型ロボットが多い中で非常に目立つことが予想されます。ロボトレース競技を自動制御というより広い枠組みで捉えて、どんな移動体でも必要なセンサーと制御装置を付ければある程度は課題が遂行できるということをわかりやすく示せるのではないかと思います。

| | コメント (0) | トラックバック (0)

2014年9月 1日 (月)

新しいライントレーサーの走行の様子

新しいライントレーサーの走行の様子を公開しました。

3年前に大会に出場した「辻風」との違いは、ブレーキングの際に適正な加速度を出すために近似的に一定加速度の加減速を試みている点です。風兎2009LTで説明している内容とほぼ同じです。結果的に、少しの時間だけ後進の指令を出してブレーキングすることになります。まだパラメータ調整が不完全で等加速になっておらず、また最高速度を上げる余地があったりしますが、次のロボットの制作のためひとまず終了とします。

映像の公開にあたり、ロボットの名前は仮にDust Devil (ダスト・デビル)としました。元々「辻風」と同じで軽量化したという位置づけなので、マイナーチェンジであることを示すためにそのまま英語訳にしたものです。ただ、この方法ですと英語表記の際に区別できなくなってしまいますので、その際はDust Devil II、ということにしています。いっそのこと「辻風2」にした方が良かったかもしれません。

| | コメント (0) | トラックバック (0)

2014年8月16日 (土)

新しいライントレーサー

Img_20140812_095240Img_20140812_095318

FA-130タイプモーターを使ったライントレーサーを作り始めました。「辻風」から余分なものを省いて更に軽量化した、という位置づけです。一部の部品の設計は風兎2014のものを元にしています。今のところ、バッテリー込みでおよそ100グラム、辻風のおよそ半分です。

| | コメント (0) | トラックバック (0)