amcl说明
介紹
文章中使用下面算法:sample_motion_model_odometry, beam_range_finder_model, likelihood_field_range_finder_model, Augmented_MCL, 和 KLD_Sampling_MCL.
amcl讀入激光地圖,激光掃描數據,和tf變換信息,并且輸出位姿估計。啟動時,amcl根據提供的參數初始化粒子濾波器。注意,由于默認,如果沒有參數被設置,初始的濾波器狀態將適度地標定粒子點云中心在(0,0,0) 。
1. 參數配置說明
<launch><node pkg="amcl" type="amcl" name="amcl" output="screen"><!-- Publish scans from best pose at a max of 10 Hz --> //全部濾波器參數<param name="min_particles" value="500"/> //允許的粒子數量的最小值,默認100<param name="max_particles" value="5000"/> //允許的例子數量的最大值,默認5000<param name="kld_err" value="0.05"/> //真實分布和估計分布之間的最大誤差,默認0.01<param name="kld_z" value="0.99"/> //上標準分位數(1-p),其中p是估計分布上誤差小于kld_err的概率,默認0.99<param name="update_min_d" value="0.2"/> //在執行濾波更新前平移運動的距離,默認0.2m<param name="update_min_a" value="0.5"/> //執行濾波更新前旋轉的角度,默認pi/6 rad<param name="resample_interval" value="1"/> //在重采樣前需要的濾波更新的次數,默認2<param name="transform_tolerance" value="0.1"/> //tf變換發布推遲的時間,為了說明tf變換在未來時間內是可用的<param name="recovery_alpha_slow" value="0.0"/> //慢速的平均權重濾波的指數衰減頻率,用作決定什么時候通過增加隨機位姿來recover,默認0(disable),可能0.001是一個不錯的值<param name="recovery_alpha_fast" value="0.0"/> //快速的平均權重濾波的指數衰減頻率,用作決定什么時候通過增加隨機位姿來recover,默認0(disable),可能0.1是個不錯的值<param name="gui_publish_rate" value="10.0"/> //掃描和路徑發布到可視化軟件的最大頻率,設置參數為-1.0意為失能此功能,默認-1.0<param name="save_pose_rate" value="0.5"/> //存儲上一次估計的位姿和協方差到參數服務器的最大速率。被保存的位姿將會用在連續的運動上來初始化濾波器。-1.0失能。<param name="use_map_topic" value="false"/> //當設置為true時,AMCL將會訂閱map話題,而不是調用服務返回地圖。也就是說,當設置為true時,有另外一個節點實時的發布map話題,也就是機器人在實時的進行地圖構建,并供給amcl話題使用;當設置為false時,通過map server,也就是調用已經構建完成的地圖。在navigation 1.4.2中新加入的參數。<param name="first_map_only" value="false"/> //當設置為true時,AMCL將僅僅使用訂閱的第一個地圖,而不是每次接收到新的時更新為一個新的地圖,在navigation 1.4.2中新加入的參數。 //激光模型參數<param name="laser_min_range" value="-1.0"/> //被考慮的最小掃描范圍;參數設置為-1.0時,將會使用激光上報的最小掃描范圍<param name="laser_max_range" value="-1.0"/> //被考慮的最大掃描范圍;參數設置為-1.0時,將會使用激光上報的最大掃描范圍<param name="laser_max_beams" value="30"/> //更新濾波器時,每次掃描中多少個等間距的光束被使用<param name="laser_z_hit" value="0.5"/> //模型的z_hit部分的最大權值,默認0.95<param name="laser_z_short" value="0.05"/> //模型的z_short部分的最大權值,默認0.1<param name="laser_z_max" value="0.05"/> //模型的z_max部分的最大權值,默認0.05<param name="laser_z_rand" value="0.5"/> //模型的z_rand部分的最大權值,默認0.05<param name="laser_sigma_hit" value="0.2"/> //被用在模型的z_hit部分的高斯模型的標準差,默認0.2m<param name="laser_lambda_short" value="0.1"/> //模型z_short部分的指數衰減參數,默認0.1<param name="laser_likehood_max_dist" value="2.0"/> //地圖上做障礙物膨脹的最大距離,用作likehood_field模型<param name="laser_model_type" value="likelihood_field"/> //模型使用,可以是beam, likehood_field, likehood_field_prob(和likehood_field一樣但是融合了beamskip特征),默認是“likehood_field” //里程計模型參數<param name="odom_model_type" value="diff"/> //模型使用,可以是"diff", "omni", "diff-corrected", "omni-corrected",后面兩 個是對老版本里程計模型的矯正,相應的里程計參數需要做一定的減小<param name="odom_alpha1" value="0.2"/> //指定由機器人運動部分的旋轉分量估計的里程計旋轉的期望噪聲,默認0.2<param name="odom_alpha2" value="0.2"/> //制定由機器人運動部分的平移分量估計的里程計旋轉的期望噪聲,默認0.2<!-- translation std dev, m --><param name="odom_alpha3" value="0.8"/> //指定由機器人運動部分的平移分量估計的里程計平移的期望噪聲,默認0.2<param name="odom_alpha4" value="0.2"/> //指定由機器人運動部分的旋轉分量估計的里程計平移的期望噪聲,默認0.2<param name="odom_alpha5" value="0.1"/> //平移相關的噪聲參數(僅用于模型是“omni”的情況)<param name="odom_frame_id" value="odom"/> //里程計默認使用的坐標系<param name="base_frame_id" value="base_link"/> //用作機器人的基坐標系<param name="global_frame_id" value="map"/> //由定位系統發布的坐標系名稱<param name="tf_broadcast" value="true"/> //設置為false阻止amcl發布全局坐標系和里程計坐標系之間的tf變換 //機器人初始化數據設置<param name="initial_pose_x" value="0.0"/> //初始位姿均值(x),用于初始化高斯分布濾波器。<param name="initial_pose_y" value="0.0"/> //初始位姿均值(y),用于初始化高斯分布濾波器。<param name="initial_pose_a" value="0.0"/> //初始位姿均值(yaw),用于初始化高斯分布濾波器。<param name="initial_cov_xx" value="0.5*0.5"/> //初始位姿協方差(x*x),用于初始化高斯分布濾波器。<param name="initial_cov_yy" value="0.5*0.5"/> //初始位姿協方差(y*y),用于初始化高斯分布濾波器。<param name="initial_cov_aa" value="(π/12)*(π/12)"/> //初始位姿協方差(yaw*yaw),用于初始化高斯分布濾波器。</node>
</launch>
Note:初始位置和初始方差也可在此文件中聲明。
2. 訂閱的話題
scan(sensor_msgs/LaserScan):激光掃描
tf(tf/tfMessage Message) :tf變換
Initialpose(geometry_msgs/PoseWithCovarianceStamped):用作初始化粒子濾波的均值和協方差
map(nav_msgs/OccupancyGrid):當 use_map_topic 被設置時,AMCL訂閱這個話題來獲得用作激光定位的地圖
3. 發布的話題
amcl_pose(geometry_msgs/PoseWithCovarianceStamped):在地圖中機器人的估計位姿,帶有標準差。
particlecloud(geometry_msgs/PoseArray):被濾波器操控的機器人位姿集
tf(tf/tfMessage Message):發布從里程計到地圖的tf變換(能夠通過參數odom_frame_id參數映射)
4. 服務
global_localization(std_srvs/Empty):初始化全局定位,然而所有例子被隨機撒在地圖中的無障礙區域
5. 調用的服務
static_map(nav_msgs/GetMap):amcl調用服務獲得地圖用作基于激光的定位;啟動塊在從這個服務獲得地圖
6. TF變換
amcl變換引入激光掃描到里程計坐標系(odom_frame_id)。所以就必須存在一條路徑從激光發布的坐標系經過tf樹到里程計坐標系。
執行細節是:在第一次激光掃描接收后,amcl查詢激光坐標系和base坐標系之間的變換,并且永久綁定它。所以amcl不能處理激光坐標系相對于base運動的情況。
下列圖片顯示使用里程計定位和AMCL定位之間的區別。在操作期間,amcl估計base坐標系相對于全局坐標系之間的變換,但是它僅僅發布全局坐標系和里程計坐標系之間的變換。更重要的是,這個變換考慮了航跡推算過程中發生的漂移。
總結
- 上一篇: sap 标准委外和工序委外_SAP FI
- 下一篇: 深度学习图像标注工具labelme