日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

蒙特卡洛粒子滤波定位算法_ROS -- 最简单的自主ACML定位

發布時間:2024/10/8 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蒙特卡洛粒子滤波定位算法_ROS -- 最简单的自主ACML定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于定位的原理和算法:

ARUANTOU:自適應MCL(KLD采樣)?zhuanlan.zhihu.comARUANTOU:定位算法 -- MCL蒙特卡洛(粒子)濾波?zhuanlan.zhihu.com

在Ros實現中,有一個AMCL的package,用的就是自適應濾波算法。這里主要記錄下自主定位在ros中的實現方式。

我們知道在粒子濾波定位的時候,需要結合地圖數據和機器人的初始位姿通過不斷的移動之后們,機器人就可以知道自己所在的位置。

在ros中我們可以通過這個button來進行初始位姿,但是這還是一個人為的過程,在實際應用中還是需要自動化的,這樣會顯得更大氣上檔次。

AMCL包是很強大的,研究這個包居然發現自身是支持自動自主定位的。內部實現為一個service -- global_location. 我們只需要每次在運行amcl之后,通過client調用一下這個service,它就會在整個地圖數據的free空間布滿粒子,這樣機器人就可以通過自己的移動來不斷的過濾篩選出概率最高的那些粒子最終實現定位的功能。

先看下client的實現:

#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定位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。