比如,我在gmapping演算法中,使用激光里程计和高精度的轮式里程计表现出来的区别是什么?


里程计作为SLAM的前端是值得专门研究的。毕竟后端的闭环是为了减小累计误差。里程计的累计误差越小,后端就越轻松。而一个糟糕的里程计配上非常厉害的闭环也不会有好的效果。

轮式里程计的精度很大程度上取决于标定。良好的标定可以达到极高的精度,甚至高于激光里程计。在实际工程中,我最推荐的做法是进行轮式里程计和激光的联合标定。联合标定包括内参和外参,这里内参是指左右轮的半径和轮距;而外参是指激光雷达与底盘的位置关系。经过联合标定后,不仅轮式里程计误差极低,还可以把两种里程计进行融合。效果如下,在odom frame下可视化laserscan,凭肉眼是看不出漂移的。

轮式+激光里程计融合袁博融的视频 · 289 播放

毕竟其它答主也提到了,轮子可能存在打滑,因此偶尔也有失效的情况。但轮式里程计在静态时是绝对不会漂移的。减小轮子打滑影响的方式之一是在从动轮上增加编码器做里程计。因为打滑主要发生在主动轮上。但这会导致更复杂的机械设计。激光里程计在静态时仍可能漂移,产生累计误差,取决于具体实现。据我测试,laser_scan_matcher精度并不算高,我更推荐rf2o_laser_odometry。激光里程计的挑战是有动态障碍物的环境,尤其是当视野被严重遮挡时。就像你在火车上看对面的火车动了,可能并不确定是对面的车开了还是自己的车开了。如果有条件的话,尽量把激光雷达视野做大,会省掉很多麻烦。毕竟买个360度的激光只用180度也会有点不爽吧。至于联合标定工具,推荐旷视SLAM组的OdomLaserCalibraTool。里面文档有详细的理论推导。而在实际应用中,因为轮子磨损会导致轮子半径减小,标定应定期更新。而改进联合标定的调用方式可以做到在线自动标定和更新,保证机器人在整个生命周期内的精度。

除了题主问到的这两种里程计外,视觉惯导里程计(VIO)也是推荐使用的。VIO目前看来性价比极高,千元以内的双目惯导就有极高的精度。视觉和IMU也是取长补短的关系,近几年发展出的演算法很多。这里就不过多介绍了,可展开讨论的太多了,以后在合适的问题下可以再仔细谈谈。


谈一谈个人理解哈,没太深入思考,结论不一定正确,还望给位大佬批评指正。

轮式里程计:

优点:

  • 成本低。高精度编码器其实也挺贵的……但是和激光雷达成本相比基本不在一个数量级;
  • 演算法相对简单。
  • 免安装。对于机器人底盘来讲运动控制器一般是闭环调速,由编码器提供转速的反馈信息,并且可以直接读取转速信息(我用过的四五款知名不知名的底盘都有相关数据介面),几乎省去了安装的麻烦。

缺点:

  • 只有对自身运动情况的感知,因自身运动造成的外部环境的变化,对系统没有任何反馈。在位姿估计上相当于只有运动先验信息。这也是造成它用于位姿估计不准的根本原因。
  • 地面非水平/颠簸时:不准
  • 轮胎打滑时:不准

激光里程计:

优点:

  • 精度高,有环境的观测信息作为后验。对应轮式里程计的缺点,相当于对于自身运动造成的外部环境变化,系统有反馈。优点我觉得有这一条就够了。
  • 相对轮式里程计而言,历史观测信息可以被重复利用起来进行更多功能,比如构建地图、障碍物感知、机器人绑架后重定位、自主导航等等,这些应用潜力是轮式里程计无法企及的。

缺点:

  • 成本高。这个也不是绝对成立的,低端单线激光雷达500左右软妹币就能收入囊中,比一些高精度编码器还便宜;但总体来说还是偏贵
  • 对环境还是有些要求,演算法设计考虑得多一些。长走廊,过于宽阔的环境,镜子玻璃等使光线发生偏折的部件,环境中运动的物体等都是令人头疼的问题。
  • 寿命低。毕竟机械活动部件,磨损是避免不了的。据说好些自动驾驶用的多线激光雷达,长时间工作寿命只有两三年,不知真假。相控阵或MEMS激光雷达寿命相对要长好多。
  • 人眼安全。我不太懂什么激光安全标准,只是单纯觉得,如果人眼总盯著看,多多少少有影响吧(虽然我觉得没有人这么闲...)


轮式里程计的优点就是速度快,但是长时间了肯定不准,一是感测器不准,二是在运动过程中会有滑动存在;而通过scan_match计算位姿精度会更高,缺点就是计算量比较大。

一种更好的方法就是将两者结合,在两个scan_match之间使用轮式里程计的增量得当当前位姿,在有激光数据可用时执行scan_match进一步修正位姿;这样的话位姿输出速率就可以很高,同时保持精度。


前面几位都说了轮式里程计和激光里程计各自的优缺点,其实在实际工程中,单一感测器存在测量的局限性,鲁棒性和精度都难以保证,因此一般都会选择多感测器融合的方法;常见的就是基于滤波或者是优化的方法,比如gmapping就是一种滤波的方法,cartographer就是一种基于优化的方法,两种方法本质上都可行,融合的难点在于怎么准确的描述测量的不确定性,数据怎么对齐(时间+空间),另外现在都2020年了,就不要再研究gmapping了。


后验(定位/建图)=先验(里程计)*似然(激光观测)

类似编码器的这种里程计属于内部感测器,只能提供先验预测,而这种预测是可以可无的(匀速模型/随便给个大概值...)。优缺点无从谈起,只是不同使用场景下的不同方案。

硬要比较的话,按照题主提问中的这种场景(猜测室内小车),采用gmapping这种粒子滤波原理的定位时,首先要有个二维栅格地图,然后走两步才能完成初始化。遇到过于方正对称的环境容易失效;高精度里程计开机就完成内部初始化,相对地图的位姿初始化需要手动标定。


计算一个轮式里程计的过程通常不需要环境信息,其精度主要是受限于感测器本身精度,当然在凹凸不平和容易打滑的地方观测精度会下降。

激光里程计的计算是依靠san to can 或者scan to map的scanMatch实现的。由于激光数据是对外部环境的观测,尽管激光的测量精度很高,但是极其容易受环境影响的,如长走廊无法推理走廊方向上的运动,感测器被遮挡会导致直接无法进行推理。

总的来说是两种不同类型的观测信息,是高效互补的一对组合。在gmapping里面,一般使用轮式里程计作为里程计的输入源,在长走廊一般也不会表现的太差。更一般来说,如果有轮式里程计,就尽量用到它,它对维持系统的鲁棒性尤为重要,其他观测源用于提高精度。


轮式里程计频率高,局部精度也高,但存在累计误差,使用时间长了了绝对精度下降。儿激光里程计相反,使用scan_match演算法后绝对精度较高,但计算需要耗时,所以频率相对前者低,精度则有激光雷达精度决定。但要注意的是,激光雷达里程计同样存在累积误差,需要通过回环优化消除。


轮子里程计一般局限在二维平面,scan match可以得到三维姿态。


轮式里程计+scan matching岂不是很完美

所以说多感测器融合才是王道


轮式里程计精度再高也没啥意义,打滑一下不也是凉凉的。


推荐阅读:
相关文章