视觉SLAM和激光SLAM的实现

本文深入探讨了激光SLAM和视觉SLAM(VSLAM)在定位与建图领域的应用,对比了两者在成本、应用场景、地图精度等方面的优劣。同时,介绍了基于深度摄像机、单目、鱼眼相机的VSLAM方案,以及ORBSLAM、DSO、SVO等视觉SLAM算法的特点。此外,提供了丰富的学习资源和研究学者信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

激光 SLAM:

早在 2005 年的时候,激光 SLAM 就已经被研究的比较透彻,框架也已初步确定。激光 SLAM,是目前最稳定、最主流的定位导航方法。

在这里插入图片描述
激光 SLAM 地图构建

VSLAM(基于视觉的定位与建图):

随着计算机视觉的迅速发展,视觉 SLAM 因为信息量大,适用范围广等优点受到广泛关注。
在这里插入图片描述
视觉 SLAM 地图构建,图片来源:百度 AI

(1)基于深度摄像机的 Vslam,跟激光 SLAM 类似,通过收集到的点云数据,能直接计算障碍物距离;

(2)基于单目、鱼眼相机的 VSLAM 方案,利用多帧图像来估计自身的位姿变化,再通过累计位姿变化来计算距离物体的距离,并进行定位与地图构建;

视觉SLAM和激光SLAM的对比

一直以来,不管是产业界还是学术界,对激光 SLAM 和 VSLAM 到底谁更胜一筹,谁是未来的主流趋势这一问题,都有自己的看法和见解。下面就简单从几个方面对比了一下激光 SLAM 和 VSLAM。

成本

不管是 Sick,北洋,还是 Velodyne,价格从几万到几十万不等,成本相对来说比较高,但目前国内也有低成本激光雷达(RPLIDAR)解决方案。VSLAM 主要是通过摄像头来采集数据信息,跟激光雷达一对比,摄像头的成本显然要低很多。但激光雷达能更高精度的测出障碍点的角度和距离,方便定位导航。

应用场景

从应用场景来说,VSLAM 的应用场景要丰富很多。VSLAM 在室内外环境下均能开展工作,但是对光的依赖程度高,在暗处或者一些无纹理区域是无法进行工作的。而激光 SLAM 目前主要被应用在室内,用来进行地图构建和导航工作。

地图精度

激光 SLAM 在构建地图的时候,精度较高;VSLAM,比如常见的,大家也用的非常多的深度摄像机 Kinect,(测距范围在 3-12m 之间),地图构建精度约 3cm;所以激光 SLAM 构建的地图精度一般来说比 VSLAM 高,且能直接用于定位导航。

易用性

激光 SLAM 和基于深度相机的 VSLAM 均是通过直接获取环境中的点云数据,根据生成的点云数据,测算哪里有障碍物以及障碍物的距离。但是基于单目、双目、鱼眼摄像机的 VSLAM 方案,则不能直接获得环境中的点云,而是形成灰色或彩色图像,需要通过不断移动自身的位置,通过提取、匹配特征点,利用三角测距的方法测算出障碍物的距离。

安装方式

雷达最先开始应用于军事行业,后来逐渐民用。被大家广泛知晓最先应该是从谷歌的无人车上所知道的。当时 Velodyne 雷达体积、重量都较大,应用到一些实际场景中显然不适合。比如无人机、AR、VR 这种,本身体积就很小,再搭载大体积的激光雷达的话,根本无法使用,也影响美感和性能。所以 VSLAM 的出现,利用摄像头测距,弥补了激光雷达的这一缺点,安装方式可以随着场景的不同实现多元化。

640?wx_fmt=jpeg

其他

除了上面几点之外,在探测范围、运算强度、实时数据生成、地图累计误差等方面,激光 SLAM 和视觉 SLAM 也会存在一定的差距。

比如:

640?wx_fmt=png

注:左为 Lidar SLAM,右为 VSLAM,数据来源:KITTI

可以明显看出,对于同一个场景,VSLAM 在后半程中出现了偏差,这是因为累积误差所引起的,所以 VSLAM 要进行回环检验。

激光 SLAM 是目前比较成熟的定位导航方案,视觉 SLAM 是未来研究的一个主流方向。所以,未来,多传感器的融合是一种必然的趋势。取长补短,优势结合,为市场打造出真正好用的、易用的 SLAM 方案。

视觉SLAM相关资料

常用方法
特征法:

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

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

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

直接法
  1. 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都可以很精确为什么需要用额外的计算量去做回环检测呢。

