文書の過去の版を表示しています。
4. 地図生成
# 2015-06-05 AND
slam_gmappingのインストール
indigo環境の人(推奨環境) $ sudo apt-get install ros-indigo-slam-gmapping $ sudo apt-get install ros-indigo-map-server jade環境の人(非推奨環境、動作未確認) $ sudo apt-get install ros-jade-slam-gmapping $ sudo apt-get install ros-jade-map-server
オフラインによる地図生成
ログデータの保存
ターミナル1 $ roscore ターミナル2(ロボットとPCを接続しておくこと) $ ypspur-coordinator -p your_robot.param -d /dev/ttyACM0 ターミナル3 $ rosrun ypspur_ros_bridge ypspur_ros_bridge ターミナル4 $ rosrun hokuyo_node hokuyo_node _port:=/dev/ttyACM1 または、 $ rosrun hokuyo_node hokuyo_node _port:=/dev/ttyACM1 _min_ang:=-2.08621382713 _max_ang:=2.08621382713 ターミナル5 $ rosrun sensor_tf_test sensor_tf_test ターミナル6 $ rosrun joystick_commander joystick_commander /dev/input/js0
上の6つのターミナルを実行させて準備が整ったら、また新しくターミナルを作り、次のコマンドでログデータを保存を始める。
ターミナル7 $ mkdir -p ~/ros_study/ //ログデータを保存する場所を作っておく $ cd ~/ros_study/ $ rosbag record -o log_name -a
ログデータの保存が始まったら手動でロボットを走らせる。
走らせ終わったら、ターミナル7を Ctrl + C でログデータの保存を止める。
その後、ターミナル1〜6についても同様に Ctrl + C で止めること。
ログデータからの地図生成
ターミナル1 $ roscore ターミナル2 $ rosparam set use_sim_time true $ rosrun gmapping slam_gmapping scan:=scan
上の2つのターミナルを実行させて準備が整ったら、また新しくターミナルを作り、次のコマンドでログデータを再生を始める。
ターミナル3 $ cd ~/ros_study $ rosbag play log_name_timestamp.bag --clock
ログデータの再生が終わるのを暫く待つ。 スペックの低いPCを使う場合は、“$ rosbag play log_name_timestamp.bag –clock -r 0.3” のようにして、再生速度を遅くするとよい 追記:今どきのPCならば1倍速でも問題ないが、ゆっくり再生した方が綺麗に地図が作られる。(処理が間に合っていない場合、古いscanデータを読み飛ばして、最新のscanデータのみを使って地図を作るため)
再生が終わったら、さらに新しくターミナルを作り、次のコマンドで生成した地図を保存する。
ターミナル4 $ cd ~/ros_study $ rosrun map_server map_saver -f map_name //map_name は mapを作った場所にしておくとよい
~/ros_studyに生成した地図が保存されているので、ファイルを開いて見てみると良い。
オンラインによる地図生成
ターミナル1 $ roscore ターミナル2(ロボットとPCを接続しておくこと) $ ypspur-coordinator -p your_robot.param -d /dev/ttyACM0 ターミナル3 $ rosrun ypspur_ros_bridge ypspur_ros_bridge ターミナル4 $ rosrun hokuyo_node hokuyo_node _port:=/dev/ttyACM1 または、 $ rosrun hokuyo_node hokuyo_node _port:=/dev/ttyACM0 _min_ang:=-2.08621382713 _max_ang:=2.08621382713 ターミナル5 $ rosrun sensor_tf_test sensor_tf_test ターミナル6 $ rosrun gmapping slam_gmapping scan:=scan ターミナル7 $ rosrun joystick_commander joystick_commander /dev/input/js0
ロボットを走らせる。 走らせ終わったら、今までのターミナルを止めずに新しくターミナルを作り、次のコマンドで地図を保存する。
ターミナル8 $ mkdir -p ~/ros_study2015/map //地図を保存する場所を作っておく $ cd ~/ros_study2015/map $ rosrun map_server map_saver -f map_name
地図生成の様子をrvizで見る
地図を生成している間($rosrun gmapping slam_gmappingを動作させている間)、rvizを立ち上げることで 地図生成の様子を見ることができる。
$rosrun rviz rviz
下記の画面のようにして、“/map”を追加する。
“Fixed Flame”を“map”か“odom”にすると地図が作られていく様子が表示される。(下記の画像は、“odom”だが“map”の方がよい)
<color red>rvizを閉じる前に、設定を保存しておくこと</color>
gmappingのパラメータについて
http://wiki.ros.org/gmapping の “4.14 Parameters”を参考に変更する。
例 つくばチャレンジ2014 robolin.jpで使用
$ rosrun gmapping slam_gmapping scan:=scan _particles:=50 _map_update_interval:=1.0 _srr:=0.001 _srt:=0.002 _str:=0.001 _stt:=0.002 _sigma:=0.2 _lstep:=0.2 _astep:=0.2 _iterations:=5 _delta:=0.2 _occ_thresh:=0.15
gmappingがエラーで動かないときの対処法(ver.1.3.7)
Scan message must contain angles from -x to x, i.e. angle_min = -angle_max というエラーが出る人は、 下記のコマンドでgmappingのリビジョンを古いのにすることで対処できる。
$ cd ~/catkin_ws/src $ git clone https://github.com/ros-perception/slam_gmapping.git $ cd ~/catkin_ws/src/slam_gmapping $ git reset --hard 30bab91de515984888fb96b208382ddc3dbaec96 $ cd ~/catkin_ws $ catkin_make $ rosrun gmapping slam_gmapping scan:=scan
この対処法の他にurg_nodeを使って、angle_minとangle_maxのパラメータを変更することでも対応できる。
追記:ver1.3.8でこのバグは直りました。