【论文笔记】基于 VR 的移动机器人真实环境三维建模系统

摘要

针对问题】传统的虚拟现实技术存在速度慢模型与现实物体尺度之间存在偏差的问题。

提出模型】基于 VR 的移动机器人的真实环境三维建模系统。

具体细节】(1)视觉SLAM——高精度的、稠密的三维点云地图;(2)将三维点云通过曲面重建室内三维
模型并导入到 unity 3D 中;(3)借助 VR 设备将室内三维模型置于三维立体的虚拟环境中;(4)再用视觉SLAM技术实现室内重定位,实时映射机器人在模型中完成交互。

达到效果】(1)具有快速性;(2)解决了场景尺度偏差问题;(3)生成地图具有复用性;(4)让操作人员具有场景感。

关键词

  1. 视觉 SLAM;
  2. 虚拟现实;
  3. 三维建模;
  4. 室内建模;

1 引言

虚拟现实(Virtual Reality, VR)通过计算机模拟虚拟环境从而给人以沉浸感

意义:对实际物体建立合适的数学模型,以便机器人更好地分析作业

虚拟三维场景的构建工具:

  1. 建模软件 → \rightarrow 3DS MAX → \rightarrow 通用性软件;建模效率低,建模者要求高(对实时渲染环境要求更高);

  2. 三维激光扫描建模技术 → \rightarrow 速度快、精度高、成本低;数据量大 → \rightarrow 难以在 VR 系统内运行,要和全站仪等测绘设备一同使用 → \rightarrow 对操作者要求高;

  3. SLAM技术 → \rightarrow 可以更加高效地构建场景 → \rightarrow 分为基于激光雷达的基于视觉传感器的

    基于激光雷达 → \rightarrow 优点:不受光照的影响 → \rightarrow 代表:Junhao Xiao 等人提出通过 LOAM 算法构建点云地图实现三维场景地图 → \rightarrow 不足之处:每个点颜色表示其高度但却缺失了地图原有的颜色和纹理信息, 点云地图的表示形式也使结构细节模糊缺失

    基于视觉传感技术 → \rightarrow 体积小、便携容易、具有丰富的色彩和纹理信息

    (1)ORB-SLAM 2:第一个用于单目相机、双目相机和RGB-D相机的开源系统;具有闭环、重定位和地图重用部分;缺点是使用单目相机 → \rightarrow 鲁棒性较差

    (2)VINS-Mono:单目视觉惯性系统的实时SLAM框架;惯性单元 + 视觉信息 紧耦合;能解决单目上尺度不确定的问题;构建出稀疏三维地图

    (3)Voxgraph:基于符号距离函数的大规模三维重建方法;子地图 → \rightarrow 降低存储和优化的代价;通过实时获得重力方向降低位姿估计问题的维度(系统假设)。

  4. 本文工作 → \rightarrow 视觉SLAM技术与VR技术结合 → \rightarrow 基于 VR 的移动机器人的真实环境三维建模系统 → \rightarrow 效果:解决人工建模效率低下、激光SLAM缺乏纹理结构信息问题;验证重定位模块有效、模型地图可以复用

2 系统框架

机器人端虚拟现实端两个模块组成

机器人端:

  1. (对机器人自身的位姿估计)利用 RGB-D 相机IMU 采集相应的数据,通过视觉里程计前端估计机器人位姿;
  2. (对机器人所在的地图构建估计)Voxgraph 算法作为后端优化位姿构建全局地图 → \rightarrow 三维点云地图 → \rightarrow 经过表面重建生成三维模型地图 → \rightarrow 发送到 VR 端;

VR端:

  1. 操作人员根据实时视频流三维模型地图中机器人位姿做出决策 → \rightarrow VR手柄发出控制命令;
  2. 实现机器人重定位,在三维模型地图中可视化‘;

论文图片1

2.1 点云地图与重定位

  1. VR手柄控制 → \rightarrow 数据采集;

  2. 视觉SLAM算法 → \rightarrow 稠密点云三维场景地图构建;

  3. 前端 → \rightarrow 采用 VINS-Mono 作为视觉-惯导里程计初步估计位姿生成子点云地图 → \rightarrow 完成后端所需要的三个约束计算

  4. 后端 → \rightarrow 三种约束(配准约束里程计约束回环约束)构造最小二乘完成对位姿图的优化;

arg ⁡ min ⁡ x ∑ ( i , j ) ∈ R ∣ ∣ e r e g i , j ( T W S i , T W S j ) ∣ ∣ σ r 2 + ∑ ( i , j ) ∈ O ∣ ∣ e o d o m i , j ( T W S i , T W S j ) ∣ ∣ Σ O 2 + ∑ ( i , j ) ∈ L ∣ ∣ e l o o p i , j ( T W S i , T W S j ) ∣ ∣ Σ L 2 \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

