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