视觉slam 总结

作者:吴佳田
链接:https://www.zhihu.com/question/51045335/answer/340167377
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

总结一下我接触过的SLAM算法吧,主要集中在visual slam:

特征法:

  1. ORB SLAM https://github.com/raulmur/ORB_SLAM2

优势: 在静态环境下定位准确,稳定, 单目和双目版本都可以达到实时(高于10frames/s)。代码可读性强,易扩展, 网上也有实现和imu融合的版本。

劣势:建的地图点云稀疏。 运行速度方面,因为提特征点的时间有瓶颈最快的运行速度应该不超过30frames/s, 我在本机 (i7-6600U) 测的速度基本都在20frames/s左右,因此对于高帧率的相机需要降帧率才能用。对动态物体很敏感,再有动态物体时非常容易tracking lost。

总的来说ORB-SLAM还是在智能驾驶领域用的最广泛的SLAM算法,因为它在work的时候可以work的很好,急需解决的问题是对特征点提取的加速,以及处理的环境中的动态物体。

直接法

2. DSO https://github.com/JakobEngel/dso

优势:可以生成相当稠密的点云, 这个优点给DSO很大想象空间。 速度在可以work的时候很快, 大概在20-30frames/s。

劣势:对场景光照要求高,要求尽量保持曝光时间的稳定。对动态物体没有orb那样敏感。代码可扩展性比较差,目前开源的只有单目版本,这个版本没有做尺度恢复因此没法在实际中直接用。这里贴一个我开发的stereo dso: https://github.com/JiatianWu/stereo-dso, 可以恢复相对准确的pose。

DSO的缺点和优点都很明显,目前的局限应该是还没有一个开源可用的像双目orb那样稳定的版本,但是有很大的潜力去做一些orb无法做的事,比如建稠密的高精地图,甚至semantic的高精地图都有可能。

简单说一下LSD,自从DSO出来后LSD就没多少价值了,因为DSO在准确性,稳定性和速度上都比LSD好。LSD有个优势就是回环检测,这个对于DSO有些鸡肋,因为如果odometry都可以很精确为什么需要用额外的计算量去做回环检测呢。

半直接法

3. SVO https://github.com/uzh-rpg/rpg_svo

优点:非常快, 快到可以在laptop上达到300frames/s。

缺点:误差大,不准确。这也是为达到高速度牺牲性能的结果吧。

SVO适用的主要场景是无人机,因此代码中采用了一些无人机上的假设,比如假设相机的姿态是向下看的。SVO的最大问题就是不准确,这个可以通过融合imu改善,前提是你拥有一个准确的imu。。

Visual-inertial SLAM

4. 首推港科大的VINS https://github.com/HKUST-Aerial-Robotics/VINS-Mono。 没仔细研究过, 不过港科大的这个工作开源的很彻底,ros版本的和ios版本的都开源了, 大家可以看看产品级的slam应用是怎么实现的,代码也很清晰,主要侧重点在后端的优化,前端写的很简洁。

另外经典的VIO还是ETH的OKVIS: https://github.com/ethz-asl/okvis 。VINS和OKVIS性能差不多, OKVIS开发得更早一些, 后端优化的一些思想比如sliding window optimization也被DSO和VINS所借鉴。

猜你喜欢

转载自blog.csdn.net/weixin_39752599/article/details/82778621