当前位置: 首页 > news >正文

机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?

 

定位技术是机器人实现自主定位导航的最基本环节,是机器人在二维工作环境中相对于全局坐标的位置及其本身的姿态。目前SLAM (Simultaneous Localization and Mapping即时定位与地图构建)是业内主流的定位技术,有激光SLAM和视觉SLAM之分。

什么是激光SLAM?

激光SLAM脱胎于早期的基于测距的定位方法(如超声和红外单点测距)。激光雷达(Light Detection And Ranging)的出现和普及使得测量更快更准,信息更丰富。激光雷达采集到的物体信息呈现出一系列分散的、具有准确角度和距离信息的点,被称为点云。通常,激光SLAM系统通过对不同时刻两片点云的匹配与比对,计算激光雷达相对运动的距离和姿态的改变,也就完成了对机器人自身的定位。

激光雷达距离测量比较准确,误差模型简单,在强光直射以外的环境中运行稳定,点云的处理也比较容易。同时,点云信息本身包含直接的几何关系,使得机器人的路径规划和导航变得直观。激光SLAM理论研究也相对成熟,落地产品更丰富。

 

什么是视觉SLAM?

眼睛是人类获取外界信息的主要来源,视觉SLAM也具有类似特点,它可以从环境中获取海量的、富于冗余的纹理信息,拥有超强的场景辨识能力。早期的视觉SLAM基于滤波理论,其非线性的误差模型和巨大的计算量成为了它实用落地的障碍。近年来,随着具有稀疏性的非线性优化理论(Bundle Adjustment)以及相机技术、计算性能的进步,实时运行的视觉SLAM已经不再是梦想。

通常,一个视觉SLAM系统由前端和后端组成。前端负责通过视觉增量式计算机器人的位姿,速度较快。后端,主要负责两个功能:

一是在出现回环(即判定机器人回到了之前访问过的地点附近)时,发现回环并修正两次访问中间各处的位置与姿态;

二是当前端跟踪丢失时,根据视觉的纹理信息对机器人进行重新定位。简单说,前端负责快速定位,后端负责较慢的地图维护。

视觉SLAM的优点是它所利用的丰富纹理信息。例如两块尺寸相同内容却不同的广告牌,基于点云的激光SLAM算法无法区别他们,而视觉则可以轻易分辨。这带来了重定位、场景分类上无可比拟的巨大优势。同时,视觉信息可以较为容易的被用来跟踪和预测场景中的动态目标,如行人、车辆等,对于在复杂动态场景中的应用这是至关重要的。第三,视觉的投影模型理论上可以让无限远处的物体都进入视觉画面中,在合理的配置下(如长基线的双目相机)可以进行很大尺度场景的定位与地图构建。

一直以来,业内对激光SLAM与视觉SLAM到底谁更胜一筹,谁是未来主流趋势都有自己的看法,以下将简单从几个方面进行对比。

应用场景

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

定位和地图构建精度

在静态且简单的环境中,激光SLAM定位总体来讲优于视觉SLAM,但在较大尺度且动态的环境中,视觉SLAM因为其具有的纹理信息,表现出更好的效果。在地图构建上,激光 SLAM精度较高,国内思岚科技的 RPLIDAR 系列构建的地图精度可达到 2cm 左右。而视觉SLAM,比如大家常见的,也用的非常多的深度摄像机 Kinect,(测距范围在 3-12m 之间),地图构建精度约 3cm;所以激光 SLAM 构建的地图精度一般来说比 视觉SLAM 高,且能直接用于定位导航。

易用性

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

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

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

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

图片描述

总体来说,激光 SLAM 是目前比较成熟的机器人定位导航技术,而视觉 SLAM是未来研究的主流方向。未来,多传感器的融合是一种必然的趋势。取长补短,优势结合,为市场打造出真正好用的、易用的 SLAM 方案。
本文来来源于:http://www.slamtec.com/cn/New...

相关文章:

  • lua闭包浅析及项目应用
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 验证信息
  • centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm的文件系统集群
  • 三步学会用spring开发OSGI——(第二步:工程篇)
  • 个推基于Consul的配置管理
  • Android精品开源整理
  • ECS应用管理最佳实践
  • 大数据分析专题:利用向外扩展技术深入挖掘商业价值(1)
  • Apache搭建简单的图片访问服务器
  • Bootloader之uBoot简介
  • 分布式熔断降级平台aegis
  • 建议
  • dubbo分布式事务
  • HDOJ(HDU) 2178 猜数字(题意有点难理解、、、)
  • axios 和 cookie 的那些事
  • css布局,左右固定中间自适应实现
  • CSS中外联样式表代表的含义
  • css属性的继承、初识值、计算值、当前值、应用值
  • E-HPC支持多队列管理和自动伸缩
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • oschina
  • Redux系列x:源码分析
  • spring cloud gateway 源码解析(4)跨域问题处理
  • V4L2视频输入框架概述
  • vuex 笔记整理
  • 从输入URL到页面加载发生了什么
  • 使用common-codec进行md5加密
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 原生js练习题---第五课
  • 怎么将电脑中的声音录制成WAV格式
  • FaaS 的简单实践
  • zabbix3.2监控linux磁盘IO
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (3)选择元素——(17)练习(Exercises)
  • (39)STM32——FLASH闪存
  • (备忘)Java Map 遍历
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十六)Flask之蓝图
  • (转)大道至简,职场上做人做事做管理
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core Swagger 过滤部分Api
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 使用配置文件
  • ::什么意思
  • [20171113]修改表结构删除列相关问题4.txt
  • [Android] Implementation vs API dependency
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [AX]AX2012 R2 出差申请和支出报告