SLAM——hector-slam算法原理解析

article/2025/8/28 2:48:00

1、hector-slam代码框架概述

      下载源码:git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

      原理解读参照:https://blog.csdn.net/weixin_40047925/article/details/80679496

       其中包含了许多用于仿真的文件,hector slam算法主要集中在hector mapping包中,同时核心的位姿估计和点云建立栅格图操作主要在文件HectorSlamProcessor.h的函数update中。如下:

       函数newPoseEstimateWorld = (mapRep->matchData(poseHintWorld, dataContainer, lastScanMatchCov))根据输入的激光点云数据和现有的栅格图进行对齐,这部分是整个代码的核心,主要思想是使用高斯牛顿优化代价函数,求取让代价函数达到最优的位姿偏量,从而求出当前机器人的位姿态。

       当然,如果已经知道机器人的准确位姿不需要进行上面的位姿解算,直接用函数mapRep->updateByScan(dataContainer, newPoseEstimateWorld)更新栅格地图。这部分算法原理比较简单,主要两个方面:一是,用对数表达每一个子栅格的概率值;二是,用Bresenham 画线算法来更新子栅格的概率值。

       为了说明上述算法原理,先介绍一部分的预备知识,然后再切入正题。

2、hector-slam预备知识

      2-1 占用栅格地图

       这里直接使用上述参考文章进行说明,假设机器人的位姿已知,那么经过每一次激光数据扫描,真实障碍物在栅格地图上的占用概率不断提升最终无限接近1,而没有障碍物的地方则趋近于0。整个栅格地图被分成了一定分辨率的子栅格,最终地图的概率分布如下:

     p(m|z_{1:t},x_{1:t})=\prod p(m_{i}|z_{1:t},x_{1:t})

       整个栅格图构建需要计算每一个子栅格的占用概率值。实际在表达栅格占用概率使用对数形式表达,好处是避免在0和1附近概率值不稳定的问题。具体如下:

     l_{t,i}=log\frac{p(m_{i}|z_{1:t},x_{1:t})}{1-p(m_{i}|z_{1:t},x_{1:t})}                         p(m_{i}|z_{1:t},x_{1:t})=1-\frac{1}{1+e^{l_{t,i}}}

        在实际使用栅格地图进行导航或者路径规划时,每一个栅格仅有三个状态:占用、空闲和未知,该三种状态仅需对p(m_{i}|z_{1:t},x_{1:t})或者l_{t,i}设定范围进行判断即可,比如hector slam中是l_{t,i}值大于0为占用,小于0为空闲,等于0为未知。

           2-2 非线性优化——高斯牛顿法

        在处理优化问题时经常会求去某个指标的最值,比如最小二乘、最大似然、最小方差等,在hector slam求解位姿时也构造了一个最小二乘问题,但是使用的模型是关于位姿的非线性函数,所以需要使用非线性优化的方法,hector slam使用的是高斯牛顿法。这里对高斯牛顿法做个简单说明。

         对于非线性最小二乘问题,可以用如下数学表达式来描述:

         x = argminF(x)=argmin\frac{1}{2}\left \|f(x))\right \|_{2}^{2} 

         如果f(x)数学表达式比较简单,可以直接对F(x)求导,并领其等于0,可以求出极值。对于无法求导情况,一般用迭代求解\Delta x,求解的迭代值不断的趋使F(x)趋近最小值,直到\Delta x变化很小或者达到最大迭代次数。那么关键问题在于求取\Delta x,这里有很多方法,如:梯度下降法、牛顿法、牛顿高斯法和LM法。简单比较一下:梯度下降法——对代价函数F(x)进行泰勒展开,仅保留一阶导数部分,按照梯度反方向进行迭代,即\Delta x=-J(x),但是这种方向并不一定是最合适的方向,有时可能迭代过头,反而会绕路;牛顿法——其实是上面F(x)泰勒展开,保留到二阶,增加了海森矩阵,因此其迭代的路径一般是比较短的,但是需要计算F(x)的二阶导数,这个是很难求得的,因此实际应用受限;牛顿高斯法——为了避免牛顿法求解海塞矩阵难的问题,牛顿高斯法先对f(x)进行一节泰勒展开,然后得到F(x)近似表达式,然后另其导数为0,求取F(x)局部最小时的\Delta x,然后不断迭代,直至达到收敛条件;LM法是在牛顿高斯法上进行了修改,避免了牛顿高斯法求解正规方程时可能出现的奇异解,被广泛使用。

        话不多说,直接介绍高斯牛顿法。

        f(x+\Delta x) \approx f(x) + J(x)\Delta x \Rightarrow       

        F(x) = \frac{1}{2}( f(x) + J(x)\Delta x )^{T}( f(x) + J(x)\Delta x ) \Rightarrow

        F{}'(x) = J^{T}(x)( f(x) + J(x)\Delta x ) =0 \Rightarrow

        J^{T}(x)J(x)\Delta x = - J^{T}f(x)\overset{H = J^{T}(x)J(x)}{\rightarrow}\Delta x=-H^{-1}J^{T}f(x)

        和牛顿法比较实际上是用雅克比矩阵二次来代替了海塞矩阵,省去了计算海塞矩阵。

