点击上方“
计算机视觉工坊
”,选择“星标”
干货第一时间送达
内容来自知乎,「计算机视觉工坊」整理,如有侵权请联系删除 https://www.zhihu.com/question/666979463,作者:张神侠
曾经参与设计的一个清洁机器人产品--CC1
回忆了初学视觉SLAM时,也曾有过这样的疑问。相信题主若能坚持SLAM这条路,或者有机会去相关公司实习,要不了多久,就能自行解答这些疑惑。
但想着能出来实习的毕竟是少数,凑巧也做过一些SLAM落地项目,在此尝试解答一下,以帮助一些初学slamer对【SLAM是如何落地应用的】这件事有更为清晰的认识。
大致罗列了题主的疑惑点,逐一看下。
1、经典的视觉SLAM方案(ORB,VINS)与其他机器人任务(规控等)之间的联系?
拿室内机器人A举例,A要想实现自动驾驶(低速),通常需要具备定位、路径规划、感知、调度功能。
逐一解释下,“定位”是要知道A的位置和朝向,A在大厅还是厨房?A朝南还是朝北?“路径规划”是指从当前位置到目标位置之间如何最优地行走。“感知”是A要知道自己周围的环境,有没有老人、小孩?有没有障碍物?使A避免碰撞。“调度”是指一个很大的楼层内,可能有多架机器人,比如B也在,A和B如何协同作业?避免A做了一个task,B又重复做。
回到问题【经典的视觉SLAM方案与其他机器人任务之间的联系?】,ORBSLAM也好,VINS也好,作用是提供可靠的定位,和SLAM是否经典没有任何联系。
所以把问题精简为【定位与其他机器人任务之间的联系?】
先讲一下感知,感知模块会输出一个代价地图(costmap),像下面这样
代价地图
假设A要在某餐厅作业,已知餐厅的2D地图(像一个更大的costmap)
定位模块的作用是让A知道当前在地图中的位姿(位置和朝向)
有了当前位置,给定目标位置,在地图中,这不就有两个点了!就可以规划路径了。这就是它们的联系。
路经规划
那么地图哪里来的呢?
需要提前建图。这就需要用到SLAM的建图模块了。
总结一下,A要想在某餐厅作业,需要经历两个阶段。阶段一:提前建图,获取餐厅的地图信息。阶段二:实时导航,也就是一套包含定位、感知、规划、调度功能的组合拳。
2、基于特征点的方案建立的地图无法直接用于下游任务,建出的图有什么用?
SLAM包含定位、建图。这里的特征点实时地图不是给下游任务用的,而是给SLAM自己用,给定位用。上面也讲了,定位才是给下游任务用的。
拿ORBSLAM(单目)举例,我们都知道视觉初始化过程比较耗时哈,初始化地图通过三角化两帧关键帧获得,同时产出的还有初始定位。后续的定位是通过PNP获取的,即图像-地图的匹配方式。为什么不继续用两两图像匹配呢?请再翻翻《视觉SLAM十四讲》。
实际落地使用,也是需要提前采集地图的。看代码就会发现,地图包含很多信息,包含但不限于特征点、定位信息等。这样视觉初始化就是图像-地图的初始化,说白了就是回环检测。地图以文本形式存储在A大脑中。A刚开机,通过地图定位到自己在某个位置,就可以进行后续工作了。有了初始定位,后续还是通过PNP方式定位。不继续用回环检测定位的原因是太耗时。可以以PNP短暂连续定位+定频回环检测修正的方式,完成后续定位。