ROS 提供的 gmaping 包是用來生成地圖的,它是對著名的開源 OpenSlam 包在 ROS 框架下的一個實現。這個包提供了對激光設備的 Slam,根據激光設備的輸入和姿態數據從而建立一個基於網格的的2D地圖。它需要從 ROS 系統監聽許多 Topic,並輸出一個 Topic——map(nav_msgs/OccupancyGrid),這也是 RViz 的輸入 Topic。
sudo apt-get install ros-indigo-slam-gmapping
wget http://pr.willowgarage.com/data/gmapping/basic_localization_stage.bag
這是所有 ROS 操作的第一步,就像開機一樣。roscore
啟動後將終端掛起,另開終端進行其他程序。
配置 ROS 啟用重放數據中的時間而非本機時間,影響整個系統所有時間 API 的輸出結果。在默認情況下,ROS 使用 ubuntu 系統的時間,也就是牆上時鐘時間(wall clock)。但我們重播一個記錄歷史文件時,裡面記錄的是歷史時間,所以我們需要告訴ROS從現在起開始啟用模擬時間。rosparam set use_sim_time true
啟動 gmapping, 並監聽 scan_base topic 發來的消息。該 topic 是由模擬器發布的。rosrun gmapping slam_gmapping scan:=base_scan
啟動後將終端掛起,另開終端進行其他程序。
啟動 RViz,點擊 add 按鈕(左下方),在彈出的列表中選擇 map,點擊 OK,這時開始展現一個空的地圖。rosrun rviz rviz
最關鍵的一步,要告訴 RViz 生成 map 信息的 topic 是什麼,我們前面講到過,gmapping 輸出的 topic 是 /map ,因此將其 topic 配置成 /map。
啟動後將終端掛起,另開終端進行其他程序。
rosbag play --clock basic_localization_stage.bag
立即可以在 RViz 中可以看到地圖的動態建立了。
http://xxxxxx/Linuxjc/1165304.html TechArticle