gmapping幹了什麼

直接看gmapping的launch文件

<launch>
    <arg name="scan_topic" default="scan" />

    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">
        <param name="odom_frame" value="odom"/>
        <param name="map_update_interval" value="5.0"/>
        <!-- Set maxUrange < actual maximum range of the Laser -->
        <param name="maxRange" value="5.0"/>
        <param name="maxUrange" value="4.5"/>
        <param name="sigma" value="0.05"/>
        <param name="kernelSize" value="1"/>
        <param name="lstep" value="0.05"/>
        <param name="astep" value="0.05"/>
        <param name="iterations" value="5"/>
        <param name="lsigma" value="0.075"/>
        <param name="ogain" value="3.0"/>
        <param name="lskip" value="0"/>
        <param name="srr" value="0.01"/>
        <param name="srt" value="0.02"/>
        <param name="str" value="0.01"/>
        <param name="stt" value="0.02"/>
        <param name="linearUpdate" value="0.5"/>
        <param name="angularUpdate" value="0.436"/>
        <param name="temporalUpdate" value="-1.0"/>
        <param name="resampleThreshold" value="0.5"/>
        <param name="particles" value="80"/>
        <param name="xmin" value="-1.0"/>
        <param name="ymin" value="-1.0"/>
        <param name="xmax" value="1.0"/>
        <param name="ymax" value="1.0"/>
        <param name="delta" value="0.05"/>
        <param name="llsamplerange" value="0.01"/>
        <param name="llsamplestep" value="0.01"/>
        <param name="lasamplerange" value="0.005"/>
        <param name="lasamplestep" value="0.005"/>
        <remap from="scan" to="$(arg scan_topic)"/>
    </node>
</launch>

我們看到:
要求一個odom_frame:里程計座標系
要求一個scan: 雷達數據
先弄清楚什麼是座標系轉換:
一、首先要搞明白URDF、TF和odom的關係

ROS 中對於多座標系的處理是使用樹型表示,在機器人自主導航中,ROS會構建這幾個很重要的座標系。一般在urdf文件中都要定義base_link,它代表了機器人的主幹,其它所有的frame都是相對於base_link定義並粘在一起的。它們一起相對於大地圖map移動,讓機器人移動就是向tf發佈 geometry_msgs::TransformStamped 消息通知ros base_link相對於map的tf轉換關係。先看一下這幾個概念在ros中的定義:

base_link: 一般位於tf tree的最根部,物理語義原點一般爲表示機器人中心,爲相對機器人的本體的座標系。也就是機器人自己身上的座標系。

odom:一般直接與base_link 相鏈接,語義爲一個對於機器人全局位姿的粗略估計。取名來源於odometry(里程計),一般這個座標系的數據也是來源於里程計。對於全局位姿的估計方法很多,比如在hector SLAM與導航體系中,就採用了imu數據估計全局位姿,還有很多視覺里程計的算法(visual odometry)也能提供位姿估計。原點爲開始計算位姿那個時刻的機器人的位置。也就是 根據走過的路的里程信息,構建地圖的那個座標系。 顯然容易漂移。

map: 一般與odom(或者odom_combined)相連,語義爲一個經過先驗(或者SLAM)地圖數據矯正過的,在地圖中的位姿信息。與odom同爲全局座標系。原點爲地圖原點(地圖原點在地圖相應的yaml文件中有規定)。 也就是

各個Frames的關係

frame之間是按樹狀結構組織的。所以每個frame只有一個父節點和任意多個子節點。 上述幾個frame的關係:

map --> odom --> base_link

odom到base_link的座標轉換是從運動源計算出來廣播的。map到base_link的座標轉換是被定位模塊計算出來的. 但定位模塊不發佈map到base_link的轉換. 相反它先接受從odom到base_link的轉換, 再計算並廣播map到odom的位置轉換關係。

fixed_frame:RViz中認定的大世界就是fixed_frame

target_frame:Rviz中視覺跟蹤的frame是 target_frame

大致過程如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章