<launch>
<!--//后為wiki官網的參數說明
()中為粗讀算法參數說明及理解
×××面臨的問題常用地圖有2種:1.基于特征,僅指明在指定位置(地圖中包含的對象的位置)的環境的形狀。特征表示使得調節對象的位置變得簡單,作為附加的檢測結果。這樣的地圖在地圖構建領域很受歡迎。2.基于位置,這樣的地圖是有體積的,它們為環境中的許多位置都提供標簽。不僅包括環境物體的信息,也包括了對象沒有物體的信息(如空閑空間),比較經典的占用柵格地圖就是基于位置的。根據官網信息,amcl采用的是結合自適應(增強蒙特卡洛Augmented_MCL)和庫爾貝克-萊不勒散度采樣KLD_Sampling_MCL(蒙特卡洛定位的一個變種)。1.KLD_Sampling_MCL隨時間改變粒子數,改良了度過初期后的蒙特卡洛大樣本集合的資源浪費。兩個kld_配置參數就是KLD的參數。對于每次粒子濾波迭代,KLD采樣以概率1-δ確定樣本數(1-δ就是kld_z配置參數),使得真實的后驗與基于采樣的近似之間的誤差小于ε(ε就是kld_err配置參數).kld_z=0.99,kld_err=0.05,直方圖位大小為15cm*15cm*15°就能取得良好的結果。2.Augmented_MCL解決的是從機器人綁架或全局定位失效中恢復的問題。兩個recovery_alpha_配置參數就是用于失效恢復的。隨機采樣以max{0.0,1.0-w(fast)/w(slow)}概率增加。如果短期似然劣于長期似然則增加隨機采樣,這種方法,測量似然的一個突然衰減將引起隨機采樣的數目增加。w=w+α(Wavg-w)--Wavg當前測量模型的權重,w為短期(w(fast))或長期(w(slow))平滑估計,α為與w對應的recovery_alpha_參數。--><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"/> ? //更新濾波器時,每次掃描中多少個等間距的光束被使用(減小計算量,測距掃描中相鄰波束往往不是獨立的可以減小噪聲影響,太小也會造成信息量少定位不準)
<!--
這4個laser_z參數,在動態環境下的定位時用于異常值去除技術(還有一種狀態增廣技術-將隱藏狀態包含進狀態估計,缺點是計算復雜,acml定位未使用這種定位)
這種定位思想是環境中的動態物體總是會獲得比靜態地圖障礙物更短的讀數(人在障礙物后面是掃描不到的-假如不考慮體積,比如單個激光光束不用考慮體積),利用這樣的不對稱性去除異常值
缺點是:在其他可改變環境的其他類型情景(如去除障礙物)時,這樣的非對稱性可能不存在,但相同概率分析通常是可適用的。因為每一個異常值都被舍棄了,缺少對稱性的缺點可能是從全局定位失效中恢復變得不可能。這種情況下,×××強加額外約束(如限制部分可能已被破壞的測量值)是有意義的(×××怎么約束)。(這里說的舍棄與likelihood_field模型的舍棄有區別,這里定位是先計算測量值對應非預期物體的概率(意外對象概率/混合概率)大于用戶設定的閥值(amcl配置參數里貌似沒有這個?)舍棄,而似然域概率是舍棄的超出最大測量范圍的值,不計算概率。)
(針對這個缺點不想改代碼的粗暴又好用省心的處理方式可能是構圖的時候將可移動的障礙物搬走,還有更直接的辦法就是PS)
最后,概率由這4個權重乘他們對應的概率然后相加,算法中4個權重相加等于1(這里默認值不等于1,估計做了歸一化)。
這6個laser_參數可以用learn_intrinsic_parameters算法計算,該算法是期望值極大化算法,是估計極大似然參數的迭代過程。(×××好吧,amcl好像并沒有做這個工作)
--><param name="laser_z_hit" value="0.5"/> //模型的z_hit部分的混合權值,默認0.95(混合權重1.具有局部測量噪聲的正確范圍--以測量距離近似真實距離為均值,其后laser_sigma_hit為標準偏差的高斯分布的權重)<param name="laser_z_short" value="0.05"/> //模型的z_short部分的混合權值,默認0.1(混合權重2.意外對象權重(類似于一元指數關于y軸對稱0~測量距離(非最大距離)的部分:--ηλe^(-λz),其余部分為0,其中η為歸一化參數,λ為laser_lambda_short,z為t時刻的一個獨立測量值(一個測距值,測距傳感器一次測量通常產生一系列的測量值)),動態的環境,如人或移動物體)<param name="laser_z_max" value="0.05"/> //模型的z_max部分的混合權值,默認0.05(混合權重3.測量失敗權重(最大距離時為1,其余為0),如聲吶鏡面反射,激光黑色吸光對象或強光下的測量,最典型的是超出最大距離)<param name="laser_z_rand" value="0.5"/> //模型的z_rand部分的混合權值,默認0.05(混合權重4.隨機測量權重--均勻分布(1平均分布到0~最大測量范圍),完全無法解釋的測量,如聲吶的多次反射,傳感器串擾)<param name="laser_sigma_hit" value="0.2"/> //被用在模型的z_hit部分的高斯模型的標準差,默認0.2m<param name="laser_lambda_short" value="0.1"/> //模型z_short部分的指數衰減參數,默認0.1(根據ηλe^(-λz),λ越大隨距離增大意外對象概率衰減越快)<param name="laser_likelihood_max_dist" value="2.0"/> //地圖上做障礙物膨脹的最大距離,用作likelihood_field模型(likelihood_field_range_finder_model只描述了最近障礙物的距離,(目前理解應該是在這個距離內的障礙物膨脹處理,但是算法里又沒有提到膨脹,不明確是什么意思).這里算法用到上面的laser_sigma_hit。似然域計算測量概率的算法是將t時刻的各個測量(舍去達到最大測量范圍的測量值)的概率相乘,單個測量概率:Zh * prob(dist,σ) +avg,Zh為laser_z_hit,avg為均勻分布概率,dist最近障礙物的距離,prob為0為中心標準方差為σ(laser_sigma_hit)的高斯分布的距離概率)<param name="laser_model_type" value="likelihood_field"/> //模型使用,可以是beam, likehood_field, likehood_field_prob(和likehood_field一樣但是融合了beamskip特征--官網的注釋),默認是“likehood_field”?//里程計模型參數<!--×××里程計模型并沒有涉及機器人漂移或打滑的情況,一旦出現這樣的情況,后續定位基本廢了,雖然Augmented_MCL有失效恢復,但是實際運行中耗時太長且結果不太理想(位置居然跳,這很不合理,可能參數配置不太好)--><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”的情況--wiki官網的注釋)<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),用于初始化高斯分布濾波器。(initial_pose_參數決定撒出去的初始位姿粒子集范圍中心)<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),用于初始化高斯分布濾波器。(initial_cov_參數決定初始粒子集的范圍)<param name="initial_cov_yy" value="0.5*0.5"/> //初始位姿協方差(y*y),用于初始化高斯分布濾波器。(同上)<param name="initial_cov_aa" value="(π/12)*(π/12)"/> //初始位姿協方差(yaw*yaw),用于初始化高斯分布濾波器。(粒子朝向的偏差)</node>
</launch>
?