机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛
問題描述: ROS 移動機器人建圖后,用Navigation導航包執行 起始位置到 目標位置的路徑規劃和導航行走的過程中。 機器人導航初始化的時候,剛加載地圖,如何讓移動機器人執行 全局定位 global localization,把max Nparticles的粒子數量均勻撒在整張地圖上?
?首先 在navigation的launch文件 amcl.launch 或者類似的文件中增加或修改以下內容,讓粒子的位置高斯分布協方差大一點。分布廣一點。 value值可以是4、8或者類似的值
<param name="initial_cov_xx" value="8"/>
<param name="initial_cov_yy" value="8"/>
<param name="initial_cov_zz" value="8"/>
方法:另開一個命令行控制臺窗口,執行一些命令 調用全局定位服務。
- rosservice call /global_localization "{}"
剛加載地圖時如下圖所示:
不管是空閑區域 free 還是占用區域 occupied 都撒了粒子。
重新開一個控制臺命令行窗口后,執行如下命令 (以下命令,每執行一次,粒子和小車的位置變化一次,但是仍然很難定位準確,只是隨機的全局定位貌似。)
- rosservice call /global_localization "{}"
- 結果如下所示,粒子遍布整張地圖的空閑區域,占用區域沒有粒子了。
參考:Robots/TIAGo/Tutorials/Navigation/Localization - ROS Wiki
執行命令:rosservice call /global_localization "{}"?
?request_nomotion_update?(std_srvs/Empty):該服務是手動的來更新粒子并發布新的粒子,可以使用如下命令來調用服務執行更新粒子的操作,該服務一般需要多次調用才能逐漸看到粒子收斂的效果:
如何讓粒子撒滿地圖后,一步一步地收斂,看到粒子收斂的過程,粒子簇的聚類 最后收斂到正確或錯誤位置后 只剩下一簇粒子堆。
1. 打開終端,打開實際gazebo空間
2. 再打開一個終端,在空間中建圖(house 或者其他場景)
3. 再打開一個終端,調用鍵盤控制小車移動包
4. 再打開一個終端,保存地圖
5. 關掉slam建圖, 再打開終端調用導航包
6. 按照本文上半部分內容,調節amcl文件內容,調用全局定位服務;
7. 之后根據鍵盤控制終端的前進后退或者轉動的操作,控制小車移動,rviz界面可以查看粒子收斂和移動的步驟過程。 直至最后收斂到正確或者錯誤的一簇粒子堆。
如何安裝ROS turtlebot3軟件包和依賴庫的參考:
Ubuntu16.04 + ROS kinetic + 激光slam-cartographer ROS + 數據仿真 + Turtlebot3仿真_GGY1102的博客-CSDN博客
總結
以上是生活随笔為你收集整理的机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人学习--定位算法AMCL全局定位方
- 下一篇: ORB-SLAM学习--GitHub上较