为什么工程上选择VINS而不是ORB-SLAM?

作者 | 3D视觉之心  编辑 | 自动驾驶Daily

原文链接:https://www.zhihu.com/question/650407644

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心SLAM技术交流群

本文只做学术分享,如有侵权,联系删文

前言

很多公司在工程上是用VINS(VINS-Mono或VINS-Fusion)做里程计,而不是ORB-SLAM,但是好像ORB-SLAM比VINS效果更好,这是为什么呢?且看大家是怎么说的

简单回顾

ORB-SLAM是一种基于特征的单目视觉SLAM系统,广泛用于实时三维地图构建和机器人定位。该系统使用ORB特征进行高效的视觉识别和地图重建,支持关键帧技术和回环检测来优化地图的准确性。ORB-SLAM能够在多种环境下稳定工作,适用于动态场景和长时间操作,因其出色的性能和灵活性,被广泛应用于自动驾驶、增强现实等领域。

b53a18e1338274791f8caedfaf2346f3.jpeg

VINS(Visual-Inertial Navigation System)是一种结合视觉信息和惯性测量单元(IMU)数据的SLAM框架,能够提供高精度的实时定位和地图构建功能。VINS通过融合相机和IMU的数据,即使在视觉信息不足的情况下也能保持较高的定位精度,使其适用于快速运动或低光照条件下的场景。VINS框架因其鲁棒性和准确性,在无人机导航、移动机器人等领域得到了广泛应用。

0bc50d1cdfae095c8171572ae4a3f4b4.png

看看大家怎么说

袁博融说

因为大部分工程师对SLAM都没有深入了解。要么是都试试,哪个能跑通效果好就用哪个,要么是跟着主流意见走。而主流意见未必就是对的,很大程度上也是受公众号自媒体影响。其实VINS和ORB-SLAM都不是适合工程使用的好方案。

工程应用首先应保证前端的鲁棒性,其次才是精度。毕竟你要先能收敛,看精度才有意义。运行时但凡飘一下,之前精度再高也是打水漂。VINS和ORB-SLAM对于corner cases是没啥特殊处理的,连ZUPT都没做,这就注定鲁棒性不足。VINS长时间运行会发散是必然的。

大家觉得VINS和ORB-SLAM精度高,那是它们在几个公开数据集上表现好。但这并不意味着它们在工程应用中也一定表现好。实际上,应用中对精度影响更大的反而是数据质量,而不是算法本身。比如传感器的标定误差、同步精度、曝光、对比度、噪点等都可能会产生显著影响。在这种情况下,算法本身的差异甚至可以忽略不计。即便你出厂标定的再好,产品在整个生命周期里的参数漂移也是要考虑的吧。这些都是工程问题。

我一直不建议SLAM研究者只拿数据集做测试。数据集的固定序列难以让我们认识算法表现的随机性。我见过在某些序列上基础的VO比VINS和ORB-SLAM精度更高。但这显然是随机性引起的,因为综合多个序列的结果还是VINS和ORB-SLAM更好。我经常手持设备去跑测试,即便走同样的线路,多次的表现也会有差异。如果一个算法多次表现起伏很大,我们至少可以说它在这个场景中没有处于合适的工作窗口。

作为开发者不能总是照顾算法的特性,而应该多创造可能产生退化的极端场景做研究。这就是为什么我之前甚至录了过山车数据来做SLAM测试。

我自己实现的VIO方案可以跑完这条序列,但我不觉得VINS或ORB-SLAM能做到。我开源这套数据后也一直没有其他人说能跑通。即便我的方案能跑通这种极端场景,也不意味着它在其它看起来更简单的场景中就不会出问题。事实上我们在其它项目中也遇到过各种挑战,也是花了几个月的时间去分析和优化,现在也还在继续迭代。

VINS和ORB-SLAM的后端其实都不算先进,应该说还不如RTAB-Map。这几个后端其实都在用BoW,但RTAB-Map还有内存管理等高级特性。我一直奇怪咋还不更新成VLAD,是因为大家跑的场景不够大吗?反正RTAB-Map很快会支持VLAD的,因为我也是它的第二大贡献者。但我并不是说RTAB-Map比VINS或ORB-SLAM更好,而是它们根本不好比。RTAB-Map最初就是个VSLAM后端框架,后来才加的前端。我前面说的基础的VO就是RTAB-Map后来加的实现。而你甚至可以在RTAB-Map中用VINS或ORB-SLAM做前端。这也是为什么我要另外做VIO方案,因为RTAB-Map本来就没提供这些,它只是预留了模板。RTAB-Map不是个算法而是个框,什么都可以往里装。