χ = { T W S 1 , T W S 2 , ⋯   , T W S N } → \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

  1. 重定位模块 → \rightarrow 条件:再次进入环境;措施:使当前滑动窗口帧过去的位姿图对齐 → \rightarrow 判断当前图像中的特征点位姿图中特征点相似度是否大于设定的阈值 → \rightarrow 如果超过了阈值即判断为重定位成功 → \rightarrow 通过逆深度求解相机在地图中的位姿实现重定位

论文图片2

2.2 生成模型地图

稠密三维点云 → \rightarrow 曲面重建算法处理 → \rightarrow 精细化三维场景模型和与之对应的纹理贴图

曲面重建算法:基于 Possion 重建改进

Step 1: 去噪声和降采样

去噪 → \rightarrow 统计滤波器 → \rightarrow 除去离群点 → \rightarrow 离群点存在会导致建模出的场景不平滑

​ 原理:点 p i p_{i} pi通过KNN邻近算法得到领域快 B j ∈ N b h d ( p i ) B_{j}\in\pmb{Nbhd}(p_{i}) BjNbhdNbhd(pi),计算 p i p_{i} pi与领域中心点的距离 x x x,根据距离分布满足高斯分布的原理,剔除平均距离在标准差范围之外的点即为剔除离群点;

降采样 → \rightarrow 最远点采样法 → \rightarrow 满足完备性的基础上提高速度 → \rightarrow 尽可能覆盖空间中所有点

​ 原理:在输入点云数 N N N 的集合 A A A 中随机选择点 P 0 P_{0} P0 作为起始点 → \rightarrow 得到采样集合 B = { P 0 } B=\{ P_{0} \} B={P0} → \rightarrow 计算集合 A A A 中剩余点到集合 B B B 中点的距离 → \rightarrow 选择距离最远的点作为 P 1 P_{1} P1 添加到集合 B B B

→ \rightarrow 当集合 B 中点数大于1,满足公式:
max ⁡ ( min ⁡ [ d 1 , 1 d 1 , 2 ⋯ d 1 , N d 2 , 1 d 2 , 2 ⋯ d 2 , N ⋯ ⋯ ⋯ ⋯ d N − 2 , 1 d N − 2 , 2 ⋯ d N − 2 , N d N − 1 , 1 d N − 1 , 2 ⋯ d N − 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,1dN2,1dN1,1d1,2d2,2dN2,2dN1,2d1,Nd2,NdN2,NdN1,N])
d i , j → d_{i,j}\rightarrow di,j 集合 A A A 中剩余点到采样集合 B B B 中的距离

max ⁡ min ⁡ ( ⋯   ) → \max\min(\cdots)\rightarrow maxmin() 先取矩阵中每一列的最小值 → \rightarrow 一个行向量 → \rightarrow 向量中元素最大值对应的点 → \rightarrow 采样点

→ \rightarrow 直到获得 N N N 个采样点

Step 2: 计算每个点的法线

根据领域计算质心 → o i = 1 k ∑ j = 0 j < k p j \rightarrow o_{i}=\frac{1}{k}\sum_{j=0}^{j<k}p_{j} oi=k1j=0j<kpj

构建协方差矩阵 → \rightarrow c o v = 1 k ∑ B j ∈ N b h d ( p i ) ( B j − o i ) ( p i − o i ) T \pmb{cov}=\frac{1}{k}\sum_{B_{j}\in\pmb{Nbhd}(p_{i})}(B_{j}-o_{i})(p_{i}-o_{i})^{T} covcov=k1BjNbhdNbhd(pi)(Bjoi)(pioi)T

协方差矩阵 SVD 分解 → \rightarrow 最小特征值对应的特征向量即为法线 N ⃗ \pmb{\vec{N}} N N

Step 3: Possion 曲面重建生成模型

  1. 思想:for 点云 S S S M M M = 物体表面 → \rightarrow ∂ M \partial{M} M = 物体的边界, N ⃗ → \pmb{\vec{N}} \rightarrow N N 物体内外的方向

    隐式地拟合一个由物体派生的指示函数 χ M \chi_{M} χM:曲面重构问题 → \rightarrow 重构指示函数 → \rightarrow 等值面提取

