1. 从高斯分布中随机采样,生成初始粒子

以global坐标系为参考坐标系,以初始位姿(默认为0)作为初始粒子分布的均值,从参数服务器中获取位姿的协方差矩阵,实现的函数在AmclNode::handleMapMessage中,关键代码如下:

updatePoseFromServer(); // 从参数服务器更新初始位姿
pf_vector_t pf_init_pose_mean = pf_vector_zero();
pf_init_pose_mean.v[0] = init_pose_[0];
pf_init_pose_mean.v[1] = init_pose_[1];
pf_init_pose_mean.v[2] = init_pose_[2];
pf_matrix_t pf_init_pose_cov = pf_matrix_zero();
pf_init_pose_cov.m[0][0] = init_cov_[0];
pf_init_pose_cov.m[1][1] = init_cov_[1];
pf_init_pose_cov.m[2][2] = init_cov_[2];
pf_init(pf_, pf_init_pose_mean, pf_init_pose_cov); // 以均值0和相应的初始协方差初始化滤波器
pf_init_ = false;

生成后的粒子分布示意如下图所示:

其中,initial_pose在global坐标系下的坐标为(0, 0, 0)

2. 预测粒子位姿

当接收到里程计信息后,从里程计模型中采样,估计粒子群的预测位姿,关键实现函数为AMCLOdom::UpdateAction,示意图如下所示:

如上图所示,经过机器人的运动,蓝色粒子群从里程计的反馈中采样,转移到了黄色粒子群的分布。

里程计反馈的信息是odom_delta,但是由于里程计固有的高斯随机误差,所以实际的位姿变化是(odom_delta - gussian_noise),而这其中,对于粒子群的每一次计算,gussian_noise的值是不一样的,其值的服从pdf(0, alpha * odom_delata)。

由于里程计估计的误差,参考蓝色粒子分布,预测后的黄色粒子分布更为分散,状态的不确定性提高。

3. 更新粒子位姿

当接收到测量数据(以激光测量为例)后,通过测量模型,将测量数据放到各个粒子的位姿下,判断测量数据发生的可能性,以这个可能性来更新粒子的权重。

以测量似然域模型为例:将激光的测量数据放到各个粒子位姿下,然后计算激光测量的端点与地图最近障碍物的距离,距离越小激光测量数据发生的可能性越大,粒子的权重越大。

代码中的关键实现函数是AMCLLaser::UpdateSensor,示意图如下所示,其中粒子颜色越深,权重越大。

4. 重采样

如果打开了有选择重采样,程序会判断粒子集合权重的方差,方差越大有效的粒子越小,粒子退化越严重,此时则需要进行重采样,否则可以跳过此步骤。

重采样之前,程序会维持粒子群的短期权重(w_fast)和长期权重(w_slow)的平均值,并以max[0, 1-w_fast/w_slow]的概率增加随机粒子,否则,进行低方差重采样算法。

正常情况下,如果没有发生如机器人绑架情况,增加随机粒子的概率很低,暂时先不考虑。重采样之后,粒子的数量不变,权重较小的粒子将被过滤掉,权重较大的粒子将被复制,程序中的关键实现函数是pf_update_resample,示意图如下所示:

其中,颜色越深的位置粒子的数量越多。

5. 将重采样后的粒子放入直方图中

将重采样后粒子的位姿,放入到对应的直方图中。用kd-tree维护直方图的数据结构,直方图的位姿作为key,粒子的权重作为value。关键实现函数是:pf_kdtree_insert。示意图如下,其中,直方图内粒子的数量越多,直方图的颜色越深,代表该直方图的权重越大。

对应amcl中的kd-tree的插入,以距离相差最大的维度作为主轴,每一个kd-tree的节点都存放了直方图的坐标信息,示意图如下:


这里kd-tree的作用主要是在下一步聚类的时候,方便查找相邻的直方图,提高查找的效率。

6. 聚类统计结果

递归查找每个直方图周围9个固定距离(这里使用一个直方图边的尺寸作为距离)是否有包含粒子的直方图,如果有则聚为一类,关键实现函数是:pf_cluster_stats,示意图如下:

其中,明显可见c1为权重最高的类。再次变量粒子群,找到c1中的粒子(实现函数:pf_kdtree_get_cluster),取它们位姿的均值作为最终结果发布。

