关于公共空间及其他,有没有人觉得自己笨现在的网论处于一种非常浮躁的状态

AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位 源于MCL算法嘚一种增强,本章简要介绍AMCL的算法原理并着重讲解源码包(详细算法原理请见)
AMCL是2D的概率定位系统这个方法是在已知地图中使用粒子滤波方法得到位姿的。输入激光雷达数据、里程计数据输出机器人在地图中的位姿。如果里程计没有误差完美的情况下,我们可以直接使用里程计信息推算出机器人(base_frame)相对里程计坐标系的位置但现实情况,里程计存在漂移以及无法忽略的累计误差所以AMCL采用先根据里程计信息初步定位base_frame,然后通过测量模型得到base_frame相对于map_frame(全局地图坐标系)的偏移也就知道了机器人在地图中的位姿。(注意这里虽然估計的是basemap的转换,但最后发布的是mapodom的转换可以理解为里程计的漂移。)
与MCL不同的地方是AMCL算法在机器人遭到绑架的时候会随机注入粒孓(injection of random particles),增加粒子的方法引起两个问题一是每次算法迭代中应该增加多少粒子,二是从哪种分布产生这些粒子
解决第一个问题可通过監控传感器测量的概率来评估增加粒子,即式

并将其与平均测量概率联系起来在粒子滤波中这个数量的近似容易根据重要性因子获取,洇为重要性权重是这个概率的随机估计其平均值为式

(1.1)中的期望概率。

订阅传感器信息代码及注释如下所示

 

订阅初始化位姿代码及注释如丅所示

 

在有初始位姿和传感器信息后需要将信息转换到在map对应的global_frame_id中进行处理,因此还需要订阅map信息

至此node函数中所有订阅话题相关的代碼已经讲解完成,与订阅相对应AMCL会发布一些话题,分别是amcl_pose(后验位姿)、particlecloud粒子位姿数组和一个检查激光雷达数据的定时器

节点文件发咘的话题包括输出后验位姿、粒子位姿和检查雷达的定时器,前者是AMCL的输出结果而后面两个话题的作用是使库文件实现更新。

AMCL输出的结果是机器人在地图中的位姿输出通过发布话题实现。其中发布的位置信息是后验位姿

关于后验位姿的讲解参考博客(后验=似然*先验)

與发布位姿相对应,AMCL也发布粒子位姿的数组以使粒子滤波实现更新,其代码如下所示

前述两个发布的话题是AMCL所输出的结果另外还有一個话题是一个15秒的定时器,用于反馈给激光雷达确认是否收到数据如果超过15秒未收到则会报错,如下所示

除了订阅和发布的话题之外AMCL囿发布四个服务以实现函数功能。

global_localization是没有给定初始位姿的情况下在全局范围内初始化粒子位姿其部分源码及注释如下

request_nomotion_update是没有运动模型更噺的情况下也暂时更新粒子群,判断没有运动时也将粒子群更新设置为true代码非常简单

set_map是设置地图信息,代码与订阅的话题相关

dynamic_reconfigure是动态参數配置器配置影响模型的参数信息,函数功能实现测距仪模型、里程计模型和AMCL所有参数的配置

本小节讲解了amcl_node.cpp文件的结构以及其订阅与发咘的通信机制结合了相关的源码讲解了其大致的结构,下面将对amcl_node.cpp文件中的main函数及其涉及的其他功能函数进行解读

main函数中判断初始化下argc為1时正常运行ROS的输入,当argc为3或者指定使用bag数据运行时会启用bag文件中的数据进行运行其代码及相关注释如下所示

至此,AMCL节点文件相关函数忣其功能大致讲解完成只要理解了第二章中图 2.1所标明的文件结构和联系,根据订阅和发布、main函数的主线来理解节点文件源码就变得非常嫆易接下来将讲解最后一部分——三个库文件中的函数架构和实现功能。

根据第一章原理的介绍AMCL算法的实现是接收里程计模型信息、傳感器模型信息,在map中通过粒子滤波的方式实现的机器人定位源码包的三个库文件sensors, mappf分别对应其功能的实现,下面将介绍这三个库文件嘚具体实现功能

pf粒子滤波部分是实现机器人定位的关键算法,也是库文件中函数最复杂、代码量最大的部分是之后改进AMCL定位效果着重偠尝试修改的部分。其库中包含eig3, pf, pf_draw, pf_kdtree, pf_pdf, pf_vector六个函数文件除了pf_draw其他文件都有对应的头文件,与sensors库函数互不相关不同的是六个函数文件中pf.c是关键文件负责输出粒子滤波的结果,几个文件实现功能的介绍如下所示

博主有两年多ROS的使用经验目前仍在不停研究中。本系列ROS及SLAM进阶教程将涵蓋ROS的进阶功能使用、机器人SLAM及导航的设计及研究等领域持续不断更新中。如果大家有相关问题或发现作者漏洞欢迎私戳同时欢迎关注收藏。

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

发布了6 篇原创文章 · 获赞 0 · 访问量 195

我要回帖

更多关于 有没有人觉得自己笨 的文章

 

随机推荐