您好,欢迎访问三七文档
SLAM简介1.关于SLAMSLAM是同步定位与地图构建(SimultaneousLocalizationAndMapping)的缩写,最早由HughDurrant-Whyte和JohnJ.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地图构建的问题。SLAM通常包括如下几个部分,特征提取,数据关联,状态估计,状态更新以及特征更新等。对于其中每个部分,均存在多种方法。针对每个部分,我们将详细解释其中一种方法。在实际使用过程中,读者可以使用其他的方法代替本文中说明的方法。这里,我们以室内环境中运行的移动机器人为例进行说明,读者可以将本文提出的方法应用于其他的环境以及机器人中。SLAM既可以用于2D运动领域,也可以应用于3D运动领域。这里,我们将仅讨论2D领域内的运动。2.机器人平台在学习SLAM的过程中,机器人平台是很重要的,其中,机器人平台需要可以移动并且至少包含一个测距单元。我们这里主要讨论的是室内轮式机器人,同时主要讨论SLAM的算法实现过程,而并不考虑一些复杂的运动模型如人形机器人。在选择机器人平台时需要考虑的主要因素包括易用性,定位性能以及价格。定位性能主要衡量机器人仅根据自身的运动对自身位置进行估计的能力。机器人的定位精度应该不超过2%,转向精度不应该超过5%。一般而言,机器人可以在直角坐标系中根据自身的运动估计其自身的位置与转向。从0开始搭建机器人平台将会是一个耗时的过程,也是没有必要的。我们可以选择一些市场上成熟的机器人开发平台进行我们的开发。这里,我们以一个非常简单的自己开发的机器人开发平台讨论,读者可以选择自己的机器人开发平台。目前比较常见的测距单元包括激光测距、超声波测距、图像测距。其中,激光测距是最为常用的方式。通常激光测距单元比较精确、高效并且其输出不需要太多的处理。其缺点在于价格一般比较昂贵(目前已经有一些价格比较便宜的激光测距单元)。激光测距单元的另外一个问题是其穿过玻璃平面的问题。另外激光测距单元不能够应用于水下测量。另外一个常用的测距方式是超声波测距。超生波测距以及声波测距等以及在过去得到十分广泛的应用。相对于激光测距单元,其价格比较便宜;但其测量精度较低。激光测距单元的发射角仅0.25°,因而,激光基本上可以看作直线;相对而言,超声波的发射角达到了30°,因而,其测量精度较差。但在水下,由于其穿透力较强,因而,是最为常用的测距方式。最为常用的超声波测距单元是Polaroid超声波发生器。第三种常用的测距方式是通过视觉进行测距。传统上来说,通过视觉进行测距需要大量的计算,并且测量结果容易随着光线变化而发生变化。如果机器人运行在光线较暗的房间内,那么视觉测距方法基本上不能使用。但最近几年,已经存在一些解决上述问题的方法。一般而言,视觉测距一般使用双目视觉或者三目视觉方法进行测距。使用视觉方法进行测距,机器人可以更好的像人类一样进行思考。另外,通过视觉方法可以获得相对于激光测距和超声波测距更多的信息。但更过的信息也就意味着更高的处理代价,但随着算法的进步和计算能力的提高,上述信息处理的问题正在慢慢得到解决。这里,我们使用激光测距方法进行距离测量。其可以很容易实现较高的测量精度并且很容易应用于SLAM中。3.SLAM的一般过程SLAM通常包含几个过程,但最终目的【是更新机器人的位置估计信息】。由于通过机器人运动估计得到的机器人位置信息通常具有较大的误差,因而,我们不能单纯的依靠机器人运动估计机器人位置信息。在使用机器人运动方程得到机器人位置估计后,我们可以使用测距单元得到的周围环境信息更正机器人的位置。上述更正过程一般通过提取环境特征,然后在机器人运动后重新观测特征的位置实现。SLAM的核心是EKF。EKF用于结合上述信息估计机器人准确位置。上述选取的特征一般称作地标。EKF将持续不断的对上述机器人位置和周围环境中地标位置进行估计。SLAM的一般过程如下图所示:当机器人运动时,其位置将会发生变化。此时,根据机器人位置传感器的观测,提取得到观测信息中的特征点,然后机器人通过EKF将目前观测到特征点的位置、机器人运动距离、机器人运动前观测到特征点的位置相互结合,对机器人当前位置和当前环境信息进行估计。下图是估计的详细过程。上图中三角形表示机器人,星号表示路标;机器人首先使用测距单元测量地标相对于机器人的距离和角度。然后进行开始进行运动,并且到达一个新的位置,机器人根据其运动方程预测其现在所处于的新的位置。在新的位置,机器人通过测距单元重新测量各个地标相对于机器人的距离和角度,测量得到的距离和角度与上述预测结果可能并不一致,因而,上述预测值可能并不是机器人准确位置。在机器人看来,通过传感器获得的信息相对于通过运动方程得到的信息更为准确,因而,机器人将通过传感器的数据更新对机器人位置的预测值,如上图中实线三角形所示(虚线为第一步中通过运动信息预测的机器人位置)。经过上述结合直轴,我们重新估计得到的新的机器人位置如上图实线三角形所示,但由于测距单元精度有限,因而,此时,机器人可能实际处于上图点状三角形位置,但此时估计结果相对于初始预测结果已经有明显的改善。4.测距单元SLAM的第一步需要通过测距单元获取机器人周围环境的信息。这里,我们以激光测距单元为例。以一个常见的激光测距单元为例,其测量范围可到360°,水平分辨率为0.25°,即激光束的角度为0.25°。其输出如下:2.98,2.99,3.00,3.01,3.02,3.49,3.50,...,2.20,8.17,2.21激光测距单元的输出表示机器人距最近障碍物的距离。如果由于某些原因,激光测距单元无法测量某个特定角度上的安全范围,那么其将返回一个最大值,这里以8.1为例,测距单元返回数据超过8.1即意味着激光测距单元在该角度上发生测量错误。需要注意的是,激光测距单元可以以很高的频率对周围环境进行测量,其可以实现10-100Hz的全周扫描。5.机器人自身运动模型SLAM的另外一个很重要的数据来源是机器人通过自身运动估计得到的自身位置信息。机器人自身位置数据通过对机器人轮胎运行圈数的估计可以得到机器人自身位置的一个估计,其可以被看作EKF的初始估计数据。另外一个需要注意的是需要保证机器人自身位置数据与测距单元数据的同步性。为了保证其同步性,一般采用插值的方法对数据进行前处理。由于机器人的运动规律是连续的,因而,一般对机器人自身位置数据进行插值。相对而言,由于测距单元数据的不连续性,因而其插值基本上是不可以实现的。6.特征(地标)地标是环境中易于观测和区分的特征。一般使用这些特征确定机器人位置。我们可以通过下面的方法想象上述工作过程,假设在一个陌生的房间内,闭上眼睛,那么此时我们如何确定自身的位置呢?通常而言,我们将在环境中不断走动,通过触摸物体或者墙壁确定自身位置。上述如被触摸的物体以及墙壁等都可以被看做用于估计自身位置的地标。下面是一些典型的地标。可以看出,通常而言,对于不同的环境,一般我们选择不同的地标。一般而言,地标需要满足下面的条件:1.地标应该可以从不同的位置和角度观察得到;2.地标应该是独一无二的,从而可以很容易的将底边从其他物体中分辨出来3.地标不应该过少,从而导致机器人需要花费额外的代价寻找地标;4.地标应该是静止的,因而,我们最好不要使用一个人作为地标;举例来说,室内环境中的地标,我们可以选择为墙壁与地面之间的连线,以及墙角等。如下图所示:7.特征提取根据上述步骤6确定完需要提取的特征后,我们接下来需要从测距单元获得的信息中准确的提取出我们需要的特征。特征提取的方法有很多种,其主要取决于需要提取特征以及测距单元的类型。这里,我们将以如何从激光雷达得到的信息提取有效特征为例进行说明。这里,我们使用两种典型的特征提取方法,Spike方法和RANSAC方法。Spike方法使用极值寻找特征。通过寻找测距单元返回数据中相邻数据差距超过一定范围的点作为特征点。通过这种方法,当测距单元发射的光束从墙壁上反射回来时,测距单元返回的数值为某些值;而当发射光束碰到其他物体并反射回来时,此时测距单元将返回另外一些数值;两者将具有较大的差别。如下图所示:图中红点为根据Spike方法提取到的特征。Spike方法也可以通过下面的步骤实现,对于相邻的三个点A,B,C,分别计算(A-B)与(C-B),然后将两者相加,如果结果超过一定范围,则表示提取到一个特征。采用Spike方法提取环境特征,需要保证相邻两个激光束照射的物体距离机器人距离之间具有较大的变化,因而,其并不能够适用于光滑环境中的特征提取。RANSAC(随机采样方法)也可以被用于从激光测距单元返回数据中提取系统特征。其中测距单元返回数据中的直线将被提取为路标。在室内环境中,由于广泛存在墙壁等,因而,在测距单元返回的数据中将存在大量的直线。RANSAC首先采用随机采样的方法提取测距单元返回数据中的一部分,然后采用最小二乘逼近方法来对上述数据进行拟合。进行数据拟合后,RANSAC方法将会检查测距单元数据在拟合曲线周围的分布情况。如果分布情况满足我们的标准,那么我们就认为机器人看到了一条直线。在使用EKF估计机器人位置和环境地图时,EKF需要将地标按照距离机器人当前的位置和方位表示出来。我们可以很容易的使用三角几何的方法将提取到的直线转变为固定的特征点,如下图所示:前面我们提到了特征提取的两种不同的方法,Spike方法和RANSAC方法,两者均可以用于室内环境中特征的提出。相比较而言,Spike方法较为简单,并且对室内环境中的活动物体不具有鲁棒性。RANSAC方法通过提取直线的方法提取环境中的特征,相对较为复杂,但对室内活动的物体具有更好的适应性。8.数据关联数据关联是将不同时刻位置传感器提取到的地标信息进行关联的过程,也成为重观察过程。举例来说,对于我们人类来说,假设我们在一个房间内看到了一把椅子,现在我们离开房间,过一段时间后,再次回到房间,如果我们再次看到了椅子,那么我们可以认为这把椅子很有可能就是我们之前看到的椅子。但是,如果我们假设房价内有两把完全一样的椅子,重复上述过程,当我们再次来到房间后,我们可能无法区分我们看到的两把椅子。但我们可以猜测,此时比如说左边的椅子仍然是之前看到的左边的椅子,而右边的椅子仍然是之前看到的右边的椅子。在实际应用中进行数据关联时,我们可能遇到下面的问题:1.我们可能上一次看到了某个地标,但下一次却没有看到;2.我们可能这次看到了地标,但之后却再也看不到这个地标;3.我们可能错误的将现在看到的某个地标与之前看到的某个地标进行关联;根据我们选择路标时的标准,我们可以很容易的排除上面第1和第2个问题。但对于第三个问题,如果发生了,将会对我们的导航以及地图绘制造成严重的问题。现在我们将讨论解决上面第三个问题的方法。假设我们现在已经到了每时每刻采集处理得到的路标的方位信息,并将其其中的特征存储在一数据库中。数据库初始阶段是空的,首先我们建立的第一条规则是,除非该特征已经出现了N次,否则我们并不将其加入数据库。当得到一副新的传感器信息后,我们进行下面的计算:1.得到一副新的传感器信息后,首先利用上面的特征提取方法提取特征;2.将提取到的特征与数据库中已经出现N次的并且距离最近的特征关联起来;3.通过验证环节验证上面的关联过程是正确的,如果验证通过,则表明我们再次看到了某个物体,因而其出现次数+1,否则表明我们看到了一个新的特征,在数据库中新建一个特征,并将其记作1.上述特征关联方法被称作距离最近方法。上面最简单的计算距离的方法是欧式距离的计算,其他距离计算包括马氏距离等,虽然效果更好,但计算结果更为复杂。验证环节通过利用EKF执行过程中,观测误差的有界性进行判断。因而,我们可以通过判断一个路标是否在现存路标的误差允许范围内来判断其是否为新的路标。路标区域可以通过图形绘制或者定义一个椭圆误差。通过设定一个常数,最新观测到的路标可以通过下面的公式与之前观测到的路标相互关联。其中,为观测新息,为特征的协方差矩阵。9.扩展卡尔曼滤波器(EKF)在SLAM
本文标题:SLAM简介
链接地址:https://www.777doc.com/doc-7184232 .html