χ M ( q ) = { 1 , q ∈ M 0 , q ∉ M , q 代表点云中的一个点 \chi_{M}(q) = \begin{cases} 1,&q\in M \\ 0,&q \notin M \end{cases} ,q代表点云中的一个点 χM(q)={1,0,qMq/M,q代表点云中的一个点

  1. 基本原理

    ​ (1)对输入点集建立深度为 D \pmb{D} DD 的八叉树 ϱ \pmb{\varrho} ϱϱ 拓扑关系并对每一个节点 o o o 附加 一个节点函数 F o F_{o} Fo

    o c → o_{c} \rightarrow oc 节点的中心; o w → o_{w} \rightarrow ow 节点的宽度
    F o ( q ) = F ( q − o c o w ) 1 o w 3 (1) F_{o}(q)=F(\frac{q-o_{c}}{o_{w}})\frac{1}{o_{w}^{3}} \tag{1} Fo(q)=F(owqoc)ow31(1)
    ​ (2)引入基函数 F \pmb{F} FF 描述节点函数和向量场 V ⃗ \pmb{\vec{V}} V V 之间的关系
    F ( q ) = F ( q 2 D ) (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 ) ) ∗ n B ( t ) = { 1 , ∣ t ∣ < 5 0 , o t h e r w i s e (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 ∈ N g b r D ( s ) α o , s F o ( 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} V V (q)=sSoNgbrD(s)αo,sFo(q)s.N N (4)
    N g b r D ( s ) Ngbr_{D}(s) NgbrD(s) → \rightarrow 当前节点 s . p s.p s.p 的八个临近节点

    α { o , s } \alpha\{o,s\} α{o,s} → \rightarrow 插值的权重

    ​ (5)求解问题简化
    ∑ o ∈ ϱ ∣ ∣ < Δ χ − ∇ ⋅ V ⃗ , F o > ∣ ∣ 2 = ∑ o ∈ ϱ ∣ ∣ < Δ χ , F o > − < ∇ ⋅ V ⃗ , F o > ∣ ∣ 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ϱ Δχ,FoVV ,Fo 2(5)
    ​ 求解函数 χ \chi χ 的方法:通过该函数在函数空间投影的拉普拉斯算子 F o F_{o} Fo 构成的向量逼近 v v v 解决转换成 ∑ o ∈ ϱ ∣ ∣ v − v o ∣ ∣ 2 \sum_{o\in\varrho}||v-v_{o}||^{2} oϱ∣∣vvo2

    ​ 矩阵操作求解向量 → \rightarrow 算法定义了一个 v × v v \times v v×v 阶矩阵 L L L → \rightarrow 每一项是拉普拉斯算子和每一个节点函数的点乘结果 ⟶ \longrightarrow 求解 min ⁡ x ∈ R ∣ ϱ ∣ ∣ ∣ L x − v ∣ ∣ \min_{x\in R^{|\varrho|}}||\pmb{Lx - v}|| minxRϱ∣∣LxvLxv∣∣ ⟶ \longrightarrow 移动立方体法 ⟶ \longrightarrow 提取得到等值面

Step 4: 点云三角化生成纹理贴图

对在表面 S S S 的点进行三角化操作:沿着三角化的顶点贴图平面 U V UV UV 坐标进行匹配映射,贴图颜色信息为三个点对应的三个通道的灰度平均值

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 点云地图生成

  1. 对比 → \rightarrow ORB-SLAM 2 、OKVIS

  2. 运行次数 → \rightarrow 每个系统 10 次,

  3. 计算指标 → \rightarrow 在数据集上的绝对轨迹误差(ATE)均方根误差 (RMSE)的平均值来评估本文系统的定位精度

论文表格1

结论

  1. 工厂数据集(MH-)中:本系统以及其他 SLAM 系统的定位误差均较小ORB-SLLAM2 表现最优
  2. 室内场景(V-)中,除了在 V202 中,本系统(Ours) 的定位精度不仅远高于 OKVIS 系统优于 ORB-SLAM 2 系统,在所有数据集上表现出较高的稳定性, 没有出现跟踪失败的结果
  3. 稠密的三维点云地图结构细节更加丰富

3.2 三维地图模型的生成

最后本系统经过统计滤波器(K=50)去噪后获得具有 86560 个点的稠密点云地图

通过对改稠密点云地图进行 FPS 降采样到不同的点云数,再通过曲面重建生成三维地图模型

  1. COLMAP、OpenMVG、OpenMVS 作为对比项
  2. 计算指标:对比模型化所消耗的时间相应产生的面数

论文图片3

论文表格2

论文图片4

结论

  1. COLMAP+OpenMVS 和 OpenMVG+OpenMVS 由于提取的特征点数较多所以在时间上耗时严重
  2. 随着采样点的减少,模型重建的时间也相应减少
  3. 降采样到 30000 个点云左右为模型的最佳选择

3.3 重定位

论文图片5


论文表格3

结论

  1. 每次都成功初始化和重定位

  2. 系统的重定位平均误差为 0.31 m m m

4 结论

可推广应用于室内特殊环境下的信息规划、室内建筑与装饰设计、计算机设施管理以及古文物修复等多个领域

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340