ORB-SLAM的最大硬伤就是它用的是ORB特征。ORB特征除了性能好一些,在各类任务上都没什么优势。不知道有多少研究者仔细测试和比较过,其实传统特征描述子最好的还是SIFT(而且专利也到期了),后来的没一个能打的。但SIFT检测开销大也是众所周知的。而SIFT检测+SIFT描述子也不是最好的。我目前知道的最好的组合是GFTT(Shi-Tomasi)+SIFT描述子,回环检测能力吊打其它各种组合。CV领域就是这么神奇,最老的反而是最好的。GFTT本身开销就低,还方便做硬件加速。ORB做硬件加速都要更麻烦一些。我自己方案就是用GFTT+RootSIFT或SuperPoint(HF-Net)。不考虑后端的话,GFTT+KLT其实都非常好了。

所以如果你要问工程上哪个方案最好,我会告诉你RTAB-Map不错,但它只能做后端,你还需要一个好的前端。我们的前端方案今年会推产品,RTAB-Map这一两年也还会有重量级更新。除了VLAD部分还会有iSAM2,Gaussian Splatting等。目标就是纯视觉做超大场景(至少城市级吧)VSLAM+三维重建。

乐知者说

论文与实际有差别。

这就看你把orbslam和vinsmono用来干什么了。

先作为Vio来说,结论vinsmono优于orb3(没有了回环检测、多地图功能和重定位的orb3,不如vins一根毛)。理由如下:

1、运行资源。orb3远比vins消耗的多,不解释。

2、前段跟踪稳定性。lk光流跟踪比orb3 track跟踪稳定很多。orb3在实际场景中,tracklocalmap容易失败。orb3在室外场景中容易reset,然后新建地图。

3、后端优化这块。怎么说呢,orb3确实强,但是不符合导航要求的定位。因为你会经常看到它明开始跟飞很远,然后又给你突然拉回来。这种跟飞又来回来很蛋疼。没有vins-mono那边平滑。

4、精度这块(假设你成功运行完一个数据集),精度orb3会比vins强(vio初始化好的话,orb3可以到达1%)。然并软,因为orb3并不稳定,跑同一个书籍,你可能得到的结果都差异很大。

5、外参和实延。orb受外参数影响特别大,不如vins一根毛。

6、调试。vins参数量小于orb3,且稳定性比orb3强多了,不然你都不知道这次结果比上次好到底是什么原因导致的。

结论:

vio1   vins-mono+orb3初始化策略

vio2  msckf前段+orb后端

这两个YYDS。

作为slam (三维重建,语义地图),orb3远优越于vins。自己理解。忠告:远离vslam或者Vio,拥抱感知或者激光。

余世杰说

说下自己的理解,ORB强在是一个完整的系统,代码结构逻辑非常清晰,比较模块化,要做修改替换啥的比较方便,同时地图的部分对于需要的项目来说很省事儿,可以直接拿来用。缺点是,代码中还是存在一些致命的bug,会跑崩(程序挂了),以及作为一个VIO系统来说,稳定性不够强,若视觉失效,几乎立马就整体丢了,所以精度高的意义没那么大了又。若要求视觉必须稳定,那为啥我还要加IMU呢,这也是一个ORB3精度可能不如ORB2的一个原因。

VINS强在一个对外参依耐性没那么强,毕竟自己可以估计,导致就算初始化有点点问题,也可以很快稳定下来。而稳定性更是不用说,在视觉失效个5秒左右,系统都能比较正常的跑下来。还可以融合GPS输出个对齐结果,对于需要的项目也是一个加分项。缺点的话,大概就是缺少了地图一部分吧,自身是比较强的。

格雷茨卡说

因为VINS-Mono在真实场景中的稳定性远远好于ORB-SLAM3,虽然ORB-SLAM3在论文中的精度指标大幅度好于VINS-Mono,但是,你总不能一直在那几个数据集刷指标吧,在工程中的应用就要求一个系统必须能够鲁棒稳定,本人实测ORB-SLAM3对外参,特别是rotation,非常敏感,标定差一些直接就跑飞了,而VINS就不会有这个问题,可能虽然整体误差有一些大,但是实时性和鲁棒性足够了,ORB-SLAM3的VI初始化很耗时间,同时在自己实际设备上的有效性一般,VINS的初始化简单明了,实测也不会跑飞,而且又有一个250HZ的IMU预积分线程,能够很好的保证实时性,因此工程应用无脑VINS,会省很多事情

投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署大模型与自动驾驶Nerf语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

