标题:Kimera:an Open-Source Library for Real-Time Metric-Semantic Localization and Mapping

作者:Antoni Rosinol, Marcus Abate, Yun Chang, Luca Carlone

机构:MIT SPARK LAB

来源:ICRA 2020

编译:张海晗

审核: wyc

转载:泡泡机器人SLAM

摘要

大家好,今天我们要介绍的论文是来自ICRA 2020的Kimera:一个基于度量语义的SLAM开源库。Kimera: an Open-Source Library for Real-Time Metric-Semantic Localization and Mapping.

目前,我们常用的SLAM库有ORB-SLAM(现在已经出到第三代),VINSMono,OKVIS,ROVIO等。相比较于这些开源SLAM库,本篇文章介绍的C++开源库Kimera提供了3D网格重建功能以及语义标注功能。Kimera在设计时就考虑了模块化,并具有四个关键组件:用于快速和准确状态估计的视觉惯性测距(VIO)模块,用于全局轨迹估计的姿态图优化器,用于快速网格重建的轻型3D网格划分器模块以及密集的3D度量语义重建模块。这些模块可以单独运行,也可以组合运行。Kimera在CPU上可以实时运行,并通过语义标记的图像生成3D度量语义网格。Kimera的主要意义在于其拥有的灵活性,计算效率,鲁棒性和准确性将为未来的度量语义SLAM和感知研究奠定坚实的基础,并允许跨多个领域的研究人员(例如:VIO,SLAM,3D重建,分割等等)进行基准测试和原型化自己的工作而无需从头开始。

主要工作与贡献

Kimera-VIO: 一个VIO模块,用于快速准确的IMU状态估计。Kimera-VIO的核心是基于GTSAM的VIO方法,使用了基于IMU的预积分和无结构视觉因子。结果在EuRoC数据集上获得最高的性能。

Kimera-RPGO:一种文件的姿态图优化方法,可以利用现代技术进行外点排除。Kimera-RPGO增加了一个鲁棒性层,避免了由于感知混叠而导致的SLAM故障,并让用户减少了费时的参数调整。

Kimera-Mesher:一个快速计算一帧和多帧正则化3D网格以支持避障的模块。网格划分器基于作者以前提出的算法。

Kimera-Semantics:使用体积方法构建准确的全局3D网格的模块,速度较慢但更准确,同时使用2D像素级语义分割在语义上注释3D网格。

算法流程

这张图显示了Kimera的体系结构,Kimera将立体声帧和高速率惯性测量值作为输入并返回三个值,分别为:(i)以IMU速率进行的高精度状态估计。(ii)全局一致的轨迹估计。(iii)环境的多个网格,包括快速局部网格和全局语义注释的网格。Kimera高度并行化,并使用四个线程以不同的速率容纳输入和输出(例如IMU,帧,关键帧)。在这里,本文通过线程描述体系结构。下面让我们来一起看看各个线程的具体流程吧。

1.Kimera-VIO:视觉惯性测程模块

Kimera-VIO实现了基于关键帧的最大后验视觉惯性估计器。在这个模块里,估算器可以根据指定的时间范围执行完全平滑或固定滞后平滑;这里通常使用后者来限制估计时间。Kimera-VIO包括一个负责处理原始传感器数据的(视觉和惯性)前端,以及一个后端,用于融合处理后的测量值以获得传感器状态(即姿态,速度和传感器偏差)。这里我们把它分为前端后端进行讲解。

VIO前端:本文的IMU前端在执行流形上的预积分,以从原始IMU数据中获得两个连续关键帧之间相对状态的紧凑预积分测量值。视觉前端检测Shi-Tomasi角,使用Lukas-Kanade跟踪器来跨帧跟踪他们,找到左右立体匹配,然后执行集合验证。本文使用了5点RANSAC执行单目验证,并使用3点RANSAC进行双目验证。该代码还提供了使用IMU旋转并分别使用2点和1点RANSAC执行单目和双目验证的选项。特征检测,立体匹配和集合验证都在每个关键帧处执行,而本文仅在中间帧出进行特征跟踪。

VIO后端:在每个关键帧出,将预积分的IMU和视觉测量值添加到构成VIO后端的固定滞后平滑其中。这里使用了预积分的IMU模型和无结构视觉模型。使用GTSAM中的iSAM2求解因子图。在每次iSAM2迭代中,无结构视觉模型都使用DLT观察到的特征的3D位置,并从VIO状态中消除相应的3D点。在消除之前,先去除退化点(即相机后方的点或没有足够的视差进行三角测量的点)和离群点(即具有较大重投影误差的点),以提供额外的鲁棒性层。最后,使用GTSAM将超出平滑范围的状态边缘化。

