====== 4. 地図生成 ====== # 2015-06-05 AND ===== slam_gmappingのインストール ===== kinetic環境の人は, $ sudo apt-get install ros-kinetic-slam-gmapping $ sudo apt-get install ros-kinetic-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/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_study $ cd ~/ros_study $ rosrun map_server map_saver -f map_name //map_name は mapを作った場所、部屋名などにしておくとよい ===== オフラインによる地図生成 ===== ==== ログデータの保存 ==== ターミナル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 //log_name はlogデータを取得した場所を入れるとよい ログデータの保存が始まったら手動でロボットを走らせる。 走らせ終わったら、ターミナル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に生成した地図が保存されているので、ファイルを開いて見てみると良い。 ===== 地図生成の様子をrvizで見る ===== 地図を生成している間($rosrun gmapping slam_gmappingを動作させている間)、rvizを立ち上げることで 地図生成の様子を見ることができる。 $rosrun rviz rviz 下記の画面のようにして、"/map"を追加する。 {{:ros:study:fig4-1.png|}} "Fixed Flame"を"map"か"odom"にすると地図が作られていく様子が表示される。(下記の画像は、"odom"だが"map"の方がよい) {{:ros:study:fig4-2.png|}} rvizを閉じる前に、設定を保存しておくこと ===== 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