NO IMAGE

概述

http://wiki.ros.org/gmapping

Gmapping包包含OpenSlam的Gmapping的一個ROS封裝。Gmapping 的ROS節點slam_gmapping提供基於鐳射的SLAM(同時定位和建立地圖)。依靠移動機器人收集的鐳射和位姿資料,使用slam_gmapping可以建立2維柵格地圖。

外部文件

主要是一個第三方包。

硬體需求

使用slam_gmapping,需要移動機器人提供里程計資料,並且水平安裝固定鐳射測距儀。slam_gmapping節點試圖轉換每個掃描輸入資料到odom(里程計)tf座標系。見”Required tf transforms”更多需要的轉換。

例子

機器人用鐳射掃描釋出建立地圖在base_scan話題上:

 

  1. rosrun gmapping slam_gmapping scan:=base_scan  

節點

slam_gmapping

節點slam_gmapping採用sensor_msgs/LaserScan訊息,並且構建地圖(nv_msgs/OccupancyGrid)。地圖可以通過topic或service檢索。

訂閱話題

tf(tf/tfMessage)

      轉換需要涉及鐳射座標系,基座座標系和里程計座標系。

scan(sensor_msgs/LaserScan)

    從鐳射掃描建立地圖

釋出話題

 map_metadata (nav_msgs/MapMetaData)

     從這個話題獲得地圖資料,這個話題是被鎖存的,並定期更新。

map (nav_msgs/OccupancyGrid)

    從這個話題獲得地圖資料,這個話題是被鎖存的,並定期更新。

~entropy (std_msgs/Float64)

    機器人位姿分佈熵的估計(值越高表示越大的不確定性)。

服務

dynamic_map(nav_msgs/GetMap)

    呼叫這個服務來獲取地圖資料。

引數

http://wiki.ros.org/gmapping

· inverted_laser (string, default: “false”)

   (REMOVED in 1.1.1; transform data is used instead) 鐳射是朝上安裝(掃描是逆時     針), 還 是朝下安裝 (掃描是順時針)?

· throttle_scans (int, default: 1)

   鐳射雷達每掃描一週跳過多少掃描。

· base_frame (string, default: “base_link”)

   移動基座的座標系。

· map_frame (string, default: “map”)

   地圖座標系。

· odom_frame (string, default: “odom”)

   里程計系統的座標系。

· map_update_interval (float, default: 5.0)

   地圖更新的時間間隔(單位:seconds)。更新間隔越小,計算負荷越大。

· maxUrange (float, default: 80.0)

   鐳射雷達最大可用距離。光束被裁減成這個值。

· sigma (float, default: 0.05)

   用作結束點匹配。

· kernelSize (int, default: 1)

   在核心內尋找一個對應。

· lstep (float, default: 0.05)

   平移的最優步長。

· astep (float, default: 0.05)

   旋轉的最優步長。

· iterations (int, default: 5)

   掃描匹配的迭代次數。

· lsigma (float, default: 0.075)

   波束的sigma,用來計算似然估計。 

· ogain (float, default: 3.0)

   評估似然的增益,用來平滑重取樣的影響。

· lskip (int, default: 0)

   每次掃描跳過的波束。

· minimumScore (float, default: 0.0)

   評價掃描匹配良好結果的最低分數。 

· srr (float, default: 0.1)

   平移函式在平移時的里程計誤差 (rho/rho)。

· srt (float, default: 0.2)

   旋轉函式在平移時的里程計誤差 (rho/theta)

· str (float, default: 0.1)

   平移函式在旋轉時的里程計誤差 (theta/rho)

· stt (float, default: 0.2)

   旋轉函式在旋轉時的里程計誤差 (theta/theta)

· linearUpdate (float, default: 1.0)

   機器人平移這麼遠,處理一次掃描。

· angularUpdate (float, default: 0.5)

   機器人旋轉這個角度,處理一次掃描。

· temporalUpdate (float, default: -1.0)

   如果上一次掃描處理比更新時間長,處理一次掃描。值小於0,將會關閉更新相關    的時間。

· resampleThreshold (float, default: 0.5)

   基於重取樣閾值的Neff。

· particles (int, default: 30)

   濾波器的粒子數。

· xmin (float, default: -100.0)

   初始地圖尺寸。

· ymin (float, default: -100.0)

   初始地圖尺寸。

· xmax (float, default: 100.0)

       初始地圖尺寸。

· ymax (float, default: 100.0)

   初始地圖尺寸。

· delta (float, default: 0.05)

   處理引數 (地圖的解析度)。

· llsamplerange (float, default: 0.01)

   似然的平移取樣距離。

· llsamplestep (float, default: 0.01)

   似然的平移取樣步長。

· lasamplerange (float, default: 0.005)

   似然的角度取樣距離。

· lasamplestep (float, default: 0.005)

   似然的角度取樣步長。

· transform_publish_period (float, default: 0.05)

   轉換髮布間隔,單位:seconds

· occ_thresh (float, default: 0.25)

   Gmapping佔用值的閾值。有大一些的佔用值的單元格,被視為佔用。

· maxRange (float)

   感測器的最大距離。

 

需要的tf轉換

<the frame attached to incoming scans> → base_link

         通常是一個固定值, 由robot_state_publisher或 tf static_transform_publisher.定期廣播。

base_link → odom

      通常有里程計系統提供(例如,移動機器人的驅動)

提供的tf轉換

map → odom

     在地圖座標系中機器人位姿的當前估計。

http://wiki.ros.org/pr2_controllers/Tutorials/Using%20the%20base%20controller%20with%20odometry%20and%20transform%20information