2.Kimera-RPGO:鲁棒的位姿图优化模块

Kimera-RPGO模块主要负责实现两个功能:(i)检测当前关键帧与过去关键帧之间的环路闭合,(ii)使用鲁棒的PGO计算全局一致的关键帧姿态。这里将分别介绍两个功能。

闭环检测:闭环检测这里使用了DBoW2的库,并使用词袋表示法来快速检测假定的循环闭合。对于每个推定的闭环,本文使用了单目和双目集合验证来排除异常闭环,并将其余的闭环传递给鲁棒的PGO解算器。

鲁棒的PGO:此模块在GTSAM中实现,并包含了异常值剔除的方法,即最大化增量一致的测量集的PCM,这个是为了单个机器人和在线设置量身定制的方法。Kimera分别储存了油Kimera-VIO产生的里程数边缘和闭环检测产生的循环闭合。每次执行PGO的时候,首先使用修改后的PCM版本选择最大的一组一致回路闭合,然后再包括里程表和一致回路闭合的位姿图上执行GTSAM。PCM本身是为多机器人案例设计的,仅检查机器人之间的回路闭合是否一致。PCM 从头开始构建邻接矩阵A∈R L×L来跟踪成对一致的循环(其中L是检测到的循环闭合的数量),本文通过递增地构建矩阵A来启用在线操作。每次检测到新的循环时,Kimera都会向矩阵A添加一行和一列,并且仅针对先前的循环测试新的循环。最后,这组一致的测量值被添加到姿态图中(与里程表一起使用),并使用高斯-牛顿算法进行了优化。

3.Kimera-Mesher:一个网格生成模块

Kimera-Mesher可以快速生成两种类型的3D网格:每一帧的3D网格以及跨关键帧的多帧3D网格。

每帧网格:这里首先在当前关键帧中成功跟踪的2D特征上执行2DDelaunay三角剖分。然后,使用来自VIO后端的3D点估计值,对2D三角剖分进行背投影,以生成3D网格。虽然每帧网格被设计为提供低延迟障碍检测,但本文还提供了通过使用2D标签对网格进行纹理话来对生成的网格进行语义标记的选项。

多帧网格:多帧网格将在VIO模型预测上收集的每帧网格融合到单个网格中。每帧3D网格和多帧3D网格都被编码为顶点位置的列表以及顶点ID的三元组列表,用以描述三角形面。然后,Kimera遍历多帧网格顶点,并根据最新的VIO后端估计更新其3D位置。最后,Kimera删除与在VIO时间范围之外观察到的旧特征相对应的顶点和三元组。如果在网格中检测到平面,则将规则性因子添加到VIO后端,这可以让VIO和网格正则化之间进行紧密耦合。

4.Kimera-Semantics:度量语义分割

这里将集束光线投射技术应用于建立准确的全局3D网格以及网格的语义注释上。

全局网格:本文的实现基于Voxbox,使用基于体素(TSDF)的模型来滤除噪声并提取全局网格。在每个关键帧处,Kimera使用了密集立体匹配(SGM估计视差)从当前图像对中获取3D点云。然后,使用了Voxblox中的快速选项来进行集束光线投射。在每个关键帧出重复这个过程,并生成TSDF,然后使用前进立方体(marching cubes)从中提取网格。

语义注释:Kimera-Semantics使用2D语义标记的图像对(关键帧处)对全局网格进行语义注释。Kimera允许使用用于像素级2D语义分割的现有工具(深度神经网络或经典的MRF方法)获得2D语义标签。为此,在集束光线投射期间,Kimera传播了语义标签。2D语义分割将标签附加到密集立体视觉产生的每个3D点上。然后,对于集束光线投射的每个射线束,Kimera将从光束中观察到的标签的频率构建标签概率向量。然后,仅在TSDF截断距离(即靠近表面)内沿来投射此信息,以节省计算量。换句话说,Kimera不花精力来更新“空”标签的概率。沿着射线遍历体素时,本文使用贝叶斯更新来更新每个体素上的标签概率。集束光线投影后,每个体素都有一个标签概率向量,Kimera会从中提取最可能的标签。最终,使用前进立方体提取度量语义网格。

实验结果

