六. 先有鸡还是先有蛋?--SLAM

在机器人发展早期,人们已经开始研究移动机器人的定位问题。按正常思维来说,机器人想要知道自己位置,或者从A点走到B点,需要先有一张地图,然后用算法在地图上先规划出路线,然后机器人再沿着规划出来的路线走。但问题来了,对于一个新环境,机器人就需要先构建一个地图,但构建地图的过程中,机器人又需要知道自己的位置,否则画出来的图可能跟现实差了十万八千里(当不闭环的时候)。为了解决这个问题,研究者们提出了一个一石二鸟的方法,也就是即时定位与地图构建(Simultaneous Localization and Mapping, SLAM)

关于SLAM的文章可以在网上搜到一大堆,在这里只做科普性的解说,让初学者对SLAM有个概念。

SLAM按照其架构一般可以分解成前端和后端。 前端主要做视觉相关的东西,像识别,匹配。而后端主要做图优化,闭环。

举个简单的例子,假设你出国旅游的时候被绑架了,犯人把你押到一辆车上面,但是你可以从车窗看到沿途的景物。这个时候你就得使出吃奶的劲去记住沿途到底经过了哪些建筑了。一般来说,我们只会去记一些有特征的建筑或者标记,比如说麦当劳,肯德基,万达,等等,对于没有特征的居民楼,我们肯定是不会浪费有限的记忆空间去记住的。而这些有特征的标记,在SLAM中就充当landmark的角色,在机器视觉中,这些landmark可以是二维码,也可以是一些特征点,总之是机器人第二次看见他们的时候能够认出来我见过这些个东西的东西都能用作landmark(这个过程其实就是匹配),系统前端做的东西大概就是这些。

当你正在手忙脚乱的记landmark的时候,犯人接到了一个电话,说绑错人了,他要绑架的是富豪的儿子,而你明明是个穷二代。犯人一怒之下把你踹下车,然后扬长而去。然而你已经被送到了一个陌生城市,手机也被拿走了,语言也不通,你只能靠记忆走回去原来的地方。这时候后端就发挥作用了。由于车来的时候走的是高速,你无法沿路往回走,只能走旁边的路,这时候你经过了一个麦当劳(一个landmark),但你不确定这是哪个麦当劳,因为路上经过的麦当劳实在太多了。而恰好你发现麦当劳旁边还有一个加油站,于是你一下子就想起了自己处于哪个路段(定位加闭环)。然后你继续往前走,发现又是麦当劳旁边有一个加油站,这时候你犹豫了。到底哪个才是刚刚走过的位置?带着疑问你只好继续往前走,终于你见到的landmark越来越多,对自己的定位越来越熟悉。直到最后回到原来的位置。

用一个图来表示的话,左边代表闭合失败,也就是已经走到了原来的位置,但是机器人没认出来,以为是新的位置(由于轮子里程碑的误差,不加后端时候走出来的图一般就是左边的图),而右图就代表闭环成功。在实际应用中,机器人一般需要闭环很多次,而每一次闭环后端都会优化路径(推测机器人实际走过的距离,转过的角度)。而这个建图的过程现阶段还是需要人来控制的,因为只能是人来判断图建的好不好。也希望后续会有好的自动建图方法能被提出来。

想要动手或者想看看建图过程的童鞋,本人推荐用turtlebot,通过ros和gazebo来模拟建图。

网址见:http://wiki.ros.org/turtlebot_navigation/Tutorials/indigo/Build%20a%20map%20with%20SLAM

猜你喜欢

转载自blog.csdn.net/v1379481/article/details/82811750