【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
SLAM是机器人的一个分支。广义上来说,机器人还包括了计算机视觉、语音识别、自然语言处理、机械臂控制、运动控制、机器人导航、机器人调度等很多分支领域。而SLAM解决的问题则是最基本的问题,归纳起来就是两句话,第一,这是什么地方;第二,我在哪。当然要想解决这个问题,我们就必须要一定的传感器输入,通过算法计算,最终输出自己的位姿信息。这是直觉上最容易想到的办法。
1、基本SLAM方法
一个机器人一般是由两部分组成。下面是底盘,上面是躯干部份,一般也是作业部分。而要解决slam问题,通常需要安装一个或者是多个传感器。不同的传感器有不同的用途,一般有电机编码器、摄像头、单线雷达、imu、3d lidar等等。
很多传感器都是可以直接输出位姿结果的,比如电机编码器或者IMU。假设是一个差速轮,我们就可以通过差速轮算出当前机器人的里程计数据。如果是这么做,那么整个SLAM的架构就简单了,
2、带优化的SLAM计算方法
仅仅使用单个传感器,就可以解决SLAM的问题,如果是这样的话,这反而变得简单了。但是现实中,单个传感器往往有很多的局限性。比如说,如果说只是使用电机编码器计算里程计,遇到平直的路面可能还好,一旦遇到坑坑洼洼的路面,可能机器人本身并没有往前走很远,但是电机已经走了很远的距离。所以这个时候,我们很自然地想到,也许需要其他办法解决这个问题,
方法1,用数学优化方法来解决。一般来说,简单的SLAM定位只考虑传感器数据前后帧的关系,没有对一个范围内的数据进行优化,这样至少可以解决一部分累积误差。
方法2,这个方法比math optimise好理解一点。相当于传感器1获得一个基础结果之后,利用传感器2对传感器1的结果进行迭代优化,生成一个更好的结果。
方法3,这也是比较容易想到的办法,那就是一个传感器不行,就多个传感器一起运行。最终把所有的计算结果进行融合处理。
3、添加回环检测的SLAM处理方法
有了上面的优化和处理,看上去SLAM结果会比之前好很多。事实上也确实是这样的。但是这个里面有一个问题,虽然优化方法也好、多传感器也好,它们都只能降低一定范围的误差,但是没有办法消弭全局范围内降低误差呢。所以为了解决这个问题,早期的研发人员又想出来了回环检测的方法。它的道理还是比较简单的,主要是第一次制图的时候使用,它就是告诉机器人系统,自己曾经来过这个地方,之前的SLAM结果也保存着。那么现在的SLAM可以通过之前保存好的结果+现在传感器的偏移,得到新的结果。这样就可以进一步缩小长期运行带来的累积误差。
仔细想一下,2中的优化其实是一种局部优化,3中的优化是一种全局优化,一个处理器再强,也没有办法在规定的时间里面做全局优化。那么通过关键帧保存、参考帧检测的方法,就可以实现这一目的。而回环检测,就是在全局优化和实时处理之间的一种妥协方法。这种回环检测也是主要用于第一次SLAM处理的时候,后期定位一般用不到。
4、全局SLAM和局部SLAM分开的方法
实际使用的时候,我们一般是全局SLAM和局部SLAM分开的。全局SLAM一般要求的定位精度是比较粗的,可以是几厘米,十几厘米。而局部SLAM的进度要求,则为几厘米,甚至是几毫米。所以,要做到这一点,有必要局部添加更多的特征信息,才能实现这一目标。而对全局SLAM,则可以做相应的简化措施。