表2. 在EuRoC数据上比较先进的VIO模块中的RMSE。

表3. 不同回环检测的阈值α下的RMSE

图3. (a)Kimera的3D网格通过与基准真相点云的距离进行颜色编码。(b)地面真相点云按距估计云的距离进行颜色编码。EuRoC V1 01数据集

表4. 多帧Kimera下的评价和全局网格的完成度评价,ICP的阈值为1.0m

图5. Kimera-VIO,RPGO和Mesher的运行终止时间。

点击阅读原文, 即可获取本文下载链接。

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

Kimera:一个基于度量语义的SLAM开源库相关推荐

  1. ORB-SLAM3:一个高精度视觉、视觉惯性和多地图SLAM开源库

    ORB-SLAM3:一个高精度视觉.视觉惯性和多地图SLAM开源库(论文翻译) Carlos Campos, Richard Elvira∗, Juan J. G´omez Rodr´ıguez, J ...

  2. 自荐Mall4j项目一个基于spring boot的Java开源商城系统

    前言 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样 ...

  3. java license 开源_MinIO:一个基于Apache License v2.0开源协议的对象存储服务

    MinIO Quickstart Guide--快速入门 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构 ...

  4. 一个基于.Net+Vue开发的开源权限工作流系统

    今天给大家推荐一个开源权限工作流系统,一个快速开发框架. 项目简介 这是一个基于.Net 5开发的权限管理.工作流系统框架.借鉴了Martin Fowler企业级应用开发思想,框架选项都是使用最新的技 ...

  5. 发布一个基于 Reactor 模式的 C++ 网络库

    发布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...

  6. 分享一个基于Vue3+TS构建Cesium组件库

    分享一个基于Vue3+TS构建Cesium组件库 点击进入 Vue Cesium官网 //vc-navigation <template><el-row ref="view ...

  7. SLAM综述阅读笔记六:基于图像语义的SLAM调研:移动机器人自主导航面向应用的解决方案 2020

    转自[[论文阅读]A survey of image semantics-based visual simultaneous localization and mapping 语义视觉SLAM综述 - ...

  8. php 论坛_推荐一个基于话题的高性能轻型开源PHP论坛程序

    Carbon Forum是一个基于话题的高性能轻型PHP论坛,不像Discuz那样,Carbon Forum很纯粹,没有一点多余的功能.另外像是微博,QQ,GitHub第三方登录也一应俱全.官方还提供 ...

  9. 分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快

    今天在github又发现一个国内的大神开源的chatGPT项目.先看看整体的效果如何吧. 这个项目是基于OpenAI GPT-3.5 Turbo API 的demo. 本地部署 环境准备 安装node ...

最新文章

  1. 面试 6:调整数组顺序使奇数位于偶数前面
  2. Linux安装Java、Maven、Mysql、RabbitMQ
  3. hdu 5563 Clarke and five-pointed star (枚举)
  4. python调试神器_介绍一款调试Python的神器
  5. 动态加入JS及加入CSS
  6. 数组|leetcode35.搜索插入位置
  7. 根据日期累计求和_excel条件求和技巧:应用SUMIF函数计算客户余款
  8. LeetCode 868. 二进制间距(位运算)
  9. 12款程序员专用chrome插件神器推荐
  10. 内核中的UDP socket流程(5)——inet_create
  11. 微信小程序开发的坑---新建页面or修改app.json
  12. AI总监Karpathy亲自揭秘特斯拉纯视觉系统,还有自动驾驶超算Dojo原型
  13. dda算法c语言opengl实现
  14. 关于填写软件著作权申请表时源程序量总行数怎么确认的问题?
  15. ROS 机器人操作系统:概述
  16. 最小二乘法 c 语言程序,最小二乘法的嵌入式C语言实现
  17. 下一代计算机 激光,《Nature》:仅需一束激光,计算机速度有望能再快100万倍...
  18. 用Java实现信号量机制
  19. 百度统计后台页面点击图提示无法建立连接
  20. 看大牌厂商PK——2010 ARM研讨会见闻

热门文章

  1. Chapter 2 Open Book——8
  2. Javascript闭包,比较好懂的一篇文章
  3. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站
  4. 超简略的samba配置
  5. MySQL基础篇:数据类型
  6. SpringBoot面试题(持续整理中……)
  7. 代码质量第4层——健壮的代码!
  8. 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?
  9. 低成本可复用前端框架——Linke
  10. 通俗易懂地讲解 Java 的注解