うーん、はまってます。
自己位置推定のパッケージであるamclの使い方がよく分かりません。
回転方向のずれが大きいので、update_min_aを小さくして、
resample_intervalも小さくして、
initial_cov_aaも大きめにしていますが、
全然だめです。
パーティクルがだんだんまとまってきちゃいます。
neff値を見てリサンプルしてるんだと思うんですが、
なかなかリサンプルしてくれません。
ううむ。。。
2010年5月30日日曜日
2010年5月29日土曜日
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
とすると、現状の最新マップが取ってこれます。
やっとマップができましたので、次回はこれを使っていよいよ自律移動です!
ようやくマップができました。
(自宅の地図大公開です。)
上側がキッチン、下がリビングダイニングです。
左側には広大な部屋がたくさんありますが、あまり遠くにいかせてもあれなので、
今回は自宅のごく一部の地図としました。
(本当は段差があるので、段差なしの領域だけとしてみました。)
(本当は部屋を片付けるのが面倒なので、ここだけです。)
ルンバから取得するオドメトリの値は全然実世界と合わないので、
距離は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
ようするに、車輪の回る方向はルンバは分からないので、どっちの方向に
指令を受けたか、で車輪の方向を判断している。
なので、手でルンバを押してしまうと正確にでません。特に回転は判断できない。
たしかに、方向が分かるエンコーダは高いですからついてないんですね。
というわけで、車輪をモータを使って動かして調べましょう。
どうもこれが変です。
で、ちょっと調べてみると以下のような記事が見つかりました。
http://createforums.irobot.com/irobotcreate/board/message?board.id=Create_Support&view=by_date_ascending&message.id=492
ようするに、車輪の回る方向はルンバは分からないので、どっちの方向に
指令を受けたか、で車輪の方向を判断している。
なので、手でルンバを押してしまうと正確にでません。特に回転は判断できない。
たしかに、方向が分かるエンコーダは高いですからついてないんですね。
というわけで、車輪をモータを使って動かして調べましょう。
ラベル:
Roomba
2010年5月12日水曜日
Roomba(ルンバ)からURGの電源を取る
いよいよルンバにURGを取り付けます。
ルンバのバッテリーは14.4V、URGは12V。
直接はつなげられないので、3端子レギュレータを入れて、
ノイズを取り除くためのコンデンサを入れました。
(回路図は簡単なので省略)
OIインタフェース(シリアル線の隣のピン)からもバッテリー電源がきていますが、
実験の結果、こちらからは電流があまりとれないということが分かりました。
URGブートまではいきますが、安定して立ち上がりません。
1Aくらいでしょうか?
URGは瞬間的に3Aくらい流れるようです。
この線がバッテリ直だと思っていたので残念です。
そのため、ルンバの底をあけて、バッテリから直接電源を取ることにしました。
バッテリのコネクタに直にはんだづけしてしまいました。
あられもないルンバの姿。
回路がむき出しなのでカバーしました。
で、URGとPCとを乗っけて完成です。
ごちゃっとしてますが、PCを小さくして、配線をその下におさまるようにすれば
結構かっこよくなるのではないでしょうか?
もしこいつがちゃんと動けば、次回はこのニュールンバを使って家のマップ作りをしたいと思います。
ルンバのバッテリーは14.4V、URGは12V。
直接はつなげられないので、3端子レギュレータを入れて、
ノイズを取り除くためのコンデンサを入れました。
(回路図は簡単なので省略)
OIインタフェース(シリアル線の隣のピン)からもバッテリー電源がきていますが、
実験の結果、こちらからは電流があまりとれないということが分かりました。
URGブートまではいきますが、安定して立ち上がりません。
1Aくらいでしょうか?
URGは瞬間的に3Aくらい流れるようです。
この線がバッテリ直だと思っていたので残念です。
そのため、ルンバの底をあけて、バッテリから直接電源を取ることにしました。
バッテリのコネクタに直にはんだづけしてしまいました。
あられもないルンバの姿。
回路がむき出しなのでカバーしました。
で、URGとPCとを乗っけて完成です。
ごちゃっとしてますが、PCを小さくして、配線をその下におさまるようにすれば
結構かっこよくなるのではないでしょうか?
もしこいつがちゃんと動けば、次回はこのニュールンバを使って家のマップ作りをしたいと思います。
ラベル:
Roomba
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
マップ作成も自動でできますからね。
ということで北陽の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上でレーザー点が見えました。
ラベル:
navigation,
ROS
登録:
投稿 (Atom)