[[FrontPage]] *自律走行ロボットのためのハフ変換を用いた進行方向算出 [#t3890ad2] #contents *''はじめに'' [#ne739c1d] 2007年度より茨城県つくば市において、自律走行車両型のロボットに決められたコースを走らせ、完走させることを通じてロボットの自律行動技術の発展を試みる大会、通称つくばチャレンジが開催されている。~ 今年2009年においても11月21日、つくば中央公園を含む1km強のコースを、自律走行ロボットに1周させるという試みを行なう大会として、つくばチャレンジ2009が開催された。 #ref(pic1.JPG,nolink) このつくばチャレンジ2009に群馬大学はミツバと共同チームで参加し、本番コースの一部の約140mを走行するトライアルを突破し、本番走行にて50mという記録を残した。~ この大会に群馬大学チームの一員として参加し、課題達成を狙うための試みとして行なった研究の報告を示す。 *''走行ロボットについて'' [#h28c0a8e] 群馬大学・ミツバ共同チームが本走行に使用したロボット「MG09」を下に示す。 #ref(pic2.JPG,nolink) 基本戦略としては、試走時に作成しておいた地図データと、本走行時にセンサから得られるデータを比較して自己位置を認識し、次にどちらへ移動するかを判断させるという流れになる。比較するデータは主に車輪回転センサ(オドメトリ)で得られるロボットの移動距離・向いている方向であるが、このセンサによるデータだけでは走る距離に比例して誤差が蓄積していくため、ステレオカメラで得られる画像のデータの照合を行なって距離・方向データの修正をし、自己位置の認識を行なう。~ しかし、自己位置認識で画像を照合する際、特徴が少ない画像は照合に使えないことがある。そのため、場所によっては画像による自己位置の認識が行なえず、ロボットの制御が難しくなる可能性が出てくる。~ 本研究では、そのような場所に特化した画像処理を考案し、実際にロボットのカメラで撮影した画像に試してみることでその性能を検証した。 *''直線の交点による進行方向算出'' [#i265a105] つくばチャレンジ2009において走行するコース上には、道路横、池の横の歩道が存在する。 #ref(pic3.JPG,center,nolink) #ref(pic4.JPG,center,nolink) これらの場所では、得られる画像の特徴が少なく、照合を行ないにくいため、自己位置の認識が難しい。 しかし、特徴が少ないかわりに、地面の点字ブロック・道路と歩道を分ける柵・池の淵に設置された柵など、道に沿って直線上に伸びた人工物がいくつか存在する。この人工物を利用した画像処理が考えられる。~ そこで、これらの人工物を含む画像の直線部分を抽出し、得られた直線が構成する交点の位置からロボットの進行方向を算出することを試みた。画像中の直線を抽出する方法にはハフ変換という方法があり、本研究ではこれを使用している。 #ref(pic5.JPG,center,nolink) *''処理の手順'' [#u7083d58] 直線の抽出のための方法としてハフ変換を用いたのは上で述べたとおりだが、このハフ変換の前処理としてエッジ検出、細線化といった処理が必要となる。~ これらの処理の手順としては、以下のようになる。 +エッジ検出 +細線化 +ハフ変換による直線の抽出 +直線の交点の検出 1.エッジ検出~ ハフ変換を行うための前処理として、まずは画像のエッジを検出する必要がある。~ ソーベルオペレータを用いて各画素の微分値を計算し、値の高い画素をエッジ部分とみなす。本研究では、画像の明るさによらない結果を得たいという考えから、微分値の高い順に一定量の画素をエッジ部分であるとみなすことにしている。 #ref(data1.JPG,center,wrap,nolink) 例えば、上の画像に対してエッジ検出を行うと、下のような結果が得られる。 #ref(data2.JPG,center,wrap,nolink) 2.細線化~ 得られたエッジは太さをもつため、幅が1の線になるように削る必要がある。~ よってエッジ画像をラスタ走査し、細線化を行う。~ さきほどのエッジ画像に細線化を行うと、下のような結果が得られる。 #ref(data3.JPG,center,wrap,nolink) 3.ハフ変換による直線の抽出~ 細線化された画像をハフ変換し、画像の直線部分を抽出する。~ さきほどの細線化画像にハフ変換を施すと、下のような直線抽出結果が得られる。 #ref(data4.JPG,center,wrap,nolink) また、これをもとの画像に重ね描きしてみると、下のような結果が得られる。 #ref(data5.JPG,center,wrap,nolink) 4.直線の交点の検出~ 抽出された直線が最も多く交差する点を検出する。~ 上の直線抽出結果を探索し、交点を検出すると、下のような結果が得られる。 #ref(data6.JPG,center,wrap,nolink) またここでは誤認を減らす狙いから、縦の交点探索範囲を限定している。画像中央を横に走る2本の直線が探索範囲を示している。 *''結果と今後の課題'' [#yd6390a4] 以上の処理を目的の場所の画像に試してみたところ、大体の場所で下のように交点を検出できた。~ -道路横~ #ref(data7.JPG,center,wrap,nolink) -結果~ #ref(data9.JPG,center,wrap,nolink) -池横~ #ref(data8.JPG,center,wrap,nolink) -結果~ #ref(data10.JPG,center,wrap,nolink) しかし、エッジの検出がうまくいかない場合もあり、その場合は安定性が下がるため、プログラムのさらなる改良をはかること、十分な走行実験を行うことが、今後の課題となる。