6f071c9ff44b8ffeb62643d5783681ed.png

网页端官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

国内最大最专业,近3000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型、端到端等,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

ae595622f331d9eb3549a3e3da0d9aa7.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!

自动驾驶感知:目标检测、语义分割、BEV感知、毫米波雷达视觉融合、激光视觉融合、车道线检测、目标跟踪、Occupancy、深度估计、transformer、大模型、在线地图、点云处理、模型部署、CUDA加速等技术交流群;

多传感器标定:相机在线/离线标定、Lidar-Camera标定、Camera-Radar标定、Camera-IMU标定、多传感器时空同步等技术交流群;

多传感器融合:多传感器后融合技术交流群;

规划控制与预测:规划控制、轨迹预测、避障等技术交流群;

定位建图:视觉SLAM、激光SLAM、多传感器融合SLAM等技术交流群;

三维视觉:三维重建、NeRF、3D Gaussian Splatting技术交流群;

自动驾驶仿真:Carla仿真、Autoware仿真等技术交流群;

自动驾驶开发:自动驾驶开发、ROS等技术交流群;

其它方向:自动标注与数据闭环、产品经理、硬件选型、求职面试、自动驾驶测试等技术交流群;

扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

f3e3c05b1ea9c7e713420fe688d219f6.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

d0aa30db12a67cf096ad94510ba52f3f.jpeg

### 回答1: b'vins-fusion'和'orb-slam'都是视觉SLAM算法,但它们的原理和实现略有不同。'vins-fusion'能够更好地处理动态环境和IMU的数据,而'orb-slam'在处理静态场景时更稳定和效果更好。具体使用哪种算法要根据自身的应用场景和需求来选择。 ### 回答2: Vins-fusion和orb-slam是两种经典的视觉SLAM方法。其主要区别在于它们的架构和实现方式,下面将分别对它们进行简单的介绍和比较。 Vins-fusion是由加拿大滑铁卢大学的研究团队开发的一种基于视觉和惯性传感器融合的SLAM方法。该算法采用了双目相机和惯性测量单元(IMU)的信息,结合非线性优化方法,实现了建立基于特征点的稠密地图和相机位置、速度估计。该算法的优点在于其能够从多个传感器中融合不同类型的数据,提高了相机位置估计精度和鲁棒性。 相比之下,ORB-SLAM则是一种使用单目相机的基于特征点匹配的SLAM方法。它基于FAST角点检测和ORB特征描述子,采用优化方法求解相机位姿和地图点,从而实现对相机的位姿估计和地图构建。该算法的优点在于其实现简单,适用于不同场景下的运动物体跟踪和建图。 总体而言,Vins-fusion相比ORB-SLAM在鲁棒性和精度上有所提高,但是需要使用双目相机和IMU等多种传感器,实现相应的硬件条件和算法复杂度也较高。而ORB-SLAM则存在对特定场景下角点检测和匹配的敏感性问题,但是其实现方式较为简单,适用范围广泛,更容易被广泛采用。因此,在实际应用中,需要根据具体的场景和需求来选择适合的SLAM方法。 ### 回答3: Vins-Fusion和ORB-SLAM都是常用的视觉惯性里程计(Visual-Inertial Odometry,VIO)算法,它们都基于姿态估计和特征匹配,实现了同时定位与建图(SLAM)的功能。 比较Vins-Fusion和ORB-SLAM,可以从以下几个方面入手: 1. 精度:Vins-Fusion采用深度学习和卡曼滤波等技术,能够达到较高的精度,尤其是在动态环境下的鲁棒性更强;而ORB-SLAM则采用了优化方法和关键帧选择等技术,也有一定的精度,但在动态环境下易出现漂移等问题。 2. 稳定性:Vins-Fusion对光照变化、拍摄角度变化等有一定的鲁棒性,能够在复杂环境下保持较好的稳定性;而ORB-SLAM对光照变化等敏感,稳定性稍逊。 3. 实时性:Vins-Fusion具有较高的实时性,能够在移动设备等资源有限的场景下工作;而ORB-SLAM对计算资源要求较高,适合在较为强大的计算设备上工作。 4. 易用性:ORB-SLAM具有较好的开源生态,有丰富的文档和代码示例,对开发者较为友好;而Vins-Fusion的开发和使用相对较为复杂,需要掌握深度学习和卡曼滤波等专业知识。 综合来看,Vins-Fusion和ORB-SLAM各有优劣,适用于不同的场景和需求。开发者可以根据项目要求选择适合自己的算法,并结合实际情况进行优化和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值