半直接法
  1. SVO https://github.com/uzh-rpg/rpg_svo

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

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

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

Visual-inertial SLAM

  1. 首推港科大的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所借鉴。

参考:http://blog.youkuaiyun.com/akunainiannian/article/details/45363731

链接:https://www.zhihu.com/question/51045335/answer/340167377

MonoSLAM、Co-SLAM、Swarm SLAM、ORB_SLAM、RGB-D SLAM

视觉SLAM学习资料

一、入门篇
  1. Andrew Davison的课程: http://www.doc.ic.ac.uk/~ajd/Robotics/index.html

    week7 SLAM,week8里面推荐了slam的两个入门 Tutorial 1 和Tutorial 2

  2. 瑞士苏黎世理工的学生练习:http://www.csc.kth.se/~kootstra/index.php?item=313&menu=300

    把excise 3:SLAM(EKF)做完,SLAM原理基本理解

  3. 高博的CNBLOG:http://www.cnblogs.com/gaoxiang12/

二、现有资源
  1. OpenSLAM:https://openslam.org/

    这个网站中含有很多slam方面的资料,编写的程序也各有不同,很权威

  2. Kitti图库,可以做simulation:http://www.cvlibs.net/datasets/kitti/

  3. 苏黎世理工学习练习excise3看完后可以使用Javier Civera 的程序进行试手,注意对calibration的调整

    http://webdiis.unizar.es/~jcivera/code/1p-ransac-ekf-monoslam.html

  4. 对于Javier Civera的1p RANSAC-monoSLAM有一定了解了,可以试试用SURF去实现

    南理工论文可以参考 http://cdmd.cnki.com.cn/Article/CDMD-10288-1012319519.htm

  5. RGB-D SLAM Dataset and Benchmark:http://cvpr.in.tum.de/data/datasets/rgbd-dataset

    慕尼黑工业大学,还有其他的数据库,如单目视觉里程计数据库,详见http://vision.in.tum.de/data/datasets

  6. Monocular SLAM:http://vision.ia.ac.cn/Students/gzp/monocularslam.html

    The research in monocular SLAM technology is mainly based on the EKF(Extended Kalman Filter) SLAM approaches.

  7. MRPT:http://www.mrpt.org/ the mobile robot programming toolkit非常好的东西

  8. PTAM:http://www.robots.ox.ac.uk/~gk/PTAM/

    libCVD:http://www.edwardrosten.com/index.html

    编译PTAM:http://www.fx114.net/qa-207-77156.aspx

    windows下编译PTAM:http://blog.youkuaiyun.com/cgf_909/article/details/24457771

  9. ORB_SLAM:http://webdiis.unizar.es/~raulmur/orbslam/

  10. LSD_SLAM:http://www.cnblogs.com/hitcm/category/763753.html

三、相关书籍
  1. Multiple View Geometry in Computer Vision Second Edition ,http://www.robots.ox.ac.uk/~vgg/hzbook/

    计算机视觉方面大神级别的书,也有中文版

  2. Robotics Vision and Control ,http://www.petercorke.com/RVC/

    澳大利亚昆士兰理工大学的Peter Corke是机器视觉领域的大牛人物,他所编写的Robotics, vision and control一书更是该领域的经典教材

    配套有matlab工具箱。工具箱分为两部分,一部分为机器人方面的,另一部分为视觉方面的工具箱

    源代码都是开放免费下载的: http://petercorke.com/Toolbox_software.html

  3. Probabilistic Robotics,http://www.probabilistic-robotics.org/理解这本书要有很好的数学基础

四、研究学者

国内激光雷达Slam武汉大学做得好,李明教授是最早一批做3Dslam的;国防科大的应该也不错。

国外的话斯坦福的塞巴斯蒂安是绝对的大牛,他的徒弟也都很厉害;KIT的SLAM6D做的很好,现在网上有开源的3DTK,内部集成了slam6D;

德国弗莱堡大学做的也不错。

  1. 英国帝国理工学院Andrew Davison:http://www.doc.ic.ac.uk/~ajd/,SLAM领域的权威

  2. 麻省理工John Leonard:http://marinerobotics.mit.edu/ 侧重于应用。目前主要在做水下SLAM的项目。参加过DARPA的智能车挑战赛。

  3. 悉尼大学Victoria Par: http://www-personal.acfr.usyd.edu.au/nebot/victoria_park.htm 经典数据库

  4. 慕尼黑工业大学Jakob Engel:http://vision.in.tum.de/members/engelj

  5. 斯坦福Sebastian Thrun:http://robots.stanford.edu/papers.html

