2010年5月30日日曜日

amclの調整がうまくいかない。

うーん、はまってます。

自己位置推定のパッケージであるamclの使い方がよく分かりません。

回転方向のずれが大きいので、update_min_aを小さくして、
resample_intervalも小さくして、
initial_cov_aaも大きめにしていますが、
全然だめです。


パーティクルがだんだんまとまってきちゃいます。
neff値を見てリサンプルしてるんだと思うんですが、
なかなかリサンプルしてくれません。


ううむ。。。

2010年5月29日土曜日

ルンバ自律移動途中経過

rvizの使い方もだんだん分かってきました。

なんとかルンバが動き始めました。
速度をはやくすると位置がずれまくります。
もう少しパラメータを調整する必要がありそうです。

2010年5月27日木曜日

ルンバ改造

ルンバを改造しました。

以前はしたの写真のように、ルンバの上にPC、レーザ、回路をのせただけの構成でした。
これだとよけいなケーブルをPCの下に隠すため、PCが非常に不安定でした。

なので、取り外し可能で、かつ、きれいにケーブル類を収納できるように
改造します。
まずは一階部分。
台をおいて、その上に回路、ケーブル類をいれます。
木の柱をたてました。
材料はすべて100円ショップです。

そして二階の台を取り付け。
この上にPCをおきます。

これで完成
斜めからみるとこんな感じ。

ちょっとかっこよくなりました。



2010年5月21日金曜日

gmapping + Roombaでマップができた

おひさしぶりです。

ようやくマップができました。

(自宅の地図大公開です。)
上側がキッチン、下がリビングダイニングです。
左側には広大な部屋がたくさんありますが、あまり遠くにいかせてもあれなので、
今回は自宅のごく一部の地図としました。

(本当は段差があるので、段差なしの領域だけとしてみました。)
(本当は部屋を片付けるのが面倒なので、ここだけです。)



ルンバから取得するオドメトリの値は全然実世界と合わないので、
距離は8倍、角度は3倍しました。
するとちょうどよさげです。
謎ですが気にしない。気楽にやります。

なぜ今まで、オドメトリとレーザーをやってきたか、というとgmappingを使ってマップを作るためです。

この二つがあればマップを自動作成することができます。


http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Odom

をよく読んで自分のロボットのオドメトリをpublishします。
TFの形と、nav_msgs/Odometryの形の2つでpublishします。

Odometryのデバッグはrvizを使いました。

そしてgmappingを使います。
http://www.ros.org/wiki/slam_gmapping/Tutorials/MappingFromLoggedData

基本的にはロボットを動かす前に、

$ rosbag record -a -O map
などとして、トピックをすべて記録。


そして、その状態でロボットを動かします。

で、できたmap.bagファイルをslam_gmappingに食わせます。

$ rosparam set use_sim_time true
して、rosbagでの再生にgmappingを対応させて、
$ rosrun gmapping slam_gmapping
でgmappingを起動。

$ rosbag play map.bag
でトピックを再生します。

rosbagは非常に便利です。テストにも必須な気がします。

gmappinはパラメータがいろいろありますが、デフォルトの設定で一応できたのでよしとします。

再生が終わってから
$ rosrun map_server map_saver
とすると安定版マップがmap.pgm/map.yamlとして取ってこれます。
$ rosrun map_server map_saver static_map:=dynamic_map
とすると、現状の最新マップが取ってこれます。

やっとマップができましたので、次回はこれを使っていよいよ自律移動です!

2010年5月15日土曜日

Roombaのオドメトリを取る

ルンバにはオドメトリを取るコマンドがありますが、
どうもこれが変です。

で、ちょっと調べてみると以下のような記事が見つかりました。

http://createforums.irobot.com/irobotcreate/board/message?board.id=Create_Support&view=by_date_ascending&message.id=492

ようするに、車輪の回る方向はルンバは分からないので、どっちの方向に
指令を受けたか、で車輪の方向を判断している。
なので、手でルンバを押してしまうと正確にでません。特に回転は判断できない。

たしかに、方向が分かるエンコーダは高いですからついてないんですね。

というわけで、車輪をモータを使って動かして調べましょう。

2010年5月12日水曜日

Roomba(ルンバ)からURGの電源を取る

いよいよルンバにURGを取り付けます。

ルンバのバッテリーは14.4V、URGは12V。
直接はつなげられないので、3端子レギュレータを入れて、
ノイズを取り除くためのコンデンサを入れました。
(回路図は簡単なので省略)

OIインタフェース(シリアル線の隣のピン)からもバッテリー電源がきていますが、
実験の結果、こちらからは電流があまりとれないということが分かりました。
URGブートまではいきますが、安定して立ち上がりません。
1Aくらいでしょうか?
URGは瞬間的に3Aくらい流れるようです。
この線がバッテリ直だと思っていたので残念です。

そのため、ルンバの底をあけて、バッテリから直接電源を取ることにしました。
バッテリのコネクタに直にはんだづけしてしまいました。

あられもないルンバの姿。

回路がむき出しなのでカバーしました。

で、URGとPCとを乗っけて完成です。
ごちゃっとしてますが、PCを小さくして、配線をその下におさまるようにすれば
結構かっこよくなるのではないでしょうか?

もしこいつがちゃんと動けば、次回はこのニュールンバを使って家のマップ作りをしたいと思います。

2010年5月7日金曜日

URG(UTM-30LX)を試す

やはり現在の技術だと自律移動にはレーザーは欠かせませんね。

マップ作成も自動でできますからね。
ということで北陽のURGを入手しました。

http://www.hokuyo-aut.co.jp/02sensor/07scanner/download/urg_programs/UrgViewer__page.html

まずはLinuxで動作確認です。

12VをURGに加えて、USB線をPCにさします。

$ dmesg


すると
[  983.876967] cdc_acm 4-1:1.0: ttyACM0: USB ACM device
と、/dev/ttyACM0にちゃんとデバイスが見えました。

そして一応ドライバ(サンプルライブラリ)を入手して、configure, make, make installします。


そして動作確認は以下のようにやりました。

$ sudo apt-get install qt4-dev-tools
$ svn co http://svn.sourceforge.jp/svnroot/qrobosdk/trunk 
$ cd trunk/programs/
$ make
$ cd UrgViewer
$ ./UrgViewer




ちゃんとデータが取れています。
よしよし。

これでROSのnavigation stackをがっつりそのまま使う準備が整ったんじゃないかと思います。
(オドメトリの取得がまだかな?プレーリードックから持ってくれば終わりでしょうか?)

$ rosmake hokuyo_node
$ rosdep install rviz hokuyo_node
$ rosmake rviz hokuyo_node
$ roslaunch hokuyo_node hokuyo_test_intensity.launch
するとrviz上でレーザー点が見えました。