文章目录
摘要
【针对问题】传统的虚拟现实技术存在速度慢和模型与现实物体尺度之间存在偏差的问题。
【提出模型】基于 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 → 三种约束(配准约束、里程计约束和回环约束)构造最小二乘完成对位姿图的优化;
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)
- 重定位模块 → \rightarrow → 条件:再次进入环境;措施:使当前滑动窗口帧与过去的位姿图对齐 → \rightarrow → 判断当前图像中的特征点与位姿图中特征点的相似度是否大于设定的阈值 → \rightarrow → 如果超过了阈值即判断为重定位成功 → \rightarrow → 通过逆深度求解相机在地图中的位姿实现重定位
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}) Bj∈NbhdNbhd(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,1⋯dN−2,1dN−1,1d1,2d2,2⋯dN−2,2dN−1,2⋯⋯⋯⋯⋯d1,Nd2,N⋯dN−2,NdN−1,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=k1∑j=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=k1∑Bj∈NbhdNbhd(pi)(Bj−oi)(pi−oi)T
协方差矩阵 SVD 分解 → \rightarrow → 最小特征值对应的特征向量即为法线 N ⃗ \pmb{\vec{N}} NN
Step 3: Possion 曲面重建生成模型
-
思想:for 点云 S S S, M M M = 物体表面 → \rightarrow → ∂ M \partial{M} ∂M = 物体的边界, N ⃗ → \pmb{\vec{N}} \rightarrow NN→ 物体内外的方向
隐式地拟合一个由物体派生的指示函数 χ 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,q∈Mq∈/M,q代表点云中的一个点
-
基本原理:
(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(owq−oc)ow31(1)
(2)引入基函数 F \pmb{F} FF 描述节点函数和向量场 V ⃗ \pmb{\vec{V}} VV 之间的关系
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} VV(q)=s∈S∑o∈NgbrD(s)∑αo,sFo(q)s.NN(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∈ϱ∑∣ ∣∣ ∣⟨Δχ,Fo⟩−⟨∇⋅VV,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∈ϱ∣∣v−vo∣∣2; 矩阵操作求解向量 → \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}|| minx∈R∣ϱ∣∣∣Lx−vLx−v∣∣ ⟶ \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 点云地图生成
-
对比 → \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.31 m m m
4 结论
可推广应用于室内特殊环境下的信息规划、室内建筑与装饰设计、计算机设施管理以及古文物修复等多个领域
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。