tag:blogger.com,1999:blog-7409489480223395562024-03-19T13:31:18.602+09:00日常というシステムUnknownnoreply@blogger.comBlogger17125tag:blogger.com,1999:blog-740948948022339556.post-33689349733879581612018-01-07T21:26:00.003+09:002018-01-20T15:38:25.649+09:00L*a*b*色空間+SVMによる歩行者信号色の抽出つくばチャレンジ2017に向けて検討していた歩行者用信号色の解析および抽出について紹介.<br />
色については上記大会にあたり少し調べた程度の理解度なので,間違い等あると指摘いただけるとありがたいです...<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAt93tSd-U8P6H4g-TMyvwG54EVkPctz8hbrlp5en2HgHEEXNAW9dvOCxGe0IOUDkZkhqBUs9_7l7B6Vk8LkI2NnAgCQrxEiTIL2RGGfxbfao8lMcCUse9YFoEm3krrVRqwMHwXunkB8nE/s1600/sample_blue_svm_classifier.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="266" data-original-width="398" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAt93tSd-U8P6H4g-TMyvwG54EVkPctz8hbrlp5en2HgHEEXNAW9dvOCxGe0IOUDkZkhqBUs9_7l7B6Vk8LkI2NnAgCQrxEiTIL2RGGfxbfao8lMcCUse9YFoEm3krrVRqwMHwXunkB8nE/s320/sample_blue_svm_classifier.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td class="tr-caption" style="font-size: 12.8px;">SVMによる分類結果(青信号)</td></tr>
</tbody></table>
</td></tr>
</tbody></table>
<h4>
<br />まとめ</h4>
<br />
<ul>
<li>CIE L*a*b*色空間で歩行者信号の色の分布を分析</li>
<li>SVMを用いて識別器を構築,テスト画像にて信号色の抽出能力を確認</li>
</ul>
<br />
<br />
<br />
<a name='more'></a><br />
<br />
<h4>
背景・目的</h4>
<br />
つくばチャレンジ2017の課題で横断歩道の走行があり,そのために信号の判定が必要であった.<br />
その信号の判定のためには,簡単には信号色を画像から色で識別する方法が考えられる.<br />
そこで,<u>各ピクセルが「信号色(赤・青)」に属しているか判定する方法</u>を検討した.<br />
<br class="Apple-interchange-newline" />
なお,他にSSDやYoLoなどディープラーニング手法で信号検出から信号色判定まで一気に行う手も考えられるが,SSDを探索対象検出という別の目的で使用していたため,チームの技術の幅を広げる意味合いもあり,色識別を選択した.(全体システムは<a href="http://sysday.blogspot.jp/2017/11/2017.html">過去の記事</a>参照)<br />
<br />
<br />
<h4>
特徴の分析</h4>
<br />
当然ながら,極力誤判定を避けるべきで,そのためには他の背景とは異なる信号色の特徴を見つける必要がある.そこで,まずは以下の画像をサンプルとして分析を行った.画像はつくばチャレンジ2017のコースにおける信号の一つである.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqXqCn0TDy3SRoY3JAyCcwKxRXEUNjNFpg3G8zvqgp1FYM0QGY-5c5uAzgvB_J3eLs66hxpHAKGD9ae9h_YRUHB6YTMDr79kPXzpvCp56Fb2ablM1Voz7_yreseOPHjJvmOr3oyFXcA5kG/s1600/sample_blue.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="480" data-original-width="640" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqXqCn0TDy3SRoY3JAyCcwKxRXEUNjNFpg3G8zvqgp1FYM0QGY-5c5uAzgvB_J3eLs66hxpHAKGD9ae9h_YRUHB6YTMDr79kPXzpvCp56Fb2ablM1Voz7_yreseOPHjJvmOr3oyFXcA5kG/s320/sample_blue.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">サンプル画像(歩行者信号青)</td></tr>
</tbody></table>
青信号らしき部分を抽出すると,以下の画像になる.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCksQNNLzH6Y0x-9QyE64zDV38KnKXy9PtKO_yAPpnKqDkhe8e1jB0PlI_oMgzZ0GlwtDU26eZ_b8lOHIQyil4wJ0xyWs-qIc84YDG7KwV8-DXsfBq57r2lZwxbZaboL9KGxoH1nyrnnp4/s1600/sample_blue_extracted.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="252" data-original-width="221" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCksQNNLzH6Y0x-9QyE64zDV38KnKXy9PtKO_yAPpnKqDkhe8e1jB0PlI_oMgzZ0GlwtDU26eZ_b8lOHIQyil4wJ0xyWs-qIc84YDG7KwV8-DXsfBq57r2lZwxbZaboL9KGxoH1nyrnnp4/s200/sample_blue_extracted.png" width="175" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">抽出した青信号</td></tr>
</tbody></table>
サンプル画像の各ピクセル値(RGB)をL*a*b*色空間に変換し,a*-b*平面上にプロットした.L*a*b*を用いたこと,そしてL*を除外してa*-b*平面にプロットした理由は,環境で変化し得る明るさの影響を避けたかったからである.HSV色空間でも同様の処理ができる可能性があるが,L*a*b*を選んだ理由は,HSVのHue値が0〜360度で循環するため扱いにくくなることを懸念したためである.<br />
ちなみに,歩行者信号もフレームごとで見ると一定周期で明るくなったり暗くなったりと明滅を繰り返している.(おそらく交流電源の影響)<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0y0j7LJxZTr4LD42WNEjCngyzvYuYawVaWCKNMo58R2XRW190G5iXWE8bENXoHXWJ6R7YrYpN7IjRvCRDQlUp6PtNDqLJD6LX2rBYD-zkmOaOtvGfaio9kO8TcwBYL6Me3hZRjO9t34Mj/s1600/sample_lab_scatter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="266" data-original-width="392" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0y0j7LJxZTr4LD42WNEjCngyzvYuYawVaWCKNMo58R2XRW190G5iXWE8bENXoHXWJ6R7YrYpN7IjRvCRDQlUp6PtNDqLJD6LX2rBYD-zkmOaOtvGfaio9kO8TcwBYL6Me3hZRjO9t34Mj/s320/sample_lab_scatter.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">a*-b*平面における背景・信号色の分布</td></tr>
</tbody></table>
<br />
プロットした結果は,意外と他の背景と比較してみると偏った特徴的な分布を持っていることがわかる.ただ,例えば水たまりに反射した信号など,どうしても実際の信号以外にも同じ色を持つものは存在しうる.そのため,ある程度の誤判定は許容せざるを得なく,そうすると線形識別でも十分な分類ができるようにみえた.そのため,線形識別器を適用して信号色か否かを分類してみることにした.<br />
<br />
<br />
<h4>
識別器の適用</h4>
<br />
線形識別ということで,Support Vector Machine (SVM) を用いて分類を行った.<br />
分析結果よりターゲットの信号以外にも同色を発光している部分があること,そして信号領域の中にも他背景と近い色を持つ部分があることがわかっている.<br />
今回はそのことを踏まえ,scikit-learnのSVCを用い,ペナルティパラメタC値を調整して識別器の学習を行った.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcO3GulL8BOVhng-TtgIJeehZWrnXJrF5VMLdI1xACygZXeMU9PwpDpuDXP843j0x3wxa6zmii5gcclkrnrmSjigNGTr0Yy0HxM8VXLNBXvWwGTrsqTonTM10QyT08Oe5yHJoJc5mmmdK/s1600/sample_blue_svm_classifier.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="266" data-original-width="398" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcO3GulL8BOVhng-TtgIJeehZWrnXJrF5VMLdI1xACygZXeMU9PwpDpuDXP843j0x3wxa6zmii5gcclkrnrmSjigNGTr0Yy0HxM8VXLNBXvWwGTrsqTonTM10QyT08Oe5yHJoJc5mmmdK/s320/sample_blue_svm_classifier.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">SVMによる分類結果(青信号)</td></tr>
</tbody></table>
<br />
<br />
<h4>
テスト</h4>
<br />
テストには以下の画像を使用した.つくばチャレンジ2017のコースに存在するもうひとつの歩行者信号である.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK1jlhLw-cRQ1EKSThyF-nU5T4sty-Ggq8xTwhR3BS50tLqNTDsgg0xqgyaHMVB0W4k1wabejWBY5_TWcwXOvV7jxkz8wnd-zD_Zdk09gkuOtpqGsXm623ehBf6kZiZYQ7_FqjpKvVo_17/s1600/test_blue.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="480" data-original-width="640" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK1jlhLw-cRQ1EKSThyF-nU5T4sty-Ggq8xTwhR3BS50tLqNTDsgg0xqgyaHMVB0W4k1wabejWBY5_TWcwXOvV7jxkz8wnd-zD_Zdk09gkuOtpqGsXm623ehBf6kZiZYQ7_FqjpKvVo_17/s320/test_blue.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">テスト画像</td></tr>
</tbody></table>
<br />
これに対して上で準備した識別器を適用すると,以下のような結果が得られる.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGeMHN968kaa9iwAbneAh087MCyCKnv8VoSd3fmZV4e10n9KPni8EKzNrBQygs8Vwm0Q2cXegye1Bjh4XvT9I7Jwd2Q4nmdmfHCD64hR206WF8aJ_hYKulBERJ2jdfdqjejnwk4lL5Mv0b/s1600/test_blue_classified_scatter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="252" data-original-width="378" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGeMHN968kaa9iwAbneAh087MCyCKnv8VoSd3fmZV4e10n9KPni8EKzNrBQygs8Vwm0Q2cXegye1Bjh4XvT9I7Jwd2Q4nmdmfHCD64hR206WF8aJ_hYKulBERJ2jdfdqjejnwk4lL5Mv0b/s320/test_blue_classified_scatter.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">テスト画像の各ピクセルに対する分類結果</td></tr>
</tbody></table>
<br />
実際に画像に適用してみると,狙い通り概ね歩行者信号のみが抽出出来ていることが分かる.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiONiqZ2K5Pce6CnVS2Qpd2CofKoPHmSCmakugtLj31PsxGaR4p7A3QCyrL1tgcG9QwYUdUENGFwSB7qVLAIup-AfE27KW_uUOx47b4bJVjJna3lJ4dRFYhMzMa7CLGW78YIMqOTsL7OYub/s1600/test_filtered.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="480" data-original-width="640" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiONiqZ2K5Pce6CnVS2Qpd2CofKoPHmSCmakugtLj31PsxGaR4p7A3QCyrL1tgcG9QwYUdUENGFwSB7qVLAIup-AfE27KW_uUOx47b4bJVjJna3lJ4dRFYhMzMa7CLGW78YIMqOTsL7OYub/s320/test_filtered.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">識別器(青)を用いてテスト画像から信号色(青)を抽出した結果</td></tr>
</tbody></table>
<br />
<br />
<h4>
ロボットへの実装について</h4>
「ピクセルごとの色の判定」に限ればつくばチャレンジの課題を達成するうえでは十分な性能を有していると思う.<br />
ただし,当然ながら信号色を判定するにはシステムとして誤判定をなくす必要がある.<br />
<br />
今回は画像全体に対して適用したが,対象の信号以外の物,例えば車両信号の赤色や青色も抽出されてしまう.そのため,実際には信号の位置の検出を先に行い,その領域内のピクセルに対してこの色識別器をかける形にするのが一般的かと思う.<br />
<br />
実際,我々のチームでは信号位置が既知であったため,概ね信号が映るはずの画像領域を切り出してから判定するシステムを組んでいた.<br />
<br />
また,自動車などの通過によるオクルージョンや信号の明滅にも対応し,間違っても赤信号を青信号と誤判定して進むようなことがないようにシステムを組む必要がある.これらは,例えば,数フレームの判定結果から最終判断したり,ベイズフィルタを組んで確率的に判定する方法が考えられる.<br />
<br />
<br />
<h4>
所感</h4>
<br />
正直,思ったより信号色が特徴的で,きれいに分類できているようで驚いた.<br />
実際,定量的評価はできていないが,晴天時も含めて過去に実機で取得したカメラログを流してみたところ,ほぼ信号色以外は正しくフィルタリングされているように見えた.<br />
<br />
上にも書いたとおり,ディープラーニング手法での認識も可能で,そちらの方が現状盛り上がってる感があるが,計算コスト的にはシンプルに色で判定するほうが有利なはずで,使うべき手法を検討価値はまだあるかなと思う.<br />
(探索対象検出の方では深く考えずにディープラーニングを使うことを選んだが...)<br />
<br />
<br />
<h4>
参考: その他テスト結果</h4>
<br />
赤信号の識別器も青信号同様にほぼ狙い通りの抽出結果<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2tFgsCtMmrU7ezgjXD-MEy413Nmd7avF0ubiME8oZtbpqslSXT7Mg24BHS8dBMPjRl9DVBvPYEyXS1kEPAMbOKC10swfeplU5Kzl8e7_Vj-wUBL6E09Od2WjQaSqlUyRonjaG-3QojeCU/s1600/sample_red_svm_classifier.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="266" data-original-width="398" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2tFgsCtMmrU7ezgjXD-MEy413Nmd7avF0ubiME8oZtbpqslSXT7Mg24BHS8dBMPjRl9DVBvPYEyXS1kEPAMbOKC10swfeplU5Kzl8e7_Vj-wUBL6E09Od2WjQaSqlUyRonjaG-3QojeCU/s320/sample_red_svm_classifier.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">SVMによる分類結果(赤信号)</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_DDungSy5TYdBspcQ2ASkH1K40xkT3fDELqWHQJ17B9i68KD2I7_IcuTKypuYKZRZSmD9MfQscB9dkHXKuE-z5rEtultjCBQU-Rf6svEq9lDPrO4mkNo6vSCG1K_x736shOFNW0dgkfdP/s1600/test_red_classifier_red.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="480" data-original-width="1280" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_DDungSy5TYdBspcQ2ASkH1K40xkT3fDELqWHQJ17B9i68KD2I7_IcuTKypuYKZRZSmD9MfQscB9dkHXKuE-z5rEtultjCBQU-Rf6svEq9lDPrO4mkNo6vSCG1K_x736shOFNW0dgkfdP/s400/test_red_classifier_red.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">テスト画像(歩行者信号・赤)に識別器(赤)を適用した結果</td></tr>
</tbody></table>
歩行者信号が青,つまり自動車信号が赤のときに,赤信号の識別器を通すと自動車用信号の赤色が抽出される.また,自動車信号が青のときに,青信号の識別器を通した場合も同様.<br />
<div>
画像全体から色のみで判定するだけでは,システムとして不十分なことが分かる.<br />
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcBr9C7JF4lCg35BozOFloQx_P9X7sl9pMA73HtWptgosvwE7Afqg7ZHNKZpPy766_6ZEZIk1ClqrTGFHlJSzV3kdyRIVdaBfNhGZvq_qQs4nsB0OEasctKUhxTvEOfDF7FymKPVkx7345/s1600/test_blue_classifier_red.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="480" data-original-width="1280" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcBr9C7JF4lCg35BozOFloQx_P9X7sl9pMA73HtWptgosvwE7Afqg7ZHNKZpPy766_6ZEZIk1ClqrTGFHlJSzV3kdyRIVdaBfNhGZvq_qQs4nsB0OEasctKUhxTvEOfDF7FymKPVkx7345/s400/test_blue_classifier_red.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">テスト画像(歩行者信号・青)に識別器(赤)を適用した結果</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg57YY53ieT6QblbQ7VlFay6YXioilhW6oHRFAnikWJBMFEOxWyHdimLlr8BpdPHHvVW7K1cDq4HsfwDjuWRelu550MuBZj9dSBeg-67gtKmdVo1AU3dX6X5NOQ4_kit2xWbvGW8pR5eFf/s1600/test_red_classifier_blue.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="480" data-original-width="1280" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg57YY53ieT6QblbQ7VlFay6YXioilhW6oHRFAnikWJBMFEOxWyHdimLlr8BpdPHHvVW7K1cDq4HsfwDjuWRelu550MuBZj9dSBeg-67gtKmdVo1AU3dX6X5NOQ4_kit2xWbvGW8pR5eFf/s400/test_red_classifier_blue.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">テスト画像(歩行者信号・赤)に識別器(青)を適用した結果</td></tr>
</tbody></table>
<br />
<br /></div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-29633821556485090402017-12-27T12:56:00.002+09:002017-12-27T13:06:46.909+09:00MBZIRC 20172017年中にまとめておきたく,2017年3月に開催され,競技者として出場してきたMBZIRCへの取り組みを書いてみました.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqsfKCj87g_FccZ5H2zSKew9b-7OHS9_EFZkdNv3OKuYEIHcEX6hHkWtrKFNq5tJL04c-Vrv-zN9_Js6jzutr_U8VG2H8BjHCaHSVqk804qSGmo_oZag7v5UnYIuAZYcY74Ikjz9iPGSAt/s1600/%25E3%2580%2580drone_test_at_Fujigawa.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1064" data-original-width="1600" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqsfKCj87g_FccZ5H2zSKew9b-7OHS9_EFZkdNv3OKuYEIHcEX6hHkWtrKFNq5tJL04c-Vrv-zN9_Js6jzutr_U8VG2H8BjHCaHSVqk804qSGmo_oZag7v5UnYIuAZYcY74Ikjz9iPGSAt/s400/%25E3%2580%2580drone_test_at_Fujigawa.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Second Progress Reportに向けた試験飛行 (富士川にて)</td></tr>
</tbody></table>
<br />
<h3>
まとめ</h3>
<ul>
<li>MBZIRC2017 Challenge 1に参加</li>
<li>UAV初挑戦のためなるべくシンプルに機体・システムを開発</li>
<li>本番では結果を出せず技術的にも運営的にも反省点多数だが勉強にもなった</li>
</ul>
<ul></ul>
<div>
<br />
<a name='more'></a><br /></div>
<h3>
MBZIRC2017</h3>
<div>
<a href="https://www.mbzirc.com/">Mohamed Bin Zayed International Robotics Challenge (MBZIRC2017)</a> というアブダビ(UAE)で開かれたロボット大会に <a href="http://www.capygs.org/">Project C.G.S</a> として参加.<br />
チャレンジは4つに別れており,大まかな内容は以下. (詳細は<a href="https://www.mbzirc.com/challenge/2017">公式HP</a>参照)</div>
<ul>
<li>Challenge 1<br />UAV1台を使用し,フィールドトラック上を走る車両に取り付けられた着陸地点に着陸.</li>
<li>Challenge 2<br />UGV1台を使用し,フィールド上のバルブ軸付きパネルを探し,適切なツールでバルブ操作.</li>
<li>Challenge 3<br />UAV最大3台を使用し,フィールドに置かれたオブジェクトを指定された場所に運搬.</li>
<li>Grand Challenge<br />上記1〜3を同時に行う</li>
</ul>
<h3>
</h3>
<div>
この中で,我々は本大会にてChallenge 1に参加.<br />
<br />
<div>
<h3>
チームについて</h3>
</div>
<div>
我々 <a href="http://www.capygs.org/">Project C.G.S</a> はWMMCのOBで構成される社会人ロボットサークルで10名が所属している.バックグラウンドはつくばチャレンジ,マイクロマウス,NHK大学ロボコンなどの自律移動系の地上ロボット中心で,UAV/飛行ロボットは初挑戦であった.今回,MBZIRC2017に対しては主要開発が3名+連絡・輸送担当1名+実験・開発サポート3名で活動した.</div>
<br /></div>
<h3>
チーム目標の設定</h3>
<div>
参加登録時点では,審査が通ればスポンサから資金援助ということもあり全チャレンジ参加,自律動作での課題達成を目標に参加登録を行った.<br />
審査の結果はスポンサ枠なしでの通過となり,また開発工数の都合によりChallenge 2 & 4を途中で断念.その後,First Progress Reportの結果によりChallenge 3が落選となった.<br />
2016/8以降は上記結果より,<u>Challenge 1の自律動作での課題達成</u>に目標を絞り活動した.<br />
<br /></div>
<h3>
</h3>
<h3>
大会までの流れ</h3>
<div>
<u>公式Timeline (実績ベース)</u></div>
<ul>
<li>2015-06 Call for Intension to Participate</li>
<li>2015-11 Call for Prososals (Chal. 1 ~ 4で登録)</li>
<li>2015-12 Selection of Teams (スポンサなし枠で通過)</li>
<li>2016-01 Confirmation to Participation</li>
<li>2016-07-31 First Progress Report (Chal.1, Chal.3で登録)</li>
<li>2016-08 First Progress Report Judge (Chal.1通過, Chal.3落選)</li>
<li>2016-11-30 Second Progress Report</li>
<li>2016-12-15 Second Progress Report Judge (通過)</li>
<li>2017-03-16 MBZIRC 2017</li>
</ul>
<br />
<ul>
</ul>
<u>First Progress Report (July 31th, 2016)</u><br />
<u><br /></u>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/hmKfSImbnSM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/hmKfSImbnSM?feature=player_embedded" width="320"></iframe></div>
UAVのChal.1 & 3に絞りレポート・動画を作成.審査の結果,Chal.1のみ通過.この時点ではマニュアルでの飛行(Chal. 3用機体)および,PIDによる位置制御を利用しての指定位置への機体移動程度が自律でできている.<br />
<br />
<u>Second Progress Report (Nov. 30th, 2016)</u><br />
<u><br /></u>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/XV_zzdhtCdM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/XV_zzdhtCdM?feature=player_embedded" width="320"></iframe></div>
この時点で,ソフトの要素レベルでは課題の達成に必要な項目が一応出揃っており,シミュレータ上では離陸から探索,目標への着陸まで一連の動作ができている.着陸目標の認識・位置同定もシミュレートできていないものの実機では動作確認できている.一方,機体の誘導は前回レポートから大した進展がなく位置制御に頼っておりぎこちなさがある.また,着陸時に台座の鉄板に機体を固定するための電磁アンカもまだ実装できていない.<br />
<br />
<u>MBZIRC2017</u><br />
<u><br /></u>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii_FxZH3K_SMgcA7Y3e7ntWG049lMhcdvfrg7vxcaAS3J8RjvVHmOXM4Atf4i4JM1HPxnnlAfS-wqFpgYde6xgk8lmjEq8eTQXc6jSKMQ3gGrN4an4Ycj_0yGlPCAZeK-xc689qexd0Q-I/s1600/mbzirc2017_rehearsal.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="348" data-original-width="638" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii_FxZH3K_SMgcA7Y3e7ntWG049lMhcdvfrg7vxcaAS3J8RjvVHmOXM4Atf4i4JM1HPxnnlAfS-wqFpgYde6xgk8lmjEq8eTQXc6jSKMQ3gGrN4an4Ycj_0yGlPCAZeK-xc689qexd0Q-I/s400/mbzirc2017_rehearsal.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">現地リハーサルの様子</td></tr>
</tbody></table>
<u><br /></u>
2017年に入ってからも本番直前まで開発を進め,誘導や目標追跡アルゴリズムの更新や実機でのシステム調整などを行い本番用の機体・システムとした.<br />
本番近くの動画はいつか追加したいが現状準備出来ておらず...<br />
<br />
私自身は仕事の都合で2017年1月にフィリピンに赴任し,VISA申請の都合で現地入りできず泣く泣く現地入りを諦め,遠隔でのサポートに回った.(フィリピンVISA申請中はフィリピン外に出れず,また3ヶ月程度要す)<br />
一方で,現地ではなく開発環境の整った自宅からサポートをしたことの利点もあった.移動やセットアップなどの現地のドタバタ感に影響されず,届くデータの解析・プログラムへの反映に集中できた.もちろん,現場感が分からない・リアルタイムな判断ができないデメリットもあるので離れすぎは良くないが,全体目線としては比較的冷静な判断も行えたと思う.<br />
<br />
<h3>
開発したドローン</h3>
<div>
<u>機体・ハードウェア</u><br />
<u><br /></u></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5SEtnXzFR2iFZBbMOL9e6N3CRBvBTt8gB8fwQa38RNwMQpRxR2YK2QRRvv6tiitBsGefGgaDSyoGCxIyF3LbyHlAzCEkDpdocfh07voM2gM3EAPchdfVJ2-zEZ2Ei1wJX4HG8DXUHNRY7/s1600/uav_type1.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5SEtnXzFR2iFZBbMOL9e6N3CRBvBTt8gB8fwQa38RNwMQpRxR2YK2QRRvv6tiitBsGefGgaDSyoGCxIyF3LbyHlAzCEkDpdocfh07voM2gM3EAPchdfVJ2-zEZ2Ei1wJX4HG8DXUHNRY7/s320/uav_type1.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ドローン外観</td></tr>
</tbody></table>
<div>
チャレンジ時間が20分であったことから,航続時間20分かつ必要な装備を搭載できるように機体設計をした.(後述するが,この要件設定にミスがあるのだが...)</div>
<div>
比較的大きいプロペラを使い航続時間を伸ばしている分,機動性が犠牲となっており風に揺られやすく急な運動変化に対する応答性が悪いというデメリットがある.</div>
<div>
<br /></div>
<div>
機体中央部の銀色はアルミホイルでこれはノイズ対策である.カメラがアクティブになりUSB3.0の通信が開始されると,GPS信号がとれなくなる問題への対応である.</div>
<div>
<br />
参考までに,大まかなフレーム・アクチュエータ・センサ構成は以下です.ノウハウがないため,壊れること前提でなるべく安価かつ入手性の良い部品を選定.<br />
<br /></div>
<table border="2">
<tbody>
<tr>
<td>Type</td>
<td>Model</td>
</tr>
<tr>
<td>Drone Frame</td>
<td>Bumblebee Carbon Fiber Quadcopter Frame 550mm</td>
</tr>
<tr>
<td>Battery</td>
<td>Multistar LiHV 5200mAh 3S 10C (x2 in parallel)</td>
</tr>
<tr>
<td>Motor</td>
<td>Sunnysky v2216 kv800</td>
</tr>
<tr>
<td>Propeller</td>
<td>ATG1238</td>
</tr>
<tr>
<td>Companion Computer</td>
<td>Odroid XU4 w/Lubuntu 16.04</td>
</tr>
<tr>
<td>Flight Control Unit</td>
<td>Pixhawk w/PX4 Flight Stack v.1.4.4</td>
</tr>
<tr>
<td>ESC</td>
<td>ARRIS SIMONK 30A 2-6S OPTO</td>
</tr>
<tr>
<td>Camera</td>
<td>oCam</td>
</tr>
<tr>
<td>GPS</td>
<td>Ublox Neo-M8N GPS w/Compass</td>
</tr>
<tr>
<td>Alt. Range Sensor</td>
<td>LiDAR Lite v.3</td>
</tr>
<tr>
<td>Electromagnetic Anchor</td>
<td>Self-making w/ZYE1-P20/15</td>
</tr>
</tbody></table>
<div>
<br /></div>
<div>
<u>システム・ソフトウェア</u></div>
<div>
<br /></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvAPI2y4HWzecRE2EFxfAMj0fTByT3LoJ4wGdwnZX2pMWf0sxj-pX-OG_RDGw3D0O4feZnz7Q8sb_UWfwgsEuGt78dmmTR2wJohxB-BjANsopRjdH9qM1sc9LPp9pg9n85CUI1KLCiVtzr/s1600/mbzirc_chal1_system.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="540" data-original-width="960" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvAPI2y4HWzecRE2EFxfAMj0fTByT3LoJ4wGdwnZX2pMWf0sxj-pX-OG_RDGw3D0O4feZnz7Q8sb_UWfwgsEuGt78dmmTR2wJohxB-BjANsopRjdH9qM1sc9LPp9pg9n85CUI1KLCiVtzr/s400/mbzirc_chal1_system.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">MBZIRC Chal.1 システム構成</td></tr>
</tbody></table>
UAV未経験ゆえ,シンプルに課題達成に必要最小限のシステムを構成を目指して開発した.グローバルな位置推定や機体の姿勢・速度制御はFCU/PX4に任せ,認識やドローンの移動に関するモジュールを独自開発した.なお,独自開発モジュール群についてはROSを使用しPX4との通信はmavrosを用いた.<br />
着陸目標はHOG特徴量のAdaBoostによる識別器を使用しカメラで取得した画像から検出した後,地表から1mの高さにあることを前提に画像座標系からマップ座標系に変換を行う.機体の誘導は水平方向は指定軌道に対してPure Pursuitでの追従を,高度はP制御により指定高度に維持している.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLZUxdnNC1gpjVqv-JSM_sv8vlJ6Y2EPNmOqBCFd-brikk5Zl5pO7AX47aN7DMiiZGOWXO-RjXAYprIMqAzMFDYlxOBbJ19tUBpPIw6asbqueckQCiKaYQW9fRCtI0fnJ8LG3apDSF5DsE/s1600/mbzirc_chal1_mission_statemachine.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="540" data-original-width="960" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLZUxdnNC1gpjVqv-JSM_sv8vlJ6Y2EPNmOqBCFd-brikk5Zl5pO7AX47aN7DMiiZGOWXO-RjXAYprIMqAzMFDYlxOBbJ19tUBpPIw6asbqueckQCiKaYQW9fRCtI0fnJ8LG3apDSF5DsE/s400/mbzirc_chal1_mission_statemachine.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">チャレンジ1 システム状態遷移図</td></tr>
</tbody></table>
<div>
チャレンジにおける機体システムの状態遷移は上の図のとおりである.スタート待ち (Ready) から,スタート信号でArmし離陸 (Take Off).探索高度まで上昇したところで (Climbing) ,高度維持をONにしてトラックを巡回探索 (Exploration).着陸地点を見つけたら追跡しながら高度を下げ (Tracking),ある程度着陸地点に近づいたら電磁アンカをONにして着陸 (Landing),着陸次第Disarmする (Stopped).</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br />
<h3>
大会結果</h3>
<div>
結果は<a href="http://www.mbzirc.com/scoreboard/challenge1#viewscore">スコアなし</a>.<br />
一回目のトライ中,着陸目標を認識して追跡を開始した後にフィールドに発生した上昇気流に流されフィールドの外に.結局フィールドに戻して着陸させることができずにマニュアル操作により川へ落とし機体をロスト,二回目のトライはできず.技術力不足・経験不足が招いた結果となった.<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<br />
<h3 style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
所感・反省</h3>
</div>
<div>
正直かなりしんどかったが,その分面白かった.反省点は細かなものを含めるとかなりの数があるが,以下に個人的に重要と思っているものを挙げる.技術的というよりは,開発・運営面中心で.</div>
<div>
<ul>
<li>社会人でも新しいことにチャレンジできる<br />個人としてはやる気と時間のやり繰り.チームとしては,各人の可能な範囲での参加.基本的にメンバには恵まれた.</li>
<li>ドローン実験の難しさ・不慣れ<br />「ドローンを飛ばす場所」を探すことがそもそも難しかった.着陸目標のダミーを広げられる空間,そして安全が確保できる飛行場が必要だった.そして,当然ながらドローンをマニュアルで操縦できる人の参加が必要.あと旅費...</li>
<li>「ロボット大会慣れ」の弊害<br />チームが経験してきたロボット大会において,「バッテリ交換可能」という大会がなく,その可能性を検討することなく航続時間優先に機体を設計してした.一方現地を見ると機動性が高い機体が多く,途中でのバッテリ交換,またリスタートやマニュアル操縦への切り替えるチームも多くいたように思える.思い込みにより選択肢を自ら狭めてしまっていた.思い込み禁物.</li>
<li>システム動作の理解者不足<br />現地組にシステム動作を理解している人が一名しかいなく負担が集中していた.結果として本番のイレギュラ動作時の判断が遅れた可能性がある.最低限の動きは全員知っておくべきであった.なお,そもそもの経験値の差もあると思うが,我々の直後にトライしたチームも上昇気流に流されていたが,判断が早くフィールド外に流れる前に機体を落とせていた.</li>
</ul>
<br /></div>
<h3>
今後について</h3>
</div>
<div>
開発体制を整え,技術力を伸ばしてぜひとも次回大会にも参加したい.(もう3人は主開発増やせそう)<br />
技術開発は当然として,運用体制としてマニュアルでのドローン操縦者,そしてシステム動作を理解する人を増やす.そして,フェールに対する備えもしっかり行ったうえで,次回大会でも本戦に出場し,そして次こそトップでの課題達成を狙いたい.(目標はあくまで野心的に)</div>
<div>
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-83365728108844425372017-11-29T08:47:00.000+09:002017-11-29T08:47:07.644+09:00つくばチャレンジ2017思い立ったので2011年以来,6年ぶりに更新.<br />
ブログの更新は止まっていましたが,2013年以降は<a href="http://www.capygs.org/">Project C.G.S</a>という社会人サークルを作って<a href="http://www.tsukubachallenge.jp/">つくばチャレンジ</a>や<a href="https://www.mbzirc.com/">MBZIRC</a>に参加しています.<br />
<br />
今年も例年通り,つくばチャレンジに参加してきました.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Z623G0Lre3BDlFICxVbdNpZxSn-MdQKZ-SB1NTHWKJ4e_VxO0rLWqm_whzEOqvlCPlUOl6nBhYqnGpbmMXdEGvKebgOrQJhzLzUbxo8HRbiaUqDLXJ_SjLSKvjmERWjkXghCCvxehZzr/s1600/DSC_1418.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="900" data-original-width="1600" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Z623G0Lre3BDlFICxVbdNpZxSn-MdQKZ-SB1NTHWKJ4e_VxO0rLWqm_whzEOqvlCPlUOl6nBhYqnGpbmMXdEGvKebgOrQJhzLzUbxo8HRbiaUqDLXJ_SjLSKvjmERWjkXghCCvxehZzr/s400/DSC_1418.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">探索対象発見へ向かう様子(大会本走行時)</td></tr>
</tbody></table>
<h3>
<br />まとめ</h3>
<ul>
<li>探索・信号課題のクリア,および積極的な障害物回避を課題にシステムを開発</li>
<li>Gazeboによるシミュレーションを開発に導入</li>
<li>本走行の結果は,走行距離 1,300m / 発見探索対象数 1人</li>
</ul>
<br />
<ul>
</ul>
<div>
<br />
<a name='more'></a><br /></div>
<h3>
つくばチャレンジ2017 課題</h3>
<div>
2013年からの第2ステージ共通して,「コースの自律走行」と「人の探索」の大きく2つのテーマがあり,それに基づき課題が設定されている.(<a href="http://www.tsukubachallenge.jp/tc2017/kadai">つくばチャレンジ2017課題</a>)</div>
<div>
<br /></div>
<ul>
<li>コースの自律走行<br />一般の歩行者がいる屋外・屋内そして横断歩道(信号も要自律判断)を含む全長2,000mのコースの自律走行.</li>
<li>人の探索<br />指定された探索エリア内に4名いる,特定の色の帽子・ベストを着用した人の探索および発見通知.<br />なお,探索対象付近には看板が置かれている.</li>
</ul>
<h3>
</h3>
<div>
<br /></div>
<h3>
チーム目標の設定</h3>
<div>
昨年は「確実なコース完走」を目標として,2,000mのコース(信号なし)を完走した.</div>
<div>
システムは,探索や信号にはトライせず障害物回避も必要最小限に留めるなど不確実性を極力排する方針で開発した.</div>
<div>
<br /></div>
<div>
今年は,「つくばチャレンジ課題達成」を目標として,システムの作り込み・完成度を高めるより,不安定でも新しい機能を積極的に導入する方針を定めた.</div>
<div>
具体的には,探索・対象発見,信号認識判断,そして積極的な障害物回避・追い越し.</div>
<h3>
</h3>
<h3>
</h3>
<h3>
システム</h3>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvN5eoif5McfD8sBLzKYYkKw7raFG3PSeOWrjqbNJxmw3yCjlpD-g3Li8zOATpxXNEZUAAi2vimJmf1MDgfCUKPJ6bLrTWuQ_egKi7Ea4zBMNqIP2rI7DLzutog_bb6RlrGv11-5LgM3__/s1600/cgs_system_17.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="1299" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvN5eoif5McfD8sBLzKYYkKw7raFG3PSeOWrjqbNJxmw3yCjlpD-g3Li8zOATpxXNEZUAAi2vimJmf1MDgfCUKPJ6bLrTWuQ_egKi7Ea4zBMNqIP2rI7DLzutog_bb6RlrGv11-5LgM3__/s400/cgs_system_17.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">2017年のシステム構成</td></tr>
</tbody></table>
<div style="margin-left: 1em; margin-right: 1em;">
</div>
<br />
<div>
<br />
昨年までの実績より,自己位置推定(青色)はつくばチャレンジで使われるエリアでは十分な精度で機能することが分かっていた.<br />
そのため,今年は目標達成のための機能として,探索対象認識&信号認識(緑色),課題のためのミッション管理(紫色),そして経路・軌道計画(黄色)の新規・更新開発を行った.<br />
以下,簡単な概要:<br />
<br />
<ul>
<li>自己位置・姿勢推定<br />Monte Carlo Localizer (MCL) [1] で実装.参考文献とは尤度関数の実装が異なり,事前に用意した3次元マップと走行中に生成した3次元シーンの最近傍点の位置関係を尤度に使用している.[2]</li>
<li>探索対象認識<br />Single Shot Multi-Box Detector (SSD) [3] にて画像から看板を検出し,上記3次元シーンと画像上の検出位置の対応付けにより,3次元上での探索対象の位置を同定する.<br />SSDの学習は,事前のテスト走行で取得した実画像に,明度を変えた水増し画像を加えて実施.</li>
<li>信号認識・判定<br />L*a*b*空間に変換を行い,a* - b*平面の位置から赤信号に該当するピクセル,青信号に該当するピクセル,その他に分類し,ピクセル数の関係から信号状態を判定する.<br />分離直線に用いるパラメタは事前に取得したログから算出した.</li>
<li>経路・軌道計画<br />ミッション管理から与えられた走行経路を障害物を回避しつつ追従する制御を生成する.実装では,自機位置からみて指定経路上5m先をサブゴールとして,Dynamic Window Approach (DWA) [4]で制御指令を生成した.コスト関数も原論文同様の実装をした.<br />後述するGazeboシミュレータで動作確認・大まかなパラメタ調整を行った上,実機で最終調整を実施.</li>
<li>ミッション管理<br />現在の状態を管理し,コース追従と探索の切り替え,発見動作,あるいは横断歩道モードの切り替えなど,機体が取るべきアクションの決定を行う.<br />これも単体テストに加え,システム動作の確認をGazeboシミュレータで確認した.</li>
</ul>
<h3 style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</h3>
<div>
<br /></div>
<h3 style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
シミュレーション</h3>
昨年までは事前に敷いた経路を正確に追従することが課題であり,システムでも自己位置推定・経路に沿う制御指令が出せているかの確認で,センサログによる動作確認で十分であった.一方,今年は探索やDWAでの障害物回避など,状態に応じた動作遷移・また指令に対する機体動作の確認が必要となった.<br />
現状,我々のチームは実機を走行させられる機会が公式試走会以外になく,実機テストの回数が限られる.そのため,今年はGazeboによるシミュレーションを導入し,機能の動作確認を行った.<br />
今年は特に経路・軌道計画モジュールおよびミッション管理モジュールの動作確認(上記システム図中の紫〜黄色のモジュール)を目的として,機体形状および水平LiDARをモデル化した.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqrWRJZeqDWPtoElvKxHzZIJw7FrgAK0bSseYBP2l5gIP9r3JWcoCncqB81ALs70TN0RtEMEdwBPNo8cYQhYouhIyr6CHuOMNymSACv54ETGVUGIv5vyPfIIJOSaOADfA1YhTeEhFSXe20/s1600/rwrc2017_gazebo_scene1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="722" data-original-width="994" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqrWRJZeqDWPtoElvKxHzZIJw7FrgAK0bSseYBP2l5gIP9r3JWcoCncqB81ALs70TN0RtEMEdwBPNo8cYQhYouhIyr6CHuOMNymSACv54ETGVUGIv5vyPfIIJOSaOADfA1YhTeEhFSXe20/s320/rwrc2017_gazebo_scene1.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">大清水公園出口付近(右折してスロープ)を模擬した環境</td></tr>
</tbody></table>
シミュレーションにより機能の動作・大まかなパラメタは実機テスト前に確認することができ,実機で狙い通りに動作させることができた.ただし,実機とのモデル誤差や今回シミュレータに反映できなかった動的障害物への対応が実機調整で必要となり,その点は課題が残る.<br />
<h3>
</h3>
<div>
<br /></div>
<h3>
大会結果</h3>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVMT-rDigTZr0LEWm6JrvGwLThNWY53iruK6f2ySX5Cip4HvAWkcCFk8ge6I0ZkKvIRBQh9Rc0KT84vHvnczDmru9JMWD0J2LI4uc8kTIHy9G8Vn5nOvEaCpJldsoIOZ-4Lr6aMF8mlJuP/s1600/Screenshot+from+2017-11-29+01-39-26.png" imageanchor="1" style="margin-left: auto; margin-right: auto; text-align: center;"><img border="0" data-original-height="503" data-original-width="693" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVMT-rDigTZr0LEWm6JrvGwLThNWY53iruK6f2ySX5Cip4HvAWkcCFk8ge6I0ZkKvIRBQh9Rc0KT84vHvnczDmru9JMWD0J2LI4uc8kTIHy9G8Vn5nOvEaCpJldsoIOZ-4Lr6aMF8mlJuP/s320/Screenshot+from+2017-11-29+01-39-26.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">本走行スタート待ちの様子</td></tr>
</tbody></table>
<div>
</div>
<ul>
<li>走行距離: 1,300 m </li>
<li>探索対象発見: 1 人 </li>
</ul>
結果としては課題達成に至らず,走行距離も前回より短くなった.<br />
ただし,昨年まではできなかった探索対象の発見や,テストでは信号判定に成功するなど,機能的には進歩があった.あとは手持ちの機能を作りこめば,課題達成は狙えると考える.(実際はここからがまた大変ではあるのだが...)<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwKNgkWfivh3l6YtyJ-L0Nc7vQe74F4Khj3S_0cyJ_a5sxrqR-9iN9ZgNlKmSRTz29Aa_jJ9-f941RtrvSKTgmDyXo04GqL1WgzODwIlUe7M1wYQ6nPHOn8Fg56ySWVE6VbYfO4c3m-1mY/s1600/rwrc2017_target_detection_rviz.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="644" data-original-width="867" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwKNgkWfivh3l6YtyJ-L0Nc7vQe74F4Khj3S_0cyJ_a5sxrqR-9iN9ZgNlKmSRTz29Aa_jJ9-f941RtrvSKTgmDyXo04GqL1WgzODwIlUe7M1wYQ6nPHOn8Fg56ySWVE6VbYfO4c3m-1mY/s400/rwrc2017_target_detection_rviz.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ターゲット発見時のロボット認識データ (rvizで可視化)</td></tr>
</tbody></table>
走行に関しては,静的障害物は安定して回避.動的障害物に対しても停止・回避が働き衝突することはなかった.ただし,自分よりやや遅いロボットに対し,相手軌道が予測できておらず追い越しに失敗することが見られた.また,アグレッシブな回避・追い越しを試みることで,道幅いっぱいに左右に振れるなど,やや社会規範に欠ける動作が見られた.<br />
<br />
探索対象発見については,カメラのオートエクスポージャが狙いに反して空の明るさの影響を受け探索対象が暗く写ってしまった.結果,発見成功した対象の他に二人検出射程に入ったものの発見できなかった.<br />
<br />
1,300m地点で走行停止となったが,原因は建物の壁面を探索対象と誤認識.そこに経路生成のソフトバグが重なり露天の敷地に入り込みそうになり走行停止.<br />
<br />
壁の誤認識に関しては,SSDの学習時に使用したトレーニングセット,評価セットが妥当でなかった考えられる.この点に関しては,チームとして知見が不十分なため,今回の結果から分析を行い開発へのフィードバックが必要である.<br />
<br />
経路生成ミスについては本走行前に更新したコード,かつ手間を惜しんでテストをスキップした点が本番で発生した.よく言われることだが,手間を惜しんだところは本番で発生する.可能であるなら手間を惜しまずテストをすることが必要である.<br />
<h3>
</h3>
<div>
<br /></div>
<h3>
今後の課題</h3>
<div>
現実的なロボットに適用すべき技術課題として,</div>
<div>
<ul>
<li>探索対象の認識能力(Precise / Recall)の向上 </li>
<li>動的障害物の軌道を予測したうえで,必要最小限動作での回避・追い抜き</li>
</ul>
開発推進面では,<br />
<ul>
<li>より実機に近いモデル,そして動的障害物含めた様々なシミュレーション環境の充実</li>
<li>テストによるバグの低減(可能な限り自動化)</li>
</ul>
</div>
<div>
また,より将来的な観点では,ブルーシートを広げた露天のような,空間的には走行可能だが社会規範的には走行すべきでない場所の取り扱いである.現状人の手で走行禁止エリアとしているが,社会に溶け込む実用性を考えたらこうした規範面も課題となると感じた.</div>
<br />
<h4>
参考文献</h4>
<div>
[1] S. Thrun, W. Burgard, and D. Fox. : Probabilistic Robotics. MIT Press, Cambridge, MA, 2005.</div>
[2] Project C.G.S. : Project C.G.S.のつくばチャレンジ2016における取り組み,つくばチャレンジ2016 参加レポート集,2016.<br />
[3] Wei Liu, et al.: SSD: Single Shot MultiBox Detector, arXiv:1512.02325, 2015.<br />
[4] D Fox, W Burgard, S Thrun: The dynamic window approach to collision avoidance, Technical Report IAI-TR-95-13, University of Bonn, 1995.<br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-64073673170724083122011-12-30T00:42:00.000+09:002011-12-30T00:42:59.239+09:00つくばチャレンジ2011でのシステム構成2つ前が去年のシステム構成の紹介という信じられない状況ですが,今年のシステムの紹介を.今回はとりあえず概要について. <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCZZ0V7eGtXh73rChWdWem-dkQbDUGSalKT4NbUD9QouEzAwwJ4YjFa0olXs-WQY5fHoCIVQ0b8c6A-C9KKmtJPTS8pKia8mbvBzuS8fiuCiCuY-hQJTLyLQ-PwzdIsbeAK70shPzf6uY/s1600/swarc11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCZZ0V7eGtXh73rChWdWem-dkQbDUGSalKT4NbUD9QouEzAwwJ4YjFa0olXs-WQY5fHoCIVQ0b8c6A-C9KKmtJPTS8pKia8mbvBzuS8fiuCiCuY-hQJTLyLQ-PwzdIsbeAK70shPzf6uY/s320/swarc11.png" width="320" /></a></div><br />
<a name='more'></a><br />
<br />
モジュールについて簡単な紹介.<br />
<ul><li>GPS: GPSの計測値を出力.ただし,後処理のみでリアルタイムには利用していない </li>
<li>Encoders: エンコーダの計測値を速度・角速度に変換して出力 </li>
<li>IMU:3軸ジャイロ+3軸加速度+3軸地磁気を出力.今回はヨージャイロのみ使用</li>
<li>3D-LIDAR: 3次元スキャンを行い点群を出力</li>
<li>2D-LIDAR: 2次元スキャンを行い点群を出力</li>
<li>SceneBuilder: 速度と角速度から,点群の位置を移動してシーンを合成する</li>
<li>MapMatcher: 事前マップに走行時のシーンの位置あわせを行い,シーンの位置を推定する</li>
<li>Localizer: 最終的な自己位置・姿勢推定を行う</li>
<li>Navigator: Waypointに従い機体の誘導を行う</li>
<li>PathPlanner: 経路計画を行う(今回はWaypointのファイル管理を行う)</li>
</ul><br />
昨年のシステムから構成レベルでの大きな変更点はマップマッチング関係.<br />
マップマッチングは事前に持っている地図に走行時に得られたシーンの位置あわせを行うことで,地図上におけるシーンの位置・姿勢が分かるというもの.つまり,事前地図における絶対位置を示すセンサとして働きます.<br />
以前は初期位置からの相対姿勢でしたが今回は地図ベースの絶対位置を計測することができるので,初期姿勢や長距離走行時の誤差蓄積に影響されることなく,位置・姿勢は一定の誤差範囲内で推定することができます.その結果,マップが十分でマッチングが働く場合は1km程度でも走行できるようになりました.<br />
<br />
後はLocalizerモジュールに全部突っ込んで自己位置推定を行い,Navigatorモジュールで経路を辿るといった形で概ね前回と似たような感じになっています.<br />
主要なモジュールの詳細についてはそのうち別の記事にまとめます.たぶん.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-22296235864887512902011-12-29T01:07:00.001+09:002011-12-29T01:08:19.301+09:002011大会結果今年も大会シーズンが終わったのでまとめ.<br />
思えば,今年はどうやら2回しかブログの更新をしてなかったみたいです. <br />
存在自体すっかり忘れていたようなそうでもないような.<br />
<br />
つくばチャレンジ2011トライアル: 471m<br />
マイクロマウスクラシックエキスパート予選: 13秒743<br />
マイクロマウスクラシックエキスパート決勝: リタイア<br />
<br />
<a name='more'></a><br />
<br />
マイクロマウスについては特に昨年から変更点がないので例年どおりでした.やはり,機体のパラメータ設定が安定しているので,大体同じような結果になっています.ただ, 来年はもう太刀打ちできなそうなので,勝つためには新しいマウスが必要そうです.その辺は,予算と時間次第.ソフト的にやってみたいことがあるので,是非試せるだけの機体を作りたいとは思います.<br />
<br />
つくばチャレンジについて.<br />
今年はTop-URGまわりをハードレベルで作り変え,以前からやろうと思い着手すらできていなかったマップとのマッチング処理を実装したのですが,予想以上に上手くいき,その効果で長距離においても信頼に足る精度を得られました.その結果,試走会段階では1km程度を自律走行することもできていました.ただし,エレベータだけは最後まで自立的に乗り降りすることはできませんでした.<br />
<br />
さて,本番ですが,非常に悔しい結果となってしまいました.<br />
まず第1回目の走行ではいきなりスタート直後に機体が回転し始めて何事かと思ったら,ヨー軸ジャイロが壊れていてあらぬ角速度値を出力していたようで,いきなり自己位置を見失ってしまいました.2回目までは時間があったので,IMU自体をロール方向に90度回転して取り付け,使っていないピッチ軸ジャイロをヨー軸ジャイロとして利用する応急処置を行いました.2回目は応急処置のためジャイロの最適化があまかったか,本来通るべきルートよりやや左側を走行しがちでしたが,許容範囲で誘導モジュールも順調.しかし,471m地点で突如停止し,制限時間までシステムの回復は起こりませんでした.<br />
<br />
結果は結局500m程度のトライアルコースで失敗してしまったのですが,失敗した原因はジャイロの物理的故障(トライアル1回目)と車いすとの通信障害(トライアル2回目)と,またしてもハードがらみの問題でした.<br />
ジャイロは前日まで動いていて当日にいきなり故障したので,故障事態については避けようがありませんでした.ただ,朝のうちにしっかりとチェックして気づき,1回目の走行までに応急処置を行うことは可能だったと思います.重要な部分なので本来は多重かするなどできていればいいのですが,予算と時間的にそこまでは手がつきませんでした.また,今年は通信には気をつけたつもりで,事前にもだいぶチェックを行っており,当日のような問題は発生しなかったのですが,甘かったようです.<br />
<br />
今回は2回の走行を通して運がよくなかったのは事実ですが,回避できなかったかと問われればそんなこともなかったと思います.その分やはり悔しく,信頼性や冗長性を高めるための研究の必要性を痛感する結果となりました.リアルワールド,そしてやはり本番は怖いですね.<br />
<br />
最後に,つくばチャレンジは残念ながら今年で終了ということになるそうですが,今まですばらしい大会を開催してくださったつくばチャレンジ関係者の皆様に感謝いたします.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-39921588354017840282011-02-09T02:38:00.002+09:002011-02-09T02:49:23.906+09:00つくばチャレンジ2010でのシステム構成 今回はつくばチャレンジ2010での最終的なシステムの構成というかデータ処理の流れの話。下がデータフロー図になります。見ての通り、非常に簡単なシステムとなっています。<br />
未完成だったり精度が不十分で使われなかったものは前回紹介したので、今回は割愛します。実際にこんな最小限のシステムでも、信頼度はさておきなんとかトライアルコース(約240m)を走りきることができるのです。本番ではソフトウエアの検証不足によるIMUとの通信ミスが原因でトライアルを失敗してしまったので、あまり説得力がありませんが参考程度に。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4a4HYYSGJfeXX7dG70pm8huXGwwKYDBHpnhLV91Lw9VrkcmrnRloD9_yCipv5qsmGwiwHepTy5lEJFYw8D2EC-eHCe5VMXM-AYgPn9pmjTfsTAC1DVTq-4IlpuUyiKSzdInld-StgKMG6/s1600/RWRC2010DFD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" h5="true" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4a4HYYSGJfeXX7dG70pm8huXGwwKYDBHpnhLV91Lw9VrkcmrnRloD9_yCipv5qsmGwiwHepTy5lEJFYw8D2EC-eHCe5VMXM-AYgPn9pmjTfsTAC1DVTq-4IlpuUyiKSzdInld-StgKMG6/s320/RWRC2010DFD.png" width="320" /></a></div><br />
<a name='more'></a> 見ての通り、あまりに簡単なものなので特に書くことがないんじゃないかといいうくらいです。IMUは通常の3軸加速度、3軸角速度に加え、地磁気が取れます。エンコーダは車いす内蔵のものをマイコンで取得しPCで速度・角速度に変換して利用しています。<br />
<br />
基本的にやっていることは単純かつ基本的なことで、IMUからの角速度・方位情報とエンコーダからの速度・角速度情報をカルマンフィルタ(Localizerの実装)に突っ込んで姿勢推定を行っています。コースの自動走行は事前にリモート走行でコースを走らせたときに取得した経路点(Waypoint)のシーケンスを順次たどらせることで行っています。障害物回避は止まるか避ける方向に舵を切る。雑かもしれませんが、自分から衝突に行くことはないので最小限ではあるがないより余程いいはずです。また、3次元障害物地図(低精度)は作れるだけで利用していません。<br />
<br />
このシステム最大の問題点は、スタート位置からの相対位置でもって走行を行うことです。つまり、スタートを本来の位置から1mずれてスタートしたらそのまま1mずずれたままですし、途中で何かしらのアクシデントで位置がずれたらそれもまた補正が入りません。また、並進を知らせるセンサがエンコーダしかないので、タイヤが滑ったら位置推定に大きな影響が出ます。幸い、角度は地磁気により補正されるので多少ずれてもある程度融通が利きます。磁気は環境に影響されやすいという話はよく聞きますが、今回のトライアルコースに関して言えば大きな問題はありませんでした。<br />
<br />
このシステム構成で、意外にも走行実験では5回中4回トライアルコースは走破しました。ゴール地点での誤差は1~2メートル程度に収まっていたはずです。この単純なシステムで走れた最大の要因はたぶんエンコーダから得られる情報の精度が高かったこと。オドメトリだけでデータを取ったときも、2009年の機体でのオドメトリより遥かに高精度でした。というか、オドメトリだけでもトライアルコースを走破できていたりします。ただ、これ以上距離を走ろうとすると、誤差の具合やコース的にこのシステム構成ではさすがに難しいように思います。<br />
<br />
さてさて、今年の話ですが、以前に紹介した未完成・精度不十分だったモジュールに加え、いくつか試したいモジュールもあるので野望は広がります。今年こそは本走行に出場し、完走したい。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-13079073430852647052011-02-02T04:43:00.000+09:002011-02-02T04:43:44.194+09:00CapybaraH.T. ようやく卒論に一段落ついたので、つくばチャレンジ2010に参加した機体の紹介を。機体名は"CapybaraH.T."で、先代の"CapybaraG.S."のGとSがアルファベット順に一文字ずつずれてこの名称に。今回の開発は前年度の4人に2人加わり、WMMCの有志6人のメンバで行われました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh63pTAjMLCmZlO2zB8OsfqfAT6WMRHcZl5AkC6bORcurO3M2Bm63pW0DaCBPruL700IuxFPxFA73wKUsUAqsYKcd3uMQGpPx5tZWYTuiwR0-6hH1QObxFtMWB7OGO_3lcbDhecQ6nSoQhf/s1600/CIMG1781.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" s5="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh63pTAjMLCmZlO2zB8OsfqfAT6WMRHcZl5AkC6bORcurO3M2Bm63pW0DaCBPruL700IuxFPxFA73wKUsUAqsYKcd3uMQGpPx5tZWYTuiwR0-6hH1QObxFtMWB7OGO_3lcbDhecQ6nSoQhf/s320/CIMG1781.JPG" width="320" /></a></div><br />
<br />
<a name='more'></a><br />
とりあえずはスペックを。<br />
<ul><li>Machine</li>
<ul><li>Length: 95cm</li>
<li>Width: 70cm</li>
<li>Heigh: 110cm</li>
<li>Weight: 70kg</li>
<li>Battery: Pb 24V 30Ah</li>
</ul><li>Computer</li>
<ul><li>CPU: Core2 Quad Q8400S</li>
<li>RAM: 4GB</li>
<li>Storage: SSD32GB</li>
<li>PSU: M3-ATX</li>
<li>OS: Windows Server 2008 R2</li>
</ul><li>Sensors</li>
<ul><li>LIDAR: UTM-30LX(Top-URG)</li>
<li>LIDAR: TRG-04LX-UG01(Simple-URG)</li>
<li>Camera: Playstation Eye</li>
<li>IMU: 9DOF Razor</li>
<li>GPS: GT-730F/L</li>
</ul></ul> 前年度まで使用していたラジコンベースの台車を一新し、今年は電動車いすをベースにして開発を行いました。結果として安定度は格段に上がり、外装もしっかりと覆ったおかげで雨天でも走行が可能となっています。<br />
<br />
電動車いすの制御は備え付けのスティックコントローラのポテンショメータ部をバイパスし、自作の制御用マイコンからDA変換した電圧を印加することで従来の機能を損なうことなくPCからの制御を可能にしています。また、車いす内蔵のエンコーダからの出力も同マイコンで取得し利用が出来るようになっています。<br />
<br />
PCは前年度のものをほぼ流用し、システムはアーキテクチャ設計段階でコンポーネント分割を行い、コンポーネント間はインタフェースを用いて通信することで、依存度を抑えて後々のコンポーネントの変更や移動、調整を行いやすくしています。また、.NET framework4.0をプラットフォームに開発を行いました。<br />
<br />
データ処理の流れは、エンコーダオドメトリとIMUの3軸ジャイロと3軸地磁気データをカルマンフィルタで処理したものを位置推定結果の最終段とし、Simple-URGから得られる近傍の障害物情報と位置推定結果を利用して経路計画を行っています。<br />
<br />
最後に、実用レベルではなかった或いは実装が間に合わなかったことにより最終的には利用されなかったモジュールの紹介を。<br />
まずはカメラについて。今回うちのチームで比較的ユニークだったと思われるのが、カメラを下向きに設置し、路面の特徴点変化(オプティカルフロー)を見ることで光学式マウス的に移動計測を行おうというもの。これは結局、路面の特徴点が少ない場合など頻繁に誘拐問題が発生し、カルマンフィルタに入力しないほうがマシな状況だったため搭載を断念。今後の進歩に期待。<br />
次にGPSについて。今回利用したGT-730は車での移動等を記録するためのGPSロガー製品で、出力されるデータがすでにGPSモジュール内部のフィルタにより処理されたものであったため、データの正当性などの観点から不向きと判断して断念。そもそも誤差大きすぎ。<br />
最後にTop-URG。3次元マッピングを行うところまでは完成していたのですが、ICPスキャンマッチングによるリアルタイムな位置補正まで手が回らず時間切れで断念。トライアル程度なら絶対位置補正がなくとも完走は可能ですが、1km走るとなると絶対に必要であり、位置補正手段として現実的な方法であるため今後は必ず必要になるモジュールです。<br />
<br />
今大会でハード的にもソフト的にも大分蓄積ができてきたので、今後はこの機体・システムをベースに新しい要素を取り入れ、新しい技術にチャレンジしつつ完成度を高めていきたいと思います。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-19317801861331231942010-11-24T13:04:00.001+09:002010-11-24T13:18:04.033+09:002010年大会の結果先週行われた全日本マイクロマウス大会を最後に、今年のマウス/つくばチャレンジシーズンは終了してしまいました。<br />
<div><div>とりあえず、自分の結果くらいはまとめておこうかなと。</div><div><br />
</div><div>学生大会</div><div>クラシック競技:11秒991</div><div>ハーフサイズ競技:32秒466 (3位)</div></div><div><br />
</div><div>つくばチャレンジ</div><div>トライアル:約50M (トライアル失敗)</div><div><br />
</div><div>全日本大会</div><div>クラシックエキスパート予選:13秒439 (予選通過)</div><div>ハーフサイズ予選:16秒537 (予選通過)</div><div>※ 決勝は棄権</div><div><a name='more'></a></div><div><br />
</div><div>今年はマウスよりつくばチャレンジの方に重きをおいて活動しました。</div><div>なので、このつくばチャレンジの結果はかなり悔しいものです。</div><div>いろいろやり残したことが多く、不完全燃焼感があるので特に。</div><div>つくばチャレンジについては後日また別にまとめようと思います。たぶん。</div><div><br />
</div><div>マウスは去年と同じ機体で出場しました。</div><div>ただ、クラシックの方は去年走れた最高パラメータで走れなくなってしまい、明らかに調整不足でした。</div><div>さすがに次年度はハーフとクラシック別々の機体を新しく作りたい。</div><div><br />
</div><div>全体を通して研究室とマウスやつくチャレと、時間の使い方を間違えてしまい、どれも中途半端な状態になってしまったのが一番の反省点です。</div><div>この点は特に、今後大いに改善したい。<br />
<br />
最後に、大会関係者の皆様お疲れ様でした。</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-13562579502041022332010-07-28T05:53:00.000+09:002010-07-28T05:53:41.186+09:00パターンマッチの活用 つくばチャレンジシンポジウム2009の項目でも書いたように、環境情報とのパターンマッチによる位置情報の補正が走行の鍵となっています。レーザ測域センサ(LIDAR)から得られるポイントデータと事前環境情報とのパターンマッチによる補正が一般的な模様。例にもれず、WMMCチームも去年から考えてはいたのですが、まず去年は出来なかったので、今年こそは行いたいと考えています。<br />
<br />
<a name='more'></a><br />
環境地図のパターンマッチの使用法はおそらく大きく分けて2種類あります。ひとつは、パターンマッチをデッドレコニング的に使用する方法で、リアルタイムに前状態で取得した環境地図と今状態で取得した環境地図を比較して、回転と並進を調べるもの。もうひとつは、事前(走行する以前)に取得しておいた環境地図と走行時に取得した環境地図を比較することにより、事前環境地図上のどこにいるかを割り出すというものです。<br />
前者は未知環境でも使えるのですが、センサ値と実環境上の距離情報などとのすり合わせが正確でないと、システム内の座標と実環境の位置とに差が出てしまうであろうという問題があります。車輪につけられたエンコーダによるオドメトリよりは精度が出るでしょうが、やはり実際とのずれが問題になりそうです。<br />
一方で、後者はそういった事前環境地図の場所にマッピングされるので、たとえ事前環境地図と実環境が違ったとしても、実環境の目的地に対応する事前環境地図上の目的地を置けば、パターンマッチによる補正でその目的地に到達してくれることが期待できます。ただ、現実の地図情報やGPSとあわせて使うことを考慮した場合は、事前環境地図を正確に取得する必要があるため、それなりの設備が必要になると思います。なお、事前に取得した広域な環境地図とのパターンマッチを何も考えずに行うと多大なコストがかかるので、オドメトリやGPSから得られた位置情報を初期値として、その近傍エリアの地図とのパターンマッチをかけるのがおそらく一般的な利用法です。<br />
<br />
さて、最初にも書いたように、つくばチャレンジで主流なのは”事前”環境地図とのパターンマッチです(たぶん)。WMMCでも、なるべく正確な事前地図を作りたいと思うのですが、たいした設備もない中でどうやるのか、そこが問題となっています。案自体は若干出てはいるのですが、上手くいくかは微妙。とはいえ、GPSを用いず、実環境とはずれのある事前走行のみで取得した地図とのパターンマッチでも走破できるという前例もあるので、GPSを用いない方針もありかなと個人的には思っています。うちのチームの安価なGPSは、去年に本当に役に立たないということが分かってますし……。<br />
本当の未知環境をコース指定のみで走れるようなシステムが作れるのが理想なんですけどね。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-68020158540739484852010-07-27T01:50:00.001+09:002010-07-27T01:52:21.255+09:00第1回公開実環境走行実験(つくばチャレンジ2010) 7/24(土)に行われた、第1回公開実環境走行実験に参加してきました。流石につくばチャレンジも4年目とあって、例年参加している研究室チームなどは、すでに完成されたロボットが多くありました。我々のチームは、鳥人間コンテストとこの走行実験の日程が重なってしまい、メンバの半数が欠席するという事態になってしまったため、ロボットを持ち込むことすら出来ませんでした……。<br />
とりあえず、写真は撮れたのと、他のチームの様子が見れたのでよかったとします。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHDE5rlqvBzvHQuRBspQEVgN4iNb-LUpyJ8BoA9QptB3nHUBV4EKnivK6r9V75OAuGrhTYH4x-xWhXsGaC2fv6pqqehdfCZ6Ff-Cc_KZi-mV27-U9JykVzzif_vq3TgqsxTyYuAYyU_pit/s1600/CIMG1234.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHDE5rlqvBzvHQuRBspQEVgN4iNb-LUpyJ8BoA9QptB3nHUBV4EKnivK6r9V75OAuGrhTYH4x-xWhXsGaC2fv6pqqehdfCZ6Ff-Cc_KZi-mV27-U9JykVzzif_vq3TgqsxTyYuAYyU_pit/s320/CIMG1234.JPG" /></a></div><br />
<br />
<a name='more'></a><br />
さて、今年も順調に例年より難易度が上がっていっているように思います。概ねは事前に取得した環境情報とのパターンマッチで位置情報に補正を掛けるのがいいと思うのですが、他にも路面情報(色とか点字ブロックとかタイルパターンとか)を利用したりもできそうです。<br />
LIDARによる環境情報とのパターンマッチをまともに試したことはまだないので、それがどの程度のものなのかというのが問題ですね。あと、今年の機体での(ジャイロ)オドメトリの精度とか、地磁気の有効さとかも含めて。<br />
とりあえず、うちのチームは最低限予選突破が出来るラインには早く持っていかないといけないな、といったところです。 <br />
<br />
うちのチームも撮っていたのですが、今年は他のチームも路面の様子を撮っているところが多かったように思います。結構頻繁にパターンが変わるのと、点字ブロックみたいに明らかに利用できそうなものが多くあった気もします。もっとも、落ち葉の影響でどうなるかは分からないというのと、点字ブロックみたいに明確な意図があって設置されているものを、ロボットで妨げてはいけないという問題点もありますが、上手くやれば画像処理で基準ラインとして使えそうです。あとは、下の写真のエリアに限らず、フェンスやガラス張りの場所が結構あったのですが、それらがLIDARでどのように見えるのかはしっかりと検証しておく必要があります。 <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP4dgjomPQtxyD7DbZ3FuTzjx7K_uP2mfbBZqGjfoSIK62We4g36DfLrKdqTIXQP1noSTbp_40nJgRUTZlwkhff5xNUT6JJYuzqMwZis61AqZQzR7VOfGyOg0sLl8_g3lzoc51_tNIi-7k/s1600/CIMG1002.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP4dgjomPQtxyD7DbZ3FuTzjx7K_uP2mfbBZqGjfoSIK62We4g36DfLrKdqTIXQP1noSTbp_40nJgRUTZlwkhff5xNUT6JJYuzqMwZis61AqZQzR7VOfGyOg0sLl8_g3lzoc51_tNIi-7k/s320/CIMG1002.JPG" /></a></div><br />
<br />
<span id="goog_920571435"></span><span id="goog_920571436"></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-68344134026861952932010-06-26T00:51:00.000+09:002010-06-26T00:51:45.823+09:00マウスに使うマイコン ずいぶんと更新が開いてしまいましたが、今回はマウスに使うマイコンについてです。今回書くことは、実はもう半年くらい前に考えたり調べたりしたことだったりします……。 <br />
<br />
前回のマウスでは、SH-2コアのSH7146マイコンを使っていたのですが、今回はARMのCortex-M3アーキテクチャコアを持つSTM32に変更しようかと考えています。理由は、小型な物でも比較的大容量なRAMを有する点が大きいです。特にハーフマウスに使う場合に、外部RAMをつけるのはスペース的に厳しいものがありますからね。あと、今使っている7146は結構消費電力が大きいってのが難点。<br />
<br />
ただ、SHに比べてSTM32は内蔵Flashの速度があまりよくないようです。SH7146のときは、コアクロックを最大の80MHzにしても、ノーウェイトでアクセスできたのに対し、STM32では72MHzでコアを動作させると、2ウェイトステートアクセスになってしまいます。しかし、効率を上げるために2x64ビットのプリフェッチバッファをフラッシュと命令バスとのアクセスインタフェースに置いてあるらしいので、分岐とかジャンプとかでミスヒットしない限りはノーウェイトと変わらなさそう。ただ、分岐が多い場合とかはミスヒットして結構スループット落ちそうだけどどうなのだろう?対策とかされてるのだろうか、その辺はまだあまり調べてません。あとは、SH-Cのすばらしい最適化の恩恵が受けられないのが結構痛いですが、ある程度計算の仕方を考えて書けば、マウスのプログラムならば充分な性能かなと考えてます。実際、最近のマウス界ではこのマイコンが流行っているようですし、たまにはルネサス以外のマイコンも使ってみようかというのが本当の使う理由だったりもします。<br />
<br />
ちょっと立て込んでるのと金銭的な事情でいつ製作に入れるかは分かりませんが……。 効率的なコーディングを行うための注意点とかは、また今度調べます。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-67217899131882821912010-04-14T02:18:00.001+09:002010-04-14T02:27:05.181+09:00つくばチャレンジ2010に登録 つくばチャレンジ2010の参加登録の受付が開始していたので、早速登録しました。受付番号は『No.11』で、登録チーム名は『早稲田大学マイクロマウスクラブ』です。今年もよろしくお願いします。<br />
<br />
<a name='more'></a><br />
それにしても、去年よりも早く申し込んだはずなのですが、すでに前に10チームもいるんですね。去年はもう少し後に申し込んだのに、もっと若い番号でした。やはり、段々大きな大会になっているんですかね。研究室や企業などのチームが圧倒的に多いかと思いますが、特に研究室などの支援がない学生だけのサークルチームとして今年も挑戦していきたいと思います。とにかく金銭面が厳しかったりします。まだ距離的に恵まれていますが、それでも特に交通費が……。<br />
<br />
<br />
あと、前に書いていたように、今年は台車が変わり電動車いすらしきものになる予定です。写真は載せられそうなものが撮れたら載せようと思います。差動二輪で動かせるので、制御や経路計画が大分楽になる……、はずです。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-84586645269567945412010-03-19T00:34:00.001+09:002010-03-19T00:37:28.734+09:00要求分析とか 最近になって、ようやく今年のつくばチャレンジに向けたシステムの分析をはじめました。しかしながら、去年も相当悩んだことなのですが、やはりまだまだ知識的にも未熟なので、上手くモデルがまとまりません。ちなみに、モデルベースの開発といっても、制御モデルではなく、ほとんどソフトウエア側のモデルを使った開発です。実行効率は悪くなってしまうかもしれませんが、ソフトウエア的な見易さと保守性の向上を目的としています。<br />
モデルそのものでも、出来上がったモジュールでも、開発の手法でも良いから、他にも応用が利くようなサークルのノウハウの蓄積にも繋がればとも思っています。 <br />
<br />
今回は分析の最初の段階として要求分析をなるべくしっかりやろうと思い、ユースケース図やユースケース記述、アクティビティ図などで視覚化しつつ作業を進めています。去年は頭の中で考えて適当に進めてしまったため、走行プログラムそのものはまだしも、後々のパラメータ調整とかデバイスの選択とかが面倒なことになったので、そうした点もしっかり行えるようにユースケースを考えていくつもりです。やってみて思うのですが、おおよそ当たり前と思われるようなユースケースについても、しっかりと図や文章化する作業を行うことで案外理解できていないということに気づかされ、この要求分析という作業の重要性を再認識していたりします。<br />
<br />
そういえば、今年は台車が大幅に変わります。そのうち写真を載せるつもりですが、とりあえずサークルの新歓期までにはリモートでいいから動くようにはするつもりです。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-78514234653323541322010-01-23T02:55:00.001+09:002010-01-23T02:57:42.418+09:00氷雪 今回は去年作ったマイクロマウスの紹介を。<br />
この機体は、去年行われたマイクロマウス2009で、マイクロマウス(ハーフサイズ)部門とクラシックのエキスパート部門に出場した機体です。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLo927bdQoKzOyWRF4DdvTanaYqYM7EJd-jyZWQaGz-2paUvhZ67WGWKT5E-f_bB75lA895y8NzQ1wUaavHU8AXw9zyD_JMDVi3HMNN9ggmi1sO_qzzgnrPdtMsKV-szZGbK7OAnfZTn2I/s1600-h/yr09hm.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLo927bdQoKzOyWRF4DdvTanaYqYM7EJd-jyZWQaGz-2paUvhZ67WGWKT5E-f_bB75lA895y8NzQ1wUaavHU8AXw9zyD_JMDVi3HMNN9ggmi1sO_qzzgnrPdtMsKV-szZGbK7OAnfZTn2I/s320/yr09hm.JPG" /></a><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a name='more'></a><br />
<br />
まずはスペック紹介<br />
<ul><li>コントローラ</li>
<ul><li>SH7146(SH2コア)</li>
<ul><li>コアクロック 80MHz</li>
<li>Flash 256KB <br />
</li>
<li>RAM 8KB</li>
<li>外部EEPROM 128KB</li>
</ul>
</ul>
<li>モータ</li>
<ul><li>SCR13-2005 + MR-13<br />
</li>
<ul><li>定格 6V</li>
<li>定格トルク1.0mNm</li>
<li>定格回転数 9600rpm</li>
<li>エンコーダ分解能 256 <br />
</li>
</ul>
</ul>
<li>フォトセンサ</li>
<ul><li>発光</li>
<ul><li>TLRH180P</li>
</ul>
<li>受光</li>
<ul><li>TPS601A</li>
</ul>
</ul>
<li> モータドライバ</li>
<ul><li> TB6593FNG</li>
</ul>
<li>電源 </li>
<ul><li>Li-Po 2Cell 7.4V 200mAh<br />
</li>
</ul>
<li>タイヤ・ギア</li>
<ul><li> 直径21mm</li>
<li>ギア比 14:50<br />
</li>
</ul>
<li>大きさ</li>
<ul><li>長さ 62mm</li>
<li>幅 50mm</li>
<li>重さ 75g</li>
</ul>
</ul> 実は、このマウスは本来試作機だったのですが、諸事情で結局このまま大会に出場してしまいました。結果として、ハーフサイズで8位、エキスパートで予選14位、決勝リタイアとなりました。<br />
<br />
WMMCの現役にDCマウスを作ったことがある人が、これを作る段階ではいなかったので、DCモータの制御とかを試すために作ったのがこのマウスでした。コンセプトは安価。<br />
基板も、大学の施設を頼んで使わせてもらい削りだすなど、モータ以外はほとんどお金がかかっていません。また、ギアの加工やモータマウントなどの加工関係は全面的に友達に協力してもらいました。設計は出来ても加工の技術がまだないので……。<br />
<br />
回路はなるべく簡素に設計しました。SH7146がかなりの基板面積を占めているのと、基板加工機で削れる細さの関係で結構制約があり、極力部品数を抑える方針で。外乱を取り除くためのフィルタ処理も、初めてハードでなくソフトで行ってみたのですが、結構上手く除去できるものだなーと。ただ、カット後の値をOPアンプとかで増幅できないので、ハードで処理したときより分解能が下がってしまいます。個人的には、もうすこし分解能が欲しいところ。<br />
<br />
ソフトはC++で書いていて、ハードウエア依存の部分とアルゴリズム的な部分を極力切り離しているのでシミュレータなどが簡単に作れますし、各モジュールが変わってもほとんど他には影響しない仕様にしています。おかげで、アルゴリズム部分は一年のときに組んだものをほぼ丸々コピーして使えました。 ただ、MPUごとに癖があるので、その辺を考慮すると本当はある程度プログラムを書き直したほうがいいのかもしれないです。とりあえずは、SH-Cのすばらしい最適化能力とSH2の処理能力に全面的に頼っています。間に合わなくなったら改良しよう……。<br />
<br />
今回はDCマウスそのものを作れるかの試作機という位置づけだったので、あまり個性が出ませんでした。強いて言えば、クラシックにもハーフサイズにも出られることですが、やってみて思ったのはやはり一台でどちらにも出場するというのは難しいということ。今年はハーフ用とフル用を分ける予定です。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-20307119174759607842010-01-17T22:59:00.001+09:002010-01-22T17:41:30.457+09:00CapybaraG.S.去年の作った機体2つが、WMMCのHPの作品紹介に追加してもらったので、こっちでもう少し詳細な作品紹介を書いてみようと思います。<br />
今回は、つくばチャレンジ2009に出場した機体、"CapybaraG.S."について。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.waseda.jp/1g-wmmc/sakuhin/2009/cgs.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6thxlBlsHd8feDNC9q16zVNa1wbgT_rtzAwjfsTC1ZI3Qnx6m4HTw5eSeeh7p6Kpr4KrGKXkjycRc7TxX33RXMmu0K1b8lHTSkY4AaGDi0NDbJ31AEdiBzmcbxcUawloYRcBPQ0soeTBo/s1600-h/cgs.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6thxlBlsHd8feDNC9q16zVNa1wbgT_rtzAwjfsTC1ZI3Qnx6m4HTw5eSeeh7p6Kpr4KrGKXkjycRc7TxX33RXMmu0K1b8lHTSkY4AaGDi0NDbJ31AEdiBzmcbxcUawloYRcBPQ0soeTBo/s320/cgs.JPG" /></a><br />
</div><br />
<a name='more'></a>まずは、簡単なスペックを紹介します。<br />
<ul><li> 統括PC</li>
<ul><li>Core2 Quad Q8400S</li>
<li>Windows Server 2003</li>
<li>RAM 4GB<br />
</li>
<li>SSD 30GB </li>
<li>電源 Pb 12V 9000mAh<br />
</li>
</ul>
<li>駆動制御プロセッサ</li>
<ul><li>SH7125 48MHz</li>
<li>RAM 8KB</li>
<li>Flash 256KB</li>
<li>電源 NiMH 6Cell 7.4V 3300mAh<br />
</li>
</ul>
<li>推進</li>
<ul><li>DCモータ x2</li>
<li>電源 NiMH 6Cell 7.4V 3300mAh</li>
</ul>
<li>操舵</li>
<ul><li>サーボモータ</li>
<li>電源 NiMH 6Cell 7.4V 3300mAh</li>
</ul>
<li> センサ</li>
<ul><li>ロータリエンコーダ</li>
<li>GPS</li>
<li>LIDAR</li>
<li>地磁気</li>
</ul>
<li>台車<br />
</li>
<ul><li>Tamiyaスーパークラッドバスター改造</li>
</ul>
<li>重量</li>
<ul><li>約20kg</li>
</ul>
<li>稼働時間</li>
<ul><li>約1時間</li>
</ul>
</ul>スペックを眺めつつ、解説をしていきます。<br />
<br />
まず、ハード構成としましてはPCを統括、つまり障害物・自己位置推定および経路計画に用い、リアルタイム性が特に重要視されるごく局所的な速度制御および操舵処理を制御プロセッサであるSH7125が行います。<br />
制御プロセッサを介して繋がるのは、推進用DCモータ、サーボモータ(さらにサーボコントローラであるAVRを挟む)、ロータリエンコーダです。このあたりのユニットは、実はモータドライバ以外は大学ロボコン2008で使ったものの使いまわしで、部室にあったものを有難く使わせてもらいました。ソフトは、以前使って知っていたので非常に組みやすかったです。<br />
ロータリエンコーダの信号は、制御プロセッサで処理された後、PCからのコマンドに応じる形式で送信されます。<br />
PCに直接繋がるのは、LIDAR、GPS、地磁気センサです。<br />
稼動時間の1時間は、PC電源がなくなるまでの時間です。 <br />
<br />
次に、ソフトウエア構成についてです。<br />
基本的にすべて.NET Framework3.0上で動作するように設計しました。<br />
ソフトウエアアーキテクチャは、階層モデルを用いてデバイスを抽象化し、経路計画等の上位アプリケーションや、各種フィルタアルゴリズムなどがデバイスが変わった場合でも実装の変更を行わなくても済むように設計しました。<br />
階層は3層に分かれており、各層はかならずI/Fを挟んで呼び出します。<br />
シミュレータも簡単に作れるはずです。(作らなかったのですが……) <br />
<br />
最後に重要モジュールに使われた(使う予定だった)アルゴリズムを簡単に説明<br />
(抽象化されてるので、センサとかは変更されても大丈夫ですが、今回の構成で実際に使われたものを書きます)<br />
<ul><li>自己位置推定: 地磁気とエンコーダを用いたオドメトリ(EKF使用?)の後、パターンマッチ結果とのPFによる合わせこみ。ただし、地磁気M/WとPFの実装が間に合わず、実際はエンコーダのオドメトリのみ。</li>
<li>障害物検出: LIDARからの情報を変換</li>
<li>経路計画: ウェイポイント方式。位置推定の精度が悪いので緊急で付け加えて、一部区間は植木とのPID制御(位置)。</li>
<li>障害物回避: 障害物が退くまで待機 & 動かない場合はいない方に進行<br />
</li>
</ul><br />
さて、反省を書きます。<br />
<br />
まずは、全然大会に間に合いませんでした。最後のアルゴリズム説明の曖昧さから分かるように、使うアルゴリズムすら明確に決まっていない惨状です。この辺は、プロジェクトの初期において決めるべきだったかもしれません。<br />
結局本腰を入れた期間が短く、実質的作業時間がほとんどなかったのと、ハードを大幅増強した時期の遅さ、それに伴うM/W製作に大きく時間をとられたことが問題です。<br />
<br />
次に、台車の性能です。<br />
プロジェクト立ち上げ時から懸念していたのですが、この台車はあまり適切ではありませんでした。何が最もいけなかったかというと、重量が大きすぎてステアリングの利きが悪くなった点です。リモートですらまともに操作できない操舵性……。傾斜次第では、最大にステアを切っても曲がらない、そもそもサーボの応答が遅いなどなど。なぜ変えなかったかというと、台車に愛着を持っている人がいたのと、終盤では時間とお金がなかったためです。これは今年、可及的速やかに対処します。<br />
<br />
最後に天候対策。<br />
トライアル前日の雨で回路が故障したのですが、そもそも屋外ロボットの大会なので、十分に考えておくべきことでした。事実、ほかのチームはしっかり対策がなされておりました。<br />
<br />
というわけで、まとめます。<br />
全体を通して、見通しが甘かったというのが事実です。これは言い訳できません。シンポジウムでほかの人の話を聞いていて、見通しの甘さを痛感しました。今年は、初期に大会までのロードマップと、アルゴリズムなどが迷走しないようにテーマを定めて製作にかかろうと思います。 <br />
各種センサやM/Wは前年で大体整備できたので、若干ソフトウエア設計を変更した後、各種モジュールの実装には比較的はやい段階で入れそうです。今年の物理的変更点は、恐らくIMUの追加と台車の変更くらいです。<br />
懸念すべきは、研究室配属で場合によっては時間がとれなくなってしまうところ。まだまだ技術がない学生にとって、作業時間が削られてしまうのは致命的です。<br />
しかし、仮にそういった事態になってもめげず、今年は完走を目指したいと思います。Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-740948948022339556.post-3809032397436509592010-01-11T02:41:00.001+09:002010-01-11T02:43:15.111+09:00LIDARの庇 つくばチャレンジでは、多くのチームがLIDARに庇をつけていました。<br />
参加しているときは、太陽光が入り込むことでレーザ光を受けるセンサを誤動作させ、計測距離にノイズが入るのだろうと思っていましたが、それだけが理由ではなかったらしいです。<br />
<br />
<a name='more'></a><br />
太陽光がセンサに入り込むのが問題という点では変わらないのですが、レーザ光を受光するセンサに入り込むことが問題というよりも、レーザの回転などを制御するために用いられているフォトインタラプタ部分に光が入り込むことの方が問題らしいです。回転数が分からないと、レーザがどちらに向いているのかすらも分からなくまりますし、そういった状況では安全性からそもそも発光をさせることも出来ないのでしょう。<br />
<br />
屋外用のLIDARはそうした太陽光がフォトインタラプタまで届き難いように対策がなされているが、室内用のLIDARはあまり対策がされていないとか。<br />
つまり、室内用でも庇をつけて太陽光が入り込むのを防げば、屋外でも使えないこともないらしいですし、実際に使っているチームもいました。もちろん保証は受けられませんが。 <br />
また、WMMCでは太陽光が入り込むことによる誤検知は(多分)ありませんでしたが、屋外用でも庇をつけているチームがかなり多かったので、一応つけたほうがいいのかもしれません。<br />
<br />
あと、LIDARの検出距離が違うのは、検出方式の違いとかがあるためらしいです。Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-740948948022339556.post-54729541832958063992010-01-10T04:57:00.000+09:002010-01-10T04:57:11.813+09:00つくばチャレンジ2009シンポジウム ブログを作ってみました。どの程度の頻度で更新するかは全く分かりませんが、ここではつくばチャレンジやマイクロマウスに関連したことを中心に書いていこうと思います。<br />
ブログを作った主な目的は、備忘録とかそういったものだったりします……。あとは、ロボット作っている人たちと交流ができたらなーと思ってます。<br />
<br />
というわけで、最初の記事はつくばチャレンジ2009シンポジウムについてです。<br />
<br />
<a name='more'></a><br />
このシンポジウムは昨日行われたのですが、そこでは完走したチームの発表や、ポスターセッションで様々なチームの話が聞けて、とても有意義なものでした。<br />
<br />
いろいろ話を聞いていて気になったのが、やはりGPSはあまり頼りにならないという話です。完走したチームにはGPSを搭載していないチームが数チームありました。<br />
こういった車輪移動ロボットが主体となるチャレンジですので、やはり自己位置推定の基本はオドメトリなのですが、オドメトリのみでは累積誤差が大きなものとなってしまいます。その誤差をキャンセルする方法として、オドメトリによる推定位置とGPSデータを利用して自己位置をEKFやPFで補正するという手法がもっとも簡単で最初に考えられるわけですが、多くのチームが(高価なものでも)GPSはあまり信用できないとの結論にいたっているのは、非常に面白い話ではあります。これ自体はどうも2007年大会が開催された時から言われているようではありますが……。<br />
<br />
一方でやはりLIDARが有効なようで、事前の試走会などでコースの環境情報をしっかりと取得しておいて、ICPパターンマッチなどを利用して自己位置を補正するという手法が確実なようでした。LIDARの使い方も、2次元平面上のデータでなく、複数のLIDARの組み合わせ、あるいは首ふりをさせることにより、3次元環境データを作成し、それを利用しているチームが多かった気がします。<br />
<br />
他にも、オドメトリそのものの精度を上げるためにジャイロなど慣性センサを組み合わせるチームも多くみられましたし、走破したチームの中には磁気ノイズをランドマークとして利用するなど非常にユニークな手法をとったチームもありました。<br />
<br />
また、当然なことかもしれませんが、人の変化や季節、天候、時間帯など環境の変化に対するロバスト性が極めて重要という話でした。WMMCは天候にやられたので、次回はしっかりと対策を立てたいです。Unknownnoreply@blogger.com0