2016年10月19日水曜日

g_mappingを使用した地図の作り方(後半途中)

こんにちは。

前半を読んだ後、後半も読んだんですが放置してたのでそろそろメモ残しときます。

ちなみに違うサンプルでやったらうまくgmappingが使えず、色々とはまるうちにググってみたらROSの英語の掲示板をのぞいてみたら結構充実しててびっくりしました。

世界のどこかで知らない外国の人が自分と同じエラーを踏んだのかー、とほっこりした気持ちになりました。


Building Maps

gmappingパッケージのslam_gmappingを使って地図を作る説明が書いてありました。

・GMappingのアルゴリズムを実装。

・アルゴリズムの詳細は以下の2論文に書いてある。(時間あったら読もう、読むかな。。)
タイトルだけメモっとこう。

-"Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters"

-"Improving Grid-based SLAM with Rao-Blackwellized Particle Filters 
      by Adaptive Proposals and Selective Resampling"

今回の解説では、ロボットが動いてる状態で地図を作るのではなく、あえて最初に動いてデータを取得したあとにマップを作る手法の解説がされていました。(大昔に学生の頃似たようなことやった気がする。。)

具体的には
1.ロボット動かしてログをとる
2.gmappingのノード起動
3.rosbagで再生
4.データを保存
の流れでした、以下本で実際にやられてた手順になります。

1.データをとるために、Turtlebotを動かす。


$ roslaunch turtlebot_stage turtlebot_in_stage.launch

このコマンドを実行すると、シミュレータとrvizが立ち上がります。

$ roslaunch turtlebot_teleop keyboard_teleop.launch

キーボードから亀が動かせます、
u i o
j k l
m , . 
あたりで上下左右かな、試してないんで違ったらゴメンナサイ。

$ rosbag record  -O data.bag /scan /tf

data.bagというファイルに/scanと/tfの内容を保存する。

他のオプションは前回まとめた記事参照。

十分ログがとれたかなー、というタイミングでCtrl-Cで終了する。

注意点:ログとり終わったら一旦シミュレーター終了させましょう。
動かしたまんまだと、LaserScanのメッセージが衝突するとのこと。


2.gmappingノードの起動


まずroscoreを再度起動し、以下のコマンドを実行し、gmappingノードを起動する。

$ rosparam set use_sim_time true
$ rosrun gmapping slam_gmapping

1.で保存したファイルで/scanを使ってない場合は、scan:=laser_scan_topicなどで指定できます。


3.保存したファイルを再生

1.で保存したファイルを再生するために、以下のコマンドを実行する。

$ rosbag play --clock data.bag

実行してみたら進捗率みたいなのとか、今どのタイムスタンプあたりを実行してるみたいなログがコンソールにでてました。

4.Mapファイルの保存

2.で実行したgmappingのコンソールをそのままの状態で、別のターミナルで以下のコマンドを実行することでファイルを保存する。

$ rosrun map_server map_saver

実行後、map.pgmとmap.yamlの2ファイルが保存されます。

余談ですが、map_serverとmap_saverが似すぎて打ち間違えて30分時間を無駄にしたアカウントはこちらになります。。。


地図の作り方については基本的には以上になります。

おそらくこの状態ではマップの精度が低いとのことで、以下の2点を試すと制度があがるかもよ、と書いてありました。

・gmappingのパラメータの変更
・ロボットをゆっくり動かす

動かしながら地図を作る場合は、動かしながらgmappingを起動しましょう、とも書いてありました。
著者のお勧めはいったん動かしてbagファイルを作る手法のようです。



。。いかん、後半のつもりがもうちょっとだけ残ってしまった。
続きはまた次回。





0 件のコメント:

コメントを投稿