【论文笔记】基于 VR 的移动机器人真实环境三维建模系统
文章目录
- 摘要
- 关键词
- 1 引言
- 2 系统框架
- 2.1 点云地图与重定位
- 2.2 生成模型地图
- Step 1: 去噪声和降采样
- Step 2: 计算每个点的法线
- Step 3: Possion 曲面重建生成模型
- Step 4: 点云三角化生成纹理贴图
- Step 5: 模型和纹理贴图进行配对
- 3 实验与分析
- 3.1 SLAM 点云地图生成
- 结论
- 3.2 三维地图模型的生成
- 结论
- 3.3 重定位
- 结论
- 4 结论
摘要
【针对问题】传统的虚拟现实技术存在速度慢和模型与现实物体尺度之间存在偏差的问题。
【提出模型】基于 VR 的移动机器人的真实环境三维建模系统。
【具体细节】(1)视觉SLAM——高精度的、稠密的三维点云地图;(2)将三维点云通过曲面重建为室内三维
模型并导入到 unity 3D 中;(3)借助 VR 设备将室内三维模型置于三维立体的虚拟环境中;(4)再用视觉SLAM技术实现室内重定位,实时映射机器人在模型中完成交互。
【达到效果】(1)具有快速性;(2)解决了场景尺度偏差问题;(3)生成地图具有复用性;(4)让操作人员具有场景感。
关键词
- 视觉 SLAM;
- 虚拟现实;
- 三维建模;
- 室内建模;
1 引言
虚拟现实(Virtual Reality, VR)通过计算机模拟虚拟环境从而给人以沉浸感
意义:对实际物体建立合适的数学模型,以便机器人更好地分析作业
虚拟三维场景的构建工具:
建模软件 →\rightarrow→
3DS MAX
→\rightarrow→ 通用性软件;建模效率低,建模者要求高(对实时渲染环境要求更高);三维激光扫描建模技术 →\rightarrow→ 速度快、精度高、成本低;数据量大 →\rightarrow→ 难以在 VR 系统内运行,要和全站仪等测绘设备一同使用 →\rightarrow→ 对操作者要求高;
SLAM技术 →\rightarrow→ 可以更加高效地构建场景 →\rightarrow→ 分为基于激光雷达的和基于视觉传感器的
基于激光雷达 →\rightarrow→ 优点:不受光照的影响 →\rightarrow→ 代表:Junhao Xiao 等人提出通过 LOAM 算法构建点云地图实现三维场景地图 →\rightarrow→ 不足之处:每个点颜色表示其高度但却缺失了地图原有的颜色和纹理信息, 点云地图的表示形式也使结构细节模糊或缺失
基于视觉传感技术 →\rightarrow→ 体积小、便携容易、具有丰富的色彩和纹理信息
(1)ORB-SLAM 2:第一个用于单目相机、双目相机和RGB-D相机的开源系统;具有闭环、重定位和地图重用部分;缺点是使用单目相机 →\rightarrow→ 鲁棒性较差
(2)VINS-Mono:单目视觉惯性系统的实时SLAM框架;惯性单元 + 视觉信息 紧耦合;能解决单目上尺度不确定的问题;构建出稀疏三维地图
(3)Voxgraph:基于符号距离函数的大规模三维重建方法;子地图 →\rightarrow→ 降低存储和优化的代价;通过实时获得重力方向来降低位姿估计问题的维度(系统假设)。
本文工作 →\rightarrow→ 视觉SLAM技术与VR技术结合 →\rightarrow→ 基于 VR 的移动机器人的真实环境三维建模系统 →\rightarrow→ 效果:解决人工建模效率低下、激光SLAM缺乏纹理结构信息问题;验证重定位模块有效、模型地图可以复用。
2 系统框架
由机器人端和虚拟现实端两个模块组成
机器人端:
- (对机器人自身的位姿估计)利用 RGB-D 相机和 IMU 采集相应的数据,通过视觉里程计前端估计机器人位姿;
- (对机器人所在的地图构建估计)Voxgraph 算法作为后端优化位姿和构建全局地图 →\rightarrow→ 三维点云地图 →\rightarrow→ 经过表面重建生成三维模型地图 →\rightarrow→ 发送到 VR 端;
VR端:
- 操作人员根据实时视频流和三维模型地图中机器人位姿做出决策 →\rightarrow→ VR手柄发出控制命令;
- 实现机器人重定位,在三维模型地图中可视化‘;
2.1 点云地图与重定位
VR手柄控制 →\rightarrow→ 数据采集;
视觉SLAM算法 →\rightarrow→ 稠密点云三维场景地图构建;
前端 →\rightarrow→ 采用 VINS-Mono 作为视觉-惯导里程计初步估计位姿、生成子点云地图; →\rightarrow→ 完成后端所需要的三个约束计算;
后端 →\rightarrow→ 三种约束(配准约束、里程计约束和回环约束)构造最小二乘完成对位姿图的优化;
argminx∑(i,j)∈R∣∣eregi,j(TWSi,TWSj)∣∣σr2+∑(i,j)∈O∣∣eodomi,j(TWSi,TWSj)∣∣ΣO2+∑(i,j)∈L∣∣eloopi,j(TWSi,TWSj)∣∣ΣL2\arg\min_{x} \sum_{(i,j)\in R} ||e_{reg}^{i,j}(\pmb{T_{WS^{i}}},\pmb{T_{WS^{j}}})||_{\sigma_{r}}^{2} + \sum_{(i,j)\in O} ||e_{odom}^{i,j}(\pmb{T_{WS^{i}}},\pmb{T_{WS^{j}}})||_{\Sigma_{O}}^{2} + \sum_{(i,j)\in L} ||e_{loop}^{i,j}(\pmb{T_{WS^{i}}},\pmb{T_{WS^{j}}})||_{\Sigma_{L}}^{2} argxmin(i,j)∈R∑∣∣eregi,j(TWSiTWSi,TWSjTWSj)∣∣σr2+(i,j)∈O∑∣∣eodomi,j(TWSiTWSi,TWSjTWSj)∣∣ΣO2+(i,j)∈L∑∣∣eloopi,j(TWSiTWSi,TWSjTWSj)∣∣ΣL2
χ={TWS1,TWS2,⋯,TWSN}→\chi=\{ \pmb{T_{WS^{1}}},\pmb{T_{WS^{2}}},\cdots,\pmb{T_{WS^{N}}} \}\rightarrowχ={TWS1TWS1,TWS2TWS2,⋯,TWSNTWSN}→ 里程计初始估计的位姿,是四维向量;
R、O、L →\rightarrow→ 准配约束(registration)、里程计约束(odometry)、回环约束(loop)
- 重定位模块 →\rightarrow→ 条件:再次进入环境;措施:使当前滑动窗口帧与过去的位姿图对齐 →\rightarrow→ 判断当前图像中的特征点与位姿图中特征点的相似度是否大于设定的阈值 →\rightarrow→ 如果超过了阈值即判断为重定位成功 →\rightarrow→ 通过逆深度求解相机在地图中的位姿实现重定位
2.2 生成模型地图
稠密三维点云 →\rightarrow→ 曲面重建算法处理 →\rightarrow→ 精细化三维场景模型和与之对应的纹理贴图
曲面重建算法:基于 Possion 重建改进
Step 1: 去噪声和降采样
去噪 →\rightarrow→ 统计滤波器 →\rightarrow→ 除去离群点 →\rightarrow→ 离群点存在会导致建模出的场景不平滑
原理:点pip_{i}pi通过KNN邻近算法得到领域快Bj∈Nbhd(pi)B_{j}\in\pmb{Nbhd}(p_{i})Bj∈NbhdNbhd(pi),计算pip_{i}pi与领域中心点的距离xxx,根据距离分布满足高斯分布的原理,剔除平均距离在标准差范围之外的点即为剔除离群点;
降采样 →\rightarrow→ 最远点采样法 →\rightarrow→ 满足完备性的基础上提高速度 →\rightarrow→ 尽可能覆盖空间中所有点
原理:在输入点云数 NNN 的集合 AAA 中随机选择点 P0P_{0}P0 作为起始点 →\rightarrow→ 得到采样集合 B={P0}B=\{ P_{0} \}B={P0} →\rightarrow→ 计算集合 AAA 中剩余点到集合 BBB 中点的距离 →\rightarrow→ 选择距离最远的点作为 P1P_{1}P1 添加到集合 BBB 中
→\rightarrow→ 当集合 B 中点数大于1,满足公式:
max(min[d1,1d1,2⋯d1,Nd2,1d2,2⋯d2,N⋯⋯⋯⋯dN−2,1dN−2,2⋯dN−2,NdN−1,1dN−1,2⋯dN−1,N])\max\big( \min \big[ \begin{matrix} d_{1,1} & d_{1,2} & \cdots & d_{1,N} \\ d_{2,1} & d_{2,2} & \cdots & d_{2,N} \\ \cdots & \cdots & \cdots & \cdots \\ d_{N-2,1} & d_{N-2,2} & \cdots & d_{N-2,N} \\ d_{N-1,1} & d_{N-1,2} & \cdots & d_{N-1,N} \end{matrix} \big] \big) max(min[d1,1d2,1⋯dN−2,1dN−1,1d1,2d2,2⋯dN−2,2dN−1,2⋯⋯⋯⋯⋯d1,Nd2,N⋯dN−2,NdN−1,N])
di,j→d_{i,j}\rightarrowdi,j→ 集合 AAA 中剩余点到采样集合 BBB 中的距离
maxmin(⋯)→\max\min(\cdots)\rightarrowmaxmin(⋯)→ 先取矩阵中每一列的最小值 →\rightarrow→ 一个行向量 →\rightarrow→ 向量中元素最大值对应的点 →\rightarrow→ 采样点
→\rightarrow→ 直到获得 NNN 个采样点
Step 2: 计算每个点的法线
根据领域计算质心 →oi=1k∑j=0j<kpj\rightarrow o_{i}=\frac{1}{k}\sum_{j=0}^{j<k}p_{j}→oi=k1∑j=0j<kpj
构建协方差矩阵 →\rightarrow→ cov=1k∑Bj∈Nbhd(pi)(Bj−oi)(pi−oi)T\pmb{cov}=\frac{1}{k}\sum_{B_{j}\in\pmb{Nbhd}(p_{i})}(B_{j}-o_{i})(p_{i}-o_{i})^{T}covcov=k1∑Bj∈NbhdNbhd(pi)(Bj−oi)(pi−oi)T
协方差矩阵 SVD 分解 →\rightarrow→ 最小特征值对应的特征向量即为法线 N⃗\pmb{\vec{N}}NN
Step 3: Possion 曲面重建生成模型
思想:for 点云SSS,MMM = 物体表面 →\rightarrow→ ∂M\partial{M}∂M = 物体的边界,N⃗→\pmb{\vec{N}} \rightarrowNN→ 物体内外的方向
隐式地拟合一个由物体派生的指示函数 χM\chi_{M}χM:曲面重构问题 →\rightarrow→ 重构指示函数 →\rightarrow→ 等值面提取
χM(q)={1,q∈M0,q∉M,q代表点云中的一个点\chi_{M}(q) = \begin{cases} 1,&q\in M \\ 0,&q \notin M \end{cases} ,q代表点云中的一个点 χM(q)={1,0,q∈Mq∈/M,q代表点云中的一个点
基本原理:
(1)对输入点集建立深度为 D\pmb{D}DD 的八叉树 ϱ\pmb{\varrho}ϱϱ 拓扑关系并对每一个节点 ooo 附加 一个节点函数 FoF_{o}Fo
oc→o_{c} \rightarrowoc→ 节点的中心; ow→o_{w} \rightarrowow→ 节点的宽度
Fo(q)=F(q−ocow)1ow3(1)F_{o}(q)=F(\frac{q-o_{c}}{o_{w}})\frac{1}{o_{w}^{3}} \tag{1} Fo(q)=F(owq−oc)ow31(1)
(2)引入基函数 F\pmb{F}FF 描述节点函数和向量场 V⃗\pmb{\vec{V}}VV 之间的关系
F(q)=F(q2D)(2)F(q)=F(\frac{q}{2^{D}}) \tag{2} F(q)=F(2Dq)(2)
(3)引入高通滤波器将有向点集的表面重建转换为一个空间泊松问题
F(x,y,z)=(B(x)B(y)B(z))∗nB(t)={1,∣t∣<50,otherwise(3)F(x,y,z)=(B(x)B(y)B(z))^{*n} \tag{3} \\ B(t) = \begin{cases} 1,&|t|<5 \\ 0,& otherwise \end{cases} F(x,y,z)=(B(x)B(y)B(z))∗nB(t)={1,0,∣t∣<5otherwise(3)
(4)指示函数所代表的表面梯度域的向量场
V⃗(q)=∑s∈S∑o∈NgbrD(s)αo,sFo(q)s.N⃗(4)\pmb{\vec{V}}(q) = \sum_{s\in S}\sum_{o \in Ngbr_{D}(s)}\alpha_{o,s}F_{o}(q)s.\pmb{\vec{N}} \tag{4} VV(q)=s∈S∑o∈NgbrD(s)∑αo,sFo(q)s.NN(4)
NgbrD(s)Ngbr_{D}(s)NgbrD(s) →\rightarrow→ 当前节点 s.ps.ps.p 的八个临近节点 α{o,s}\alpha\{o,s\}α{o,s} →\rightarrow→ 插值的权重
(5)求解问题简化
∑o∈ϱ∣∣<Δχ−∇⋅V⃗,Fo>∣∣2=∑o∈ϱ∣∣<Δχ,Fo>−<∇⋅V⃗,Fo>∣∣2(5)\sum_{o\in\varrho}\big|\big| \big< \Delta\chi-\nabla\cdot\vec{\pmb{V}},F_{o} \big> \big|\big|^{2}=\sum_{o\in\varrho}\big|\big| \big< \Delta\chi,F_{o} \big> - \big< \nabla\cdot\vec{\pmb{V}},F_{o} \big> \big|\big|^{2} \tag{5} o∈ϱ∑∣∣∣∣⟨Δχ−∇⋅VV,Fo⟩∣∣∣∣2=o∈ϱ∑∣∣∣∣⟨Δχ,Fo⟩−⟨∇⋅VV,Fo⟩∣∣∣∣2(5)
求解函数 χ\chiχ 的方法:通过该函数在函数空间投影的拉普拉斯算子与 FoF_{o}Fo 构成的向量逼近 vvv 解决转换成 ∑o∈ϱ∣∣v−vo∣∣2\sum_{o\in\varrho}||v-v_{o}||^{2}∑o∈ϱ∣∣v−vo∣∣2; 矩阵操作求解向量 →\rightarrow→ 算法定义了一个 v×vv \times vv×v 阶矩阵 LLL →\rightarrow→ 每一项是拉普拉斯算子和每一个节点函数的点乘结果 ⟶\longrightarrow⟶ 求解 minx∈R∣ϱ∣∣∣Lx−v∣∣\min_{x\in R^{|\varrho|}}||\pmb{Lx - v}||minx∈R∣ϱ∣∣∣Lx−vLx−v∣∣ ⟶\longrightarrow⟶ 移动立方体法 ⟶\longrightarrow⟶ 提取得到等值面
Step 4: 点云三角化生成纹理贴图
对在表面 SSS 的点进行三角化操作:沿着三角化的顶点与贴图平面 UVUVUV 坐标进行匹配映射,贴图颜色信息为三个点对应的三个通道的灰度平均值
Step 5: 模型和纹理贴图进行配对
将贴图与法线正向方向 的模型一侧匹配映射
3 实验与分析
构建方法评估数据集 →\rightarrow→ EuRoC数据集
三维重建数据包获得工具 →\rightarrow→ Release D435i 相机
系统运行平台 →\rightarrow→ Ubuntu 16.04 64 位台式机
CPU →\rightarrow→ i9-10900X(10 核@3.70GHz)
GPU →\rightarrow→ 64G 内存 GTX 2080Ti
机器人运行平台 →\rightarrow→ NVIDIA Jetson Xavier
3.1 SLAM 点云地图生成
对比 →\rightarrow→ ORB-SLAM 2 、OKVIS
运行次数 →\rightarrow→ 每个系统 10 次,
计算指标 →\rightarrow→ 在数据集上的绝对轨迹误差(ATE)中的均方根误差 (RMSE)的平均值来评估本文系统的定位精度
结论
- 工厂数据集(MH-)中:本系统以及其他 SLAM 系统的定位误差均较小, ORB-SLLAM2 表现最优
- 室内场景(V-)中,除了在 V202 中,本系统(Ours) 的定位精度不仅远高于 OKVIS 系统且优于 ORB-SLAM 2 系统,在所有数据集上表现出较高的稳定性, 没有出现跟踪失败的结果
- 稠密的三维点云地图结构细节更加丰富
3.2 三维地图模型的生成
最后本系统经过统计滤波器(K=50)去噪后获得具有 86560 个点的稠密点云地图
通过对改稠密点云地图进行 FPS 降采样到不同的点云数,再通过曲面重建生成三维地图模型
- COLMAP、OpenMVG、OpenMVS 作为对比项
- 计算指标:对比模型化所消耗的时间,相应产生的面数
结论
- COLMAP+OpenMVS 和 OpenMVG+OpenMVS 由于提取的特征点数较多所以在时间上耗时严重
- 随着采样点的减少,模型重建的时间也相应减少
- 降采样到 30000 个点云左右为模型的最佳选择
3.3 重定位
结论
每次都成功初始化和重定位
系统的重定位平均误差为 0.31mmm
4 结论
可推广应用于室内特殊环境下的信息规划、室内建筑与装饰设计、计算机设施管理以及古文物修复等多个领域
【论文笔记】基于 VR 的移动机器人真实环境三维建模系统相关推荐
- 【论文笔记】面向智能假肢手臂的生机接口系统与类神经协同控制
[论文笔记]面向智能假肢手臂的生机接口系统与类神经协同控制 摘要 搭建了一种基于 sEMG(表面肌电信号)的智能假肢手臂系统,实现手臂残障程度较高患者的手肘协调控制. 基于肌肉协同理论,使用非负矩阵分 ...
- 论文笔记--基于 FCM 聚类的跨模态人物图像标注方法-2015
期刊论文-基于 FCM 聚类的跨模态人物图像标注方法-2015-微型电脑应用-赵昀,张翌翀 文末附人脸标注相关论文下载地址 文章目录 摘要 技术 人脸检测与特征表示(与2012年吴伟硕士论文<跨 ...
- 论文笔记——基于多传感器融合的移动机器人SLAM算法研究
创新点: 1.松耦合地图匹配优化算法: 采用了独立运行各SLAM系统并通过附加的管理程序实现各SLAM系统数据的交互.由于激光SLAM在位姿估计精度上优于视觉SLAM,管理程序在SLAM运行过程中实时 ...
- 论文笔记 | 基于深度学习的乳腺转移瘤识别(Deep Learning for Identifying Metastatic Breast Cancer)
论文阅读笔记:原文链接 摘要 生物医学图像国际研讨会(International Symposium on Biomedical Imaging,ISBI)举办了一个在前哨淋巴节点全幻灯图中自动检测转 ...
- 论文笔记-基于代码属性图和Bi-GRU的软件脆弱性检测方法
一.摘要 提出了一种基于代码属性图和Bi-GRU的软件脆弱性检测方法.该方法通过从函数的代码属性图中提取出抽象语法树序列.控制流图序列作为函数表征的表征方式,减少代码表征过程中的信息的损失,并通过选 ...
- [论文笔记]基于 CNN+双向LSTM 实现服饰搭配的生成
论文:<Learning Fashion Compatibility with Bidirectional LSTMs> 论文地址:https://arxiv.org/abs/1707.0 ...
- 论文笔记——基于多传感器融合的即时定位与地图构建方法研究
1.多传感器融合SLAM不完全分类: 视觉和IMU融合VIO: 基于滤波的VIO:采用EKF进行视觉信息和IMU数据进行数据融合.预测和更新.经典算法:MSCKF.ROVIO 基于优化的VIO:对视觉 ...
- 论文笔记-基于呼吸信号的人类应激状态实时遥测
深度数据:Kinect 区别于普通摄像机的特点之一就是能够实时获取视野范围内物体与相机之间的距离(深度信息).Kinect 获取深度信息的原理不同于传统的结构光技术,而是使用了一种光编码(light ...
- 论文笔记-基于BiLSTM 模型的漏洞检测
一.摘要 首先从源代码中提取方法体,形成方法集:为方法集中的每个方法构建抽象语法树,借助抽象语法树抽取方法中的语句,形成语句集:替换语句集中程序员自定义的变量名.方法名及字符串,并为每条语句分配一 ...
最新文章
- [转]Asp.NET生成静态页面并分页
- 我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种!
- hibernate下载
- 深度学习之基于Inception_ResNet_V2和CNN实现交通标志识别
- Fedora15安装NVIDIA显卡驱动全过程
- 用js来实现那些数据结构06(队列)
- 工作375-input readonly
- Git中非常重要的一个文件——.gitignore详解
- 比特币的区块的生成、链接和分叉
- LFFD:轻量级人脸检测器,不止是快
- Python 解析构建数据大杂烩 -- csv、xml、json、excel
- Spring 框架RCE 安全漏洞及解决方式
- IPLATUI----GRID删除
- 【2018.06.21学习笔记】【linux高级知识 14.1-14.3】
- 一个创建 docker java jar项目案例 docker-sentinel
- java玫瑰花代码_程序员最美的情人节玫瑰花,JAVA代码实现的3D玫瑰噢
- keypress事件中键盘上每个键的KeyAscii值(易语言/VB)
- WoMic虚拟麦克风技术剖析
- 用PHPnow运行PHP项目以及PHPnow相关问题的解决
- c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...
热门文章
- NoSQL 中的 CAP
- 【计算机视觉】人类颜色感知、光受体、光波长和颜色信息以及颜色匹配
- 计算机教学楼起名,学校教学楼起名(文雅的教学楼取名)
- IBM InfoSphere Guardium的大数据安全性和审计
- JAVA三角形边长定义_Java编译:定义三角形的三条边长a=4,b=8.54,c=4.44;求三角形的周长d...
- 软件体系结构期末复习
- socket接收消息 字符串长度
- fx2n4ad模块中文手册_解析三菱特殊模块FX2N-4AD-PT详细说明及编程应用
- 菜鸡的秋招升级打怪之旅
- vc 打开文件对话框获取选择文件路径