首页 > Udacity机器人软件工程师课程笔记(三十六) - GraphSLAM

Udacity机器人软件工程师课程笔记(三十六) - GraphSLAM

一、引入

GraphSLAM是解决完整的slam问题的slam算法。这意味着该算法将恢复整个路径和地图,而不仅仅是最近的姿势和地图。这种差异使它可以考虑当前姿势与先前姿势之间的依赖性。适用于我们的GraphSLAM的一个示例是地下采矿。每天都用在钻孔机上的大型机器在岩壁上切割。环境瞬息万变,保持正确的工作空间图非常重要。映射此空间的一种方法是在周围环境中驾驶装有激光雷达的车辆并收集有关周围环境的数据。

GraphSLAM 算法解决了全SLAM 问题。该算法旨在解决定义在所有位姿和地图中所有特征上的离线问题。

二、GraphSLAM模型

1. 最大似然估计

GraphSLAM的核心是图形优化-将图形中所有约束中存在的错误最小化的过程。让我们看一下这些约束,并学习应用称为最大似然估计(MLE)的原理来构造和解决图形的优化问题。

(1)特征量测示例

让我们看一个非常简单的示例-我们的机器人在环境中重复测量功能的一个示例。本示例将引导您完成解决该问题所需的步骤,然后可以将其应用于更复杂的问题。

机器人的初始姿态的方差为0-仅仅是因为这是机器人的起始位置。回想一下开始位置可能在哪里-我们在相对地图中将其称为位置0。此后的每个动作姿势和测量都不确定。在GraphSLAM中,我们将继续假设运动和测量数据具有高斯噪声。

机器人测量一个特征,m1m_1m1,返回距离为1.8米。

如果我们将这个特征类比做弹簧——1.8米是弹簧的静止长度。这是弹簧最理想的长度。然而,弹簧有可能被压缩或拉长,以适应作用于系统的其他力(约束)。

这种测量的概率分布可以定义为,

p(x)=1σ2πe−12(z1−(x0+1.8))2σ2p(x)=frac{1}{σsqrt{2π}}e^{-frac{1}{2}frac{(z_1−(x_0+1.8))^2}{σ^2}}p(x)=σ2π1e21σ2(z1(x0+1.8))2

简单地说,当z1z_1z1x0x_0x0相距1.8米时,概率分布最高。

在这里插入图片描述

然而,由于位置的第一个姿势,x0x_0x0设为0,这一项可以简单地从方程中移除。

p(x)=1σ2πe−12(z1−1.8)2σ2p(x)=frac{1}{σsqrt{2π}}e^{-frac{1}{2}frac{(z_1−1.8)^2}{σ^2}}p(x)=σ2π1e21σ2(z11.8)2

接下来,机器人对环境中的相同特征进行另一次测量。这次,数据读取为2.2m。由于存在两个相互矛盾的测量结果,因此这是一个超定的系统-因为方程式多于未知数。

通过两次测量,可以通过两个概率的乘积来表示特征的最可能位置。

p(x)=1σ2πe−12(z1−1.8)2σ2×1σ2πe−12(z1−2.2)2σ2p(x)=frac{1}{σsqrt{2π}}e^{-frac{1}{2}frac{(z_1−1.8)^2}{σ^2}} imesfrac{1}{σsqrt{2π}}e^{-frac{1}{2}frac{(z_1−2.2)^2}{σ^2}}p(x)=σ2π1e21σ2(z11.8)2×σ2π1e21σ2(z12.2)2

在这个简单的示例中,所以我们可以猜测z1z_1z1最有可能出现的位置是在2.0米处。然而,通过最大似然估计过程来理解所涉及的步骤是有价值的,然后才能将其应用于更复杂的系统。

要解析地解决这个问题,可以采取几个步骤把方程简化成更简单的形式。

删除比例系数

使方程式最大化的m值不取决于每个指数前面的常数。这些是比例系数,但是在SLAM中,我们通常对概率的绝对值不感兴趣,而是找到最大似然估计。因此,可以我们可以简单地消除这些系数。

p(x)=e−12(z1−1.8)2σ2×e−12(z1−2.2)2σ2p(x)=e^{-frac{1}{2}frac{(z_1−1.8)^2}{σ^2}} imes e^{-frac{1}{2}frac{(z_1−2.2)^2}{σ^2}}p(x)=e21σ2(z11.8)2

更多相关:

  • 原来我们可以从官网 http://trafficserver.apache.org/tools/via 获取via头的解码信息来得到指定url的缓存状态信息,现在我们可以直接利用本地工具就可以达到目的。 traffic_via工具能够解码Via头信息,输入的参数要求是[]包含的字符串。 使用方法: 参考...

  • 简介 channel_stats插件能对每个channel收集运行时统计信息(速率,请求数,更多选项将在未来添加),这些统计信息通过http json方式输出,这些 接口代码取自stats_over_http插件。通常,该插件只用于具有*固定*个数的remap规则的反向代理服务器,它并非为那些不限制channel的代理服务器,比如op...

  • logger是一个shell命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息 logger语法: 可以使用的相关命令 -d, --udp 使用数据报(UDP)而不是使用默认的流连接(TCP) -i, --id 逐行记录每一次logger的进程ID -f, --fil...

  • 今天在测试中遇到了一个问题 使用JMeter时请求相关地址参数及方法都填写正确,但是相应数据返回始终不对,例如 查看取样器结果显示 200 正常,但响应数据不符合正常的结果。 经反复检查发现问题如下: 1)没有添加HTTP信息头管理器 (获取根据就近原则) 2)HTTP信息头管理器中填写错误,将Content-Type 填写成了Co...

  • 第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索。上如则是我的log4j的包的版本。好了,用了jar包之后,用来学习的项目结构如下:在对应的路径下创建log4Test.java和log...

  • 看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。行主序和列主序行主序指矩阵在内存中逐行存储,列主序指矩阵在内存中逐列存储。行主序矩阵内存布局:列主序矩阵内存布局:行向量和列向量行向量指的是把向量当成一个一行n列的矩阵,列向量指的是把向量当成一个n行一列的矩阵。左乘和右乘矩阵“左乘”:矩阵和向...

  • ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作。其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个评分规则来选择适合的模型,恢复相机的旋转矩阵R和平移矩阵t那么下面主要讲解关于对极几何中的基础矩阵,本质矩阵,和单应矩阵之间的区别与联...

  • 矩阵可分为稠密矩阵和稀疏矩阵,对于稀疏矩阵而言,使用同样的内存来存储这个矩阵显然是对内存的浪费,那么我们就可以想办法将矩阵中所有的o元素挥着不相关元素剔除,怎么剔除,第一种方法是通过三个一维矩阵来存储原二维矩阵中的所有非0元素,三个矩阵分别为value、column、row, value 数组存储所有的非零元素, column 数...

  • void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const; m – 目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。rtype – 目标矩阵的类型。因为目标矩阵的通道数与源矩阵一样,所以rtype也可以看做是目标...

  • https://blog.csdn.net/jiangdf/article/details/8460012 glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL...