目录
在2d激光slam中有几个常用框架
例如gmapping, cartographer, hector等,虽然可以直接跑起来,但其工程化处理是没有的,所谓工程化处理是指根据外部场景的需求进行逻辑调整或增加保护等功能。下面从几个小方面大概介绍常见的工程化处理思路。
常见工程化问题之叠图问题
2d 激光slam中,不可避免的会产生叠图现象,叠图产生的原因多种多样,有算法问题也有场景特殊性问题,也有用户的使用方式导致,所有的这些问题最终都会产生叠图现象,如果不进行处理继续跑机可能会发生碰撞甚至跌落等,产生严重影响。因此要增加叠图检测的功能,叠图检测可以用常规方法即依赖图像处理方法检查子图与全局地图轮廓的匹配率,或者根据轮廓的直线拟合结果判断是否有偏差来检测叠图,如果差距较大则可能产生叠图,另外也可以通过AI方法,训练模型检测叠图,叠图后要通过发布话题进行上报给app或语音控制平台进行语音播报。
常见工程化问题之定位丢失
如果在slam定位过程中,当无法定位机器在地图中的位置时会产生定位丢失,如跑出地图外,或重定位失败,或进入电梯后定位丢失,定位丢失的处理逻辑也是要进行检测判断并上报。定位丢失通常是统计多帧的匹配率分数累积低于一定数值后会进行上报,同时进行位姿找回处理。
常见工程化问题之定位跳变
定位跳变是指在slam定位过程中的轨迹会不连续会突然有个跳变产生,比如在x,y,方向有个距离的跳变,跳变距离可能到达1m,即两帧之间的变化达到1m,换算成距离假如10帧/秒,则1m/0.1s,10m/s的跳变,在实际运动中是不可能的,另外角度theta的突然变化也会导致定位跳变,定位跳变不会上报定位丢失但是实际机器轨迹已经发生错误。工程中处理会根据线速度和角速度计算一个阈值,来限制两帧之间的偏移量,如果跳变超过阈值则用里程计进行定位保证轨迹不跳变。另一个产生跳变的原因是里程计数据与slam处理不同步,比如里程计还在发送数据,但slam已经停止,因此需要位置找回等操作。
其余的工程化处理
对机器运行状态进行判断,根据里程计位移量判断机器处于静止还是运动状态,如果处于静止状态,则可以过一段时间后将slam内部定位操作停止,可以减少cpu占用率。在slam的定位过程中,可以同时进行备份slam操作,进行地图的更新操作。当原始地图不够用时也可以对地图进行扩建操作。为了提高机器的定位能力可以利用地图固定点位例如生成充电桩在全局地图中的点位进行地图重定位操作。