图说slam(一):amcl定位算法主要流程概念图解相关推荐

  1. 鉴智机器人高薪诚聘 | 3D视觉、SLAM、SLAM/VIO融合定位算法工程师等多个岗位

  2. 大疆车载招聘|SLAM、地图定位、感知算法、机器学习算法工程师

    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁.如果你需要我们帮助你发布实习或全职岗位,请添加微信号「CV_LAB」. 公司介绍 大疆车载是大疆旗下专门 ...

  3. 机器人学习--定位算法AMCL全局定位方案

    ROS中已经集成了AMCL(自适应蒙特卡洛定位)的解决方案,按照要求测试一般都没问题. 源码或者相关细节分析参考:机器人学习--定位算法AMCL详解_GGY1102的博客-CSDN博客_amcl定位 ...

  4. ROS导航小车2 AMCL(蒙特卡洛)粒子滤波定位算法(仅作个人记录)

    AMCL原理概念 AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位,A也可以理解为augmented,是机器人在二维移动过程中概率定位系统,采用粒子滤波 ...

  5. 无人机slam定位算法调研

    1.相关博客,知乎,网页 1.室内无源定位-激光SLAM在无人机上的飞行测试 2.高速飞行的无人机用SLAM怎样导航 3.[泡泡图灵智库]面向无人机的高效双目SLAM 2.相关论文 无人机景象匹配视觉 ...

  6. 机器人学习--定位算法AMCL详解

    一.基本概念 参考:Robot Localization AMCL原理以及代码_sinat_37011812的博客-CSDN博客 注释:本部分内容CSDN上多个博主都有介绍,不知道谁是原创.暂且附上上 ...

  7. rssi室内定位算法原理_一种基于RSSI测距的室内定位方法与流程

    本发明涉及室内定位领域,尤其涉及一种基于RSSI测距的室内定位方法. 背景技术: : 室内无线定位,是指利用无线网络和定位终端提供待测节点位置.速度和方向等相关信息的服务.对于一个定位算法而言,评价其 ...

  8. CVPR 2021| 端到端场景无关视觉定位算法(SuperGlue一作出品)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 今天要介绍的文章是"Back to the Feature: Learning Robust ...

  9. 计算机视觉之三维重建——深入浅出SFM系统与SLAM系统的核心算法

    文章目录 第一章:摄像机几何 1. 针孔模型&透镜 1.1 小孔成像原理 1.2 针孔相机数学模型 1.3 透镜 (1)焦距 (2)近轴折射模型(带透镜的小孔成像模型) (3)失焦 (4)径向 ...

最新文章

  1. 成功解决基于VS2015(Visual Studio2015)编写C++程序调试时弹出窗口一闪而过的问题
  2. Android—数据持久化、SP源码
  3. java 变量初始化_浅谈Java变量的初始化顺序详解
  4. 甘肃民族师范学院计算机科学系,甘肃民族师范学院计算机科学与技术专业2016年在甘肃理科高考录取最低分数线...
  5. perl中替换文本一例
  6. mysql表损坏自动修复工具_对MySQL数据表(已损坏)的修复
  7. Node.js基础学习(第二幕)
  8. 拓端tecdat|Python、R对小说进行文本挖掘和层次聚类可视化分析案例
  9. ASP.NET MVC架构与实战系列之三:MVC控件解析
  10. 开发板串口复用的简单实现(一个串口连接二个串口模块)
  11. 2018年12月份计算机,CPU天梯图2018年12月最新版 十二月台式电脑CPU性能排行
  12. 湖南工大计算机学院大一分班,不懈奋斗,书写无悔青春 --中国矿业大学计算机学院14-05班获评校级“优良学分班”称号...
  13. Python札记 -- 切片赋值
  14. JVM之运行时数据区(方法区)
  15. JS简单实现鼠标跟随
  16. 出现 NameError: name ‘re’ is not defined 的原因
  17. localhost是什么?
  18. 窗体中添加标签Label、Icon图标
  19. docker privileged
  20. 安装dotnetfx3.5有感

热门文章

  1. JavaScript语法糖写法--JS代码优化
  2. 数据结构—— 一元多项式的运算(相加,相减,相乘)【C语言实现】
  3. 03. 交换机的Telnet远程登陆配置
  4. 数学建模——评价模型
  5. 2.5A强驱动能力,舞台灯光驱动TMI8263锻造“中国芯”
  6. 物联网安全威胁与解决方案调研
  7. 接口测试到底测试什么?
  8. Java高并发程序设计(三)——JDK并发包(二)
  9. Android实战(四)——正能量日报
  10. 数据库的升序降序排列