3、hector-slam位姿解算

       当我们传感器第一次接收到数据,我们可以人为设定当前位置,以此来第一次建立栅格地图m,可以认为是初始化操作。之后,我们在根据前一时刻建立的地图求解的位姿都是相对初始化时刻的位姿而言的,这一点需要明白。那么这个问题可以用贝叶斯估计描述为:

                                   p(x_{t}|m_{t-1},z_t)=\beta p(m_{t-1}|x_{t},z_{t})*p(x_{t}|x_{t-1})

        这里假设状态x符合马尔科夫过程,但是对于先验p(x_{t}|x_{t-1})概率很多情况下是不知道的,如果有这部分的先验的话可以添加这部分代码。在没有这部分信息情况下,hector-slam是让似然概率p(m_{t-1}|x_{t},z_{t})达到最大的最大似然估计。hector-slam通过最小二乘的方式来表达x_{t}=argmaxP(m_{t-1}|x_{t},z_{t})最大似然问题(最小二乘实际上就是最大似然估计的一种):

                                     x=argmin\sum [1-M(S_{i}(x))]^{2}

   未完待续。。。。

 

                

 

 

   

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/xo1j877k.shtml

相关文章

激光SLAM算法学习(三)——3D激光SLAM

3D激光SLAM 1、3D激光SLAM的介绍 3D激光SLAM的输入: IMU数据 3D激光雷达数据 里程计数据 3D激光SLAM的输出: 3D点云地图 机器人的轨迹 or PoseGraph 2、3D激光SLAM的发展 3D激光SLAM的帧间匹配方法——点云配准算法 Point-to-Plane ICP Feature-based Method 3D激光SLAM的回…

SLAM 算法的一些简单的介绍和理解,有的是从别的地方找到的资料,感觉很有道理。

SLAM(Simultaneous localization and mapping),我们要达到的目的就是估计机器人(传感器-比如相机)的位置轨迹,然后创建地图。locating和map两者互相依赖,密不可分。然而我们 已知的信息一个是 observation&…

2021年开源SLAM算法

1.TANDEM:Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo 慕尼黑工业大学Daniel Cremers团队,实时单目跟踪稠密建图纯视觉SLAM,采用Realsense D455(深度传感器IMU,但只用RGB) 项目地址:https…

激光SLAM技术总结(3)3D激光SLAM算法原理

目录 1. 3D激光SLAM简介 2. 3D激光雷达SLAM 3. 高精度V-LOAM方案 4 发展趋势 1. 3D激光SLAM简介 在 3D 激光 SLAM 领域中, 由 Zhang J 等人提出的LOAM 方案,利用 3D 激光雷达采集数据, 进行基于特征点的扫描匹配, 利用非线性…

实习:slam算法的学习整理

1.odom 2.updata_odom 3.updata_laser updata_landmark 4.resample pf.c 相机的位姿转换是基于世界坐标系的,观察到的路标也会在世界坐标系中不断收敛,若不是计算错误,基本上不会产生漂移。而IMU是自身坐标系标定的,在转换到…

