« 2015年8月 | トップページ | 2015年11月 »

2015年9月

FastSLAMが動くようになった。

だんだんFastSLAMがそれらしく動くようになってきました。

メモリ容量とCPU速度の限界に挑む感じです。現在2fpsくらいで動作しています。
2c5fe89e71cc1e0a734cf679338d67fa 17b493cd6abf863fc91dbd015c59ece5
狭い間隔で直線やカーブが並ぶ似たようなパターンが連続する場所は地図の生成に失敗することがあります.
地図生成の成功率を上げるには、如何にパーティクルフィルタのパーティクルの数を増やすか、パーティクルの喪失を防ぐかにかかっている気がします。難しい。

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

全日本マイクロマウス大会の申込完了

全日本マイクロマウス大会のロボトレース競技に申込完了しました。 マシン名はMETEORA 4です。会場でお会いしましょう。
大会では無事に走るといいな。計算量が多すぎるためにプログラムを最適化してたり、地図生成ルーチンに関してデバッグしにくいバグに悩まされたりして、まだMETEORA 4は自律走行まで至っていません。急がねば。

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

FastSLAMが動いた

だいぶ苦労しましたが、占有格子地図をつかったFastSLAMが一応それっぽく動くようになってきました。画像は、ロボトレースの機体を手で押して走らせながら地図を生成する様子です。

ロータリーエンコーダと半導体ジャイロによるオドメトリで得られた機体自身の位置と、カメラから得られるコース形状から、上からコースを見たときの地図を確率的に生成しています。

射影変換を除けばなにも難しいことはなく、確率ロボティクスの本に書かれたアルゴリズムを素直に実装しただけです。
地図に自機の位置が表示されていないため、ちょっとわかりにくくてすみません。

94d220768ec42067dbee2446b5360258
カメラ画像
10a9bcf000f45356436f34696a0a04e9
カメラ画像とオドメトリ結果から作成された占有格子地図

正直、占有格子地図の生成は完璧とはいえず、地図がぼやけています。これには原因がいくつか考えられます。


1.パーティクルの数が足りない
→現在パーティクルは計算速度の問題で100個しか使っていません。本当は数千個必要ですが、如何せんRaspberry Pi 2では速度に限界が有ります。100個でフレームレートは1fps以下です。
これから実装を最適化して速度を大幅向上させる予定です。


2.外乱の影響
→カメラ画像にあるように奥にコース以外の余計な物が写っています。コースは平面なので大丈夫ですが立体物がカメラに映ると、機体の位置によって見え方が変化するので、地図生成に大きな悪影響を与えてしまいます。どげんかせんといかん。
たとえば対策としては、近くを撮影した画素の重みは大きく、遠くを撮影した画素の重みは小さくしたりすると、影響が低減できるかもしれません。あと立体物の問題は、ロボトレース競技だとスタート地点にスタートゲートとゴールゲートでも生じるので、これの悪影響を受けないように何とかしないといけません。

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

Raspberry Pi 2でマルチスレッドプログラミングしようと思ったけど・・・

Raspberry Pi 2にはCPUのコアがせっかく4つ付いているので、マルチスレッドでプログラムを動作させようと思いましたがうまくいきません。

調べてみるとC++のライブラリのバグのようです。
具体的にはARM向けのlibstdc++にバグがあり、
そのためstd::asyncもstd::threadも動かないようです。

GDBで追跡するとlibc.so.6部分でコケる。。。
ひどい、ひどすぎる・・・

詳細はこの辺りで議論されてるけど、自力で解決出来そうもないし、
他の手段を探しますかね。。。

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

« 2015年8月 | トップページ | 2015年11月 »