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