蒙特卡洛粒子滤波定位算法_ROS -- 最简单的自主ACML定位
生活随笔
收集整理的這篇文章主要介紹了
蒙特卡洛粒子滤波定位算法_ROS -- 最简单的自主ACML定位
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
關于定位的原理和算法:
ARUANTOU:自適應MCL(KLD采樣)?zhuanlan.zhihu.comARUANTOU:定位算法 -- MCL蒙特卡洛(粒子)濾波?zhuanlan.zhihu.com在Ros實現(xiàn)中,有一個AMCL的package,用的就是自適應濾波算法。這里主要記錄下自主定位在ros中的實現(xiàn)方式。
我們知道在粒子濾波定位的時候,需要結合地圖數(shù)據(jù)和機器人的初始位姿通過不斷的移動之后們,機器人就可以知道自己所在的位置。
在ros中我們可以通過這個button來進行初始位姿,但是這還是一個人為的過程,在實際應用中還是需要自動化的,這樣會顯得更大氣上檔次。
AMCL包是很強大的,研究這個包居然發(fā)現(xiàn)自身是支持自動自主定位的。內(nèi)部實現(xiàn)為一個service -- global_location. 我們只需要每次在運行amcl之后,通過client調(diào)用一下這個service,它就會在整個地圖數(shù)據(jù)的free空間布滿粒子,這樣機器人就可以通過自己的移動來不斷的過濾篩選出概率最高的那些粒子最終實現(xiàn)定位的功能。
先看下client的實現(xiàn):
#include "ros/ros.h" #include "std_srvs/Empty.h" #include <unistd.h> int main(int argc, char** argv) {ros::init(argc, argv, "DeliverRobot");ros::NodeHandle n;ros::ServiceClient client = n.serviceClient<std_srvs::Empty>("global_localization");std_srvs::Empty srv;int trytimes = 0;while(!(client.call(srv)) && trytimes < 5){ROS_ERROR("Failed call global localization");trytimes++;sleep(1);continue;}if(trytimes == 5){ROS_ERROR("Has try 5 times No useful!!!!!!!");}else{ROS_INFO("call global localization successful");}return 0; }然后通過修改launch文件,增加client node的添加:
<node pkg="deliver" type="deliver" name="deliver" output="screen"></node>只要加上這一句,在amcl啟動后,client會請求這個service,然后我們就可以通過rviz中看到最終的定位情況:
https://www.zhihu.com/video/1146572389180620800總結
以上是生活随笔為你收集整理的蒙特卡洛粒子滤波定位算法_ROS -- 最简单的自主ACML定位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 已经围上为何不算目_在湖人打球顺风顺水,
- 下一篇: 买房贷款下不来首付能退吗