標籤:cal 動態 資料 http topic sudo 2d地圖 local 情況
本文介紹使用機器人記錄的tf變換和雷射掃描資料來建立2D地圖.並在ROS的圖形化類比環境rviz中通過重新回放記錄的資料作為機器人真實感應器採集的輸入,來觀測地圖動態建立過程.
1.ROS gmapping工具
ROS提供的gmapping包是用來產生地圖的,它是對著名的開源openslam包在ROS架構下的一個實現.這個包提供了對雷射裝置的slam,根據雷射裝置的輸入和姿態資料從而建立一個基於網格的2D地圖.它需要從ROS系統監聽許多Topic,並輸出一個Topic,即map(nav_msgs/OccupancyGrid),這也是Rviz的輸入Topic.
下載這個包的命令如下:sudo apt-get install ros-indigo-slam-gmapping
2.硬體要求
本文採用的是類比資料,不需要任何硬體需要.
gmapping需要使用實際的機器人擷取雷射或者深度資料.通常這些雷射距離探測器價格比較昂貴,ROS推薦使用的SCIP2.2, Hokuyo Model 04LX, 30LX ,SICK LMS2xx Lasers 價格都巨貴無比,而且尺寸都較大。ROS使用的廉價機器人TurtleBot使用的則是深度相機Kinnect來類比,其價格在接近千元.
3.資料包準備過程
1)資料包的準備
下載ROS提供的雷射資料擷取記錄檔案
wget http://pr.willowgarage.com/data/gmapping/basic_localization_stage.bag
2)使用機器人建立自己的bag包
a)給機器人安裝雷射器,確保發行就緒變換資料,且可以遙控操作
b)啟動掃描和變換資料記錄
rosbag record -O mylaserdata /base_scan /tf
目前的目錄將建立一個名為mylaserdata_<DATE>-topic.bag的檔案
c)讓機器人動起來
d)kill掉rosbag使用者可以看到記錄檔案已經建立
4.操作過程
1)啟動節點管理器master
roscore
2)配置ROS啟用重放資料中的時間而非本機時間,影響整個系統所有時間API的輸出結果.在預設情況下,ROS使用ubuntu系統的時間,也就是牆上時鐘時間(wall clock).但我們重播一個記錄曆史檔案時,裡面記錄的是曆史時間,所以我們需要告訴ROS從現在起開始啟用類比時間.
rosparam set use_sim_time true
3)運行slam_gmapping節點,它將在base_scan主題上監聽雷射掃描資料並建立地圖,base_scan是模擬器rosbag發布的.
Note:在PR2上裡程座標系名字為odom_combined
命令為:rosrun gmapping slam_gmapping scan:=base_scan _odom_frame:=odom_combined
4)重新開啟一個終端,使用模擬器rosbag啟動bag包回放,將資料提供給slam_gmapping節點.
rosbag play --clock basic_localization_stage.bag
5)啟動rviz,在左下方選擇add,然後選擇map,建立一副空地圖;接著指定rviz的topic為/map可以監聽到地圖資料
rosrun rviz rviz
6)使用map_server功能包的map_saver儲存新地圖到磁碟(等rosbag結束後)
rosrun map_server map_saver -f my_map
此時可以看到本地地圖map.gpm已經產生,可以用映像瀏覽器(gimp, eog, gthumb, 等等)開啟查看。例如eog my_map1.pgm
注意:最後別忘了重新設定use_sim_time參數,即使用命令:rosparam set use_sim_time false
5.下面來看一下顯示的節點圖
1.
2.
3.
4.
5.
6.
查看它的服務和話題
在slam_gmapping中使用Log資料建立地圖