关于slam

什么是SLAM?机器人在未知环境中,要实现智能化需要完成三个任务,第一个是定位(Localization),第二个是建图(Mapping),第三个则是随后的路径规划(Navigation)。 之前地平线的高翔博士用这样一句话概括SLAM的释义。不过实际生活中的…

SLAM介绍

https://blog.csdn.net/tiandijun/article/details/55212968 SLAM 1.  前言 读者朋友们大家好!(很久很久)之前,我们为大家介绍了SLAM的基本概念和方法。相信大家对SLAM,应该有了基本的认识。在忙完一堆写论文、博…

【动态SLAM】快速入门(原理介绍及经典算法)

【动态SLAM】快速入门(原理介绍及经典算法) 0 简介1. 传统视觉SLAM技术的局限2. 常用算法:2.1 基于深度学习的分割方法2.1.1 目标检测(Object Detection)2.1.2 语义分割(INstance Segmentation)…

Visual SLAM算法笔记

MulinB按:最近在学习SLAM算法,这里作为阅读笔记记录和总结一下。这里关注的主要是基于视觉的Visual SLAM或Visual Odometry,也包括一部分图像和IMU融合的Visual-Inertial Odometry相关算法。 注:下文中部分链接指向Google Schola…

一起自学SLAM算法:8.2 Cartographer算法

连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLAM中的数学基础 第8章-激光SLAM系统 8.1 Gmapping算法 8.2 Cartographe…

开源3D激光(视觉)SLAM算法汇总(持续更新)

目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Car…

SLAM | 激光SLAM中开源算法对比

点击上方“AI算法修炼营”,选择加星标或“置顶” 标题以下,全是干货 前面的话 好久没有更新SLAM系列的文章了,前面我们讲到了激光SLAM技术。基于激光雷达的同时定位与地图构建技术(simultaneous localization and mapping&#xf…

激光SLAM算法学习(一)——激光SLAM简介

激光SLAM算法学习(一) 激光SLAM简介 1、SLAM是什么 SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durrant-Whyte 和 John J.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地…

SLAM算法

一、概述 Simultaneous Localization and Mapping (SLAM)原本是Robotics领域用来做机器人定位的,最早的SLAM算法其实是没有用视觉camera的(Robotics领域一般用Laser Range Finder来做SLAM)。本文主要关注基于camera图像做SLAM的算法&#xf…

SLAM算法(一)即同步定位与地图构建了解

文章目录 一、SLAM 简介二、SLAM 技术简介三、slam算法实现的几个要点有趣的事,Python永远不会缺席培训说明 一、SLAM 简介 SLAM(Simultaneous Localization and Mapping同步定位与地图构建) 是业界公认视觉领域空间定位技术的前沿方向,它主要的作用是让…

盘点机器人常用的几大主流SLAM算法

SLAM可以说是近几年最火的机器人技术之一,也是机器人领域的关键技术。不少同学表示,学了几年还在「爬坑」,甚至感觉「越学越难」。本文通过整理机器人领域常用的SLAM算法架构及特点,希望为大家的方向选择提供一些参考。 01 SLAM是…

一起自学SLAM算法:7.7 典型SLAM算法

连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLAM中的数学基础 7.1 SLAM发展简史 7.2 SLAM中的概率理论 7.3 估计理论 …

slam原理介绍和经典算法

1.传统slam局限性 slam算法假设的环境中的物体都是处于静态或者低运动状态的,然而,现实世界是复杂多变的,因此这种假设对于应用 环境有着严格的限制,同时影响视觉slam系统在实际场景中的应用性。当环境中存在动态物体时&#xff0…

【漫画】程序员系列苏大强版表情包

点击上方“ 程序IT圈 ”,选择“置顶公众号” 关键时刻,第一时间送达! 整理来源于菜鸟要飞 今天抽空给大家收集了一份苏大强版程序员系列表情包,分享给大家,希望你能够喜欢 。下面做个投票,看看你最喜欢哪个…