五、其他资源(一)
  1. Giorgio Grisetti; Cyrill Stachniss; Wolfram Burgard; (GridMapping 算法,及概率机器人一书作者)

  2. M. Montemerlo; Dirk Haehnel; Sebastian Thrun; (FastSLAM创始者,理论水平和实际应用能力非常强)

    参加过DARPA的智能车挑战赛,取得最好成绩。

  3. Austin Eliazar; Ronald Parr; (DP-SLAM创始者,从文章到数据,程序都公开的牛人)

  4. 以 Jose Neira和Jose luis Blanco为代表的一批西班牙学者.

  5. http://babel.isa.uma.es/mrpt/index.php/Main_Page 2008年开始陆续出现了一些好文章.

  6. http://cres.usc.edu/radishrepository/view-all.php 包含了大量的用于验证SLAM算法的数据.

  7. http://www.isa.uma.es/C13/jlblanco/default.aspx 西班牙的一个博士生.编程能力极强. 另外Jose Neira带领的团队也比较猛.


作者:Darlingqiang
来源:优快云
原文:https://blog.youkuaiyun.com/Darlingqiang/article/details/80689922
版权声明:本文为博主原创文章,转载请附上博文链接!

### IMU、视觉SLAM激光雷达SLAM的融合方法 #### 方法概述 IMU(惯性测量单元)、视觉SLAM激光雷达SLAM三者的融合是一种多模态传感器融合技术,旨在通过结合不同传感器的优势来提高系统的鲁棒性准确性。这种融合通常用于机器人导航、自动驾驶以及增强现实等领域[^2]。 #### 数据预处理 在融合过程中,数据预处理是非常重要的一步。对于IMU数据,需要校准其偏置并估计噪声特性;而对于视觉激光雷达的数据,则需进行时间同步空间配准。具体来说: - **时间同步**:确保来自不同传感器的时间戳一致,以便在同一时刻获取所有传感器的信息。 - **坐标系对齐**:建立统一的世界坐标系,并将各传感器采集到的数据映射至该坐标系下。这涉及计算相机、激光雷达与IMU之间的外参矩阵[^5]。 #### 融合框架设计 常见的融合框架包括紧耦合松耦合两种方式: 1. **松耦合** 松耦合是指分别独立运行每种类型的SLAM模块(如单独执行视觉SLAM激光雷达SLAM),之后再将它们的结果结合起来。这种方法简单易实现,但可能会损失部分潜在关联信息。例如,在某些场景中可先由视觉特征提取位姿变化趋势作为初值输入给激光雷达里程计以减少累积误差[^4]。 2. **紧耦合** 紧耦合则是直接联合优化多个源产生的观测值。比如采用扩展卡尔曼滤波器(EKF)或者粒子滤波(PF),把图像中的稀疏特征点位置预测当作状态变量的一部分加入整体估计过程之中;同时考虑加速度计读数所反映出来的重力方向约束条件等辅助线索共同参与迭代更新操作[^3]。 另外还有基于因子图(Graph-based Optimization Frameworks) 的全局一致性调整策略可用于解决长期漂移问题。 #### 实现关键技术要点 以下是几个关键实现环节及其注意事项: - **初始化阶段**: 需要精心挑选合适的起始帧组合来进行相对姿态关系求解,避免因错误匹配而导致后续跟踪失败的情况发生. - **异常检测机制**: 设立合理的阈值判断标准剔除掉那些明显偏离正常范围内的离群样本以免干扰最终决策结果 . - **高效存储管理结构**: 对于大规模环境下的增量式地图维护工作而言尤为重要, 可选用八叉树(Octree), kd-tree 或者其他压缩表示形式降低内存占用率. ```python import numpy as np def imu_visual_lidar_fusion(imu_data, visual_features, lidar_points): """ A simplified example of fusing IMU, Visual SLAM and Lidar SLAM data using EKF framework Parameters: imu_data (dict): Dictionary containing accelerometer and gyroscope readings over time intervals visual_features (list[tuple]): List of tuples representing detected keypoints with descriptors from camera frames lidar_points (np.ndarray): Array storing point cloud coordinates captured by the laser scanner device Returns: estimated_pose (np.ndarray): Final fused pose estimation after processing all sensor inputs together """ # Placeholder implementation details omitted here... return estimated_pose ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值