付 钰,陈永当,殷俊清
(1.西安工程大学,陕西 西安 710048;2.西安市现代智能纺织装备重点实验室,陕西 西安 710048)
工业机器人是面向工业领域的多关节机械手或多自由度的机械装置[1]。虚拟展示系统具有可拓展性好、交互性强、方便实现可视化等优点。在工业机器人虚拟展示系统中最为关键的步骤是三维模型的建立和优化,模型的精细度和复杂度直接影响系统的沉浸性、真实感和实时性[2-4]。同时由于工业机器人有结构庞杂、细小零件繁多的特点,直接导入虚拟引擎中会存在渲染计算量大等问题。
因此,为了提高后期渲染、交互设计等的计算效率,并确保工业机器人关键零部件的精确性,需要对三维模型进行简化处理。兰雪艳等[5]提出基于二次误差测度的三角形邻域局部分析算法,针对轨道车辆部件模型表面局部区域多尖锐棱角的特点,在经典QEM算法基础上,引入三角形平均面积、邻域曲率和顶点权重系数3个约束因子,能保证模型在虚拟现实场景中快速传输和逼真显示。车力等[6]提出一种视觉特征保持的三角形折叠网络模型简化算法,针对网格简化算法存在模型视觉特征丢失问题,结合视觉感知和几何误差,能较为便捷地控制模型的简化深度。张文元等[7]针对人体三维场景的流畅度问题,提出一种改进的QEM算法,将顶点的绝对曲率引入顶点的二次误差矩阵中,将乘积作为新的误差测度矩阵,能在简化过程中较好保留原始模型的尖端特征,实验结果表明,改进后的算法不会改变基本误差矩阵的性质,仅改变边折叠的顺序。胡博等[8]针对复杂三维艺术场景优化问题,提出一种结合半边折叠算法和投影值预处理的方法,通过添加细节层次的预处理阶段,运用投影值选择合适的细节层次视差度量系数,加快了实时计算速度。闵慧芹等[9]针对机械大型装备在虚拟仿真过程中曲面模型复杂,计算机运算负担繁重的技术问题,提出一种采用法线贴图技术对模型进行优化的方法,依据高模产生具有细节特征的法线贴图给低模,在达到精度要求的前提下,也同时节省渲染运算工作量。
针对工业机器人等重要机械装备的模型结构复杂、三维网格模型数据量较大且在导出时容易存在破面的问题,本文提出了面向工业机器人虚拟展示系统的三维模型简化方法,通过引入修正网格顶点的优化环节,以快速排序算法对网格中冗余顶点数据进行滤除,对网格模型简化进行预处理,建立模型逐步简化方式生成多层次结构模型。实现了工业机器人的三维多分辨率精确模型简化优化。
经典的基于二次误差度量的边折叠网格简化算法是由Garland提出。二次误差度量算法首先确定每个顶点的误差矩阵,顶点合并操作时再引入误差评价,然后依据误差大小来排序各条待收缩边。在边折叠过程中首先折叠代价最小的边,直到模型达到所要的分辨率为止[10]。该算法可以产生较好的模型简化质量且算法的时间复杂度较低,是现阶段较为常用的三维模型简化方法。
在边折叠算法中,先选择三角网格中的1条对于整体模型结构影响较小的边折叠为1个顶点,并将相关联的边和三角形面删除,然后用新顶点更新受影响的边和面片[11]。如图1所示。每次对三维模型进行简化操作时选择1条边作为被删除的对象,并将其进行折叠且1次合并2个的端点,再移去2个与之邻接的三角形面片。
图1 边折叠法
a.将顶点Vi,Vj均移至新的顶点Vh。
b.用顶点Vj取代顶点Vi。
c.剔除顶点Vj并删除所有邻接退化的边和面。
为了度量精简模型和原始模型之间的简化程度,引入误差度量准则。在计算边缘折叠代价时,将顶点到相关三角形面片的距离平方和作为模型的简化误差度量,也称为折叠代价。即每一个顶点都计算出一个4×4的对称二次误差矩阵Q为
(1)
针对工业机器人零部件繁多、结构复杂,模型细节可能会存在点冗余及边冗余导致模型在进行网格简化的过程中出现破损的问题,提出了一套面向工业机器人虚拟展示系统的模型优化简化方案。方案整体流程如图2所示,该方案在直接进行网格简化前加入修正网格的优化环节,以解决工业机器人及其关键部件的模型可能存在表面空洞、模型数据量大和相关计算量大等问题,实现网格模型的简化,为虚拟展示系统提供多种细节层次的模型,满足系统的实际运行需求。
图2 改进后的网格模型简化方案流程
obj文件是由Alias Wavefront公司推出的一种标准的3D模型文件格式[12]。如图3所示,obj模型能转化为可读的文本格式, 存储了三维模型的顶点、法线和纹理坐标,及其相对应的三角形面片索引和材质使用信息。
图3 obj文件中的顶点信息和索引列表
结构复杂的工业机器人模型存在巨大的数据冗余,如一个有189 880个三角网格的工业机器人的末端执行工具,obj文件在存储这些网格面片时使用了95 490个顶点数据,实际上不重复的顶点仅47 745个。如果在模型简化过程中直接简化网格,一方面冗余点数据会占用大量的内存计算空间,另一方面三角网格顶点编号的重复性严重影响模型简化的完整和真实程度。因此,合理修正网格顶点的冗余问题是模型简化的前提和关键。
经典的筛除重复编号顶点的2种方法为逐点处理法和二分法。这2种方法能够较为准确地滤除网格中的冗余点,但对于网格点集庞大、外观复杂的三维模型,其算法计算效率较低。为了提高删除重复编号顶点的效率和精确性,提出一种结合快速排序法和顶点与索引间的拓扑关系,对所有顶点分类剔除并更新可能存在索引错误的三角形面片的优化环节。其算法原理及关键部分代码如图4所示,详细算法步骤如下:
a.顶点坐标矩阵V为顶点数量Nv×3的点集矩阵,运用快速排序算法按第1行升序记为矩阵Vas,相应地建立记录排序后各顶点的原索引的列向量Ias。找出并删除矩阵Vas中重复的坐标顶点,将剩余顶点索引放置在列向量Ire内。
b.构建一个维度与顶点坐标矩阵V相等的列向量Iho,根据Ire剩余顶点索引的位置映射到Iho相应位置标记为1,再将Ire和Ias串联并更新为顶点数量Nv×2的判定矩阵Iju。
c.依据更新后的矩阵Iju映射相应位置是否等于1,选择保留或删除其顶点索引,若Iju(i,2)(i=1,2,…,Nv)=1,则相应同行Iju(i,1)的值为矩阵修正后应保留下的顶点索引值;若等于0,同行第1列的顶点数值更换为Ddel。通过既定的顶点与顶点索引间的拓扑关系,搜索三角形面片Nf×3的三角形顶点索引矩阵F中索引值被替换为Ddel的三角形,遍历测试全部顶点索引。
d.通过对三角形顶点索引矩阵F排序后两两列相减,查找一个三角形面片中存在重复点索引,即相减后出现0的位置。删除所有异常点和相应的三角形顶点索引,将修正后的网格顶点和索引更新存储到顶点坐标矩阵V和三角形顶点索引矩阵F,生成修正后的三维网格模型。
图4 修正网格顶点算法原理及关键部分代码
由于工业机器人关键零部件简化优化很大程度上会影响工业机器人在虚拟展示过程中的沉浸性和真实感[13],因此,选取关键零部件模型作为修正网格顶点算法的验证是十分有必要的。
修正网格顶点的结果如表1所示。从顶点和三角形网格面片数量来看,与未修正网格顶点的模型相比,此修正环节能够较好地滤除冗余点数据及删减可能存在索引错误的三角形网格面片。
表1 工业机器人关键部件修正前后
考虑到工业机器人三维模型的复杂程度,为了保证简化效率,提高简化精度以及在虚拟展示系统中加速图形的绘制速度,并控制展示场景的复杂度,在模型简化的过程中采用逐步简化的方式进行简化,通过预设简化率以存储不同层次结构的多分辨率细节层次模型。完成一轮简化后,重新计算模型的顶点数、顶点坐标和基本误差矩阵等相关信息,再进行下一轮简化。
在模型简化这一环节中,为了防止三维模型的外观特征发生较大的变化,需要度量并控制原模型和简化模型之间的几何误差。常用的误差度量方式为二次型误差度量[14]、角度误差度量[15]和Hausdorff距离度量[16]。为了节省计算时间成本,提高简化效率,采用二次型误差度量方式计算待折叠边的代价。
为了方便计算顶点的误差,设平面P方程为
ax+by+cz+d=0
(2)
(a,b,c)是平面的法向量,且a2+b2+c2=1,d为任意常数。则平面外任意一点V(x,y,z)到P平面的距离为
(3)
距离的平方可表示为
d(v)=|ax+by+cz+d|2=
(vTp)(pTv)=vTKpv
(4)
式(4)中,Kp为二次基本误差矩阵[17]:
(5)
定义所有包含顶点V的三角形集合,记为S(v)。如图5中顶点V的三角形面片集合为
S(v)={△VV1V2,△VV1V3,△VV1V4,…,
△VV2V3,△VV3V4,…,△VV5V6,△VV6V7}
(6)
图5 顶点V的三角形面片集合
根据第1.2小节描述可知,新顶点误差矩阵Qh为
Qh=Qi+Qj=∑P∈S(vi)∪P∈S(vj)Kp
(7)
则新顶点的折叠代价函数ΔVh可表示为
a2x2+abxy+acxz+adx+b2y2+
bcyz+bdy+c2z2+cdz+d2
(8)
对式(8)求偏导并使其偏导值为0,则能够计算出整条边上误差最小的点,并作为简化后新顶点的位置。依据所设定的简化率,迭代选择有效的可折叠的顶点对,且度量每一对的二次误差。并更新受影响的边的折叠代价和新顶点位置,若达到简化目标,则停止算法,反之则迭代上述过程。
为了使工业机器人虚拟展示系统更具沉浸性和真实感的环境,采用头盔式虚拟现实系统,用户需佩戴HTC Vive或Oculous Rift等头盔显示器设备。虚拟展示系统的原理如图6所示。
图6 沉浸式工业机器人虚拟展示系统的基本原理
PC主机的CPU为Intel®Xeon®Bronze 3104 Processor,内存为128 GB,硬盘为2 TB。VR系统硬件的核心显卡设备为NVIDIA GeForce RTX2080Ti,虚拟展示系统采用的操作系统为Windows10。软件开发语言为C#,三维物体模型的绘制软件为SolidWorks和Unity3D。
为了验证本文提出的模型加入修正网格环节的有效性,分别选用工业机器人的主要零部件末端执行器、连接件(臂部)和基座等模型,对模型优化技术的效率进行验证。
3.2.1 关键零部件的简化数据分析
根据本文的模型简化算法,可得到关键零部件的优化结果如表2~表4所示。
表2 末端执行器多分辨模型优化简化数据对比
表3 连接件(臂部)多分辨率模型优化简化数据对比
表4 基座多分辨率模型优化简化数据对比
由表2~表4可知,通过逐步简化的方式,可得到不同简化率下多种层次结构的模型数据。对比数据可以发现,优化后的各关键零部件的顶点数、三角面片数和模型的大小都有大幅的缩减,并且经过修正网格顶点的前处理环节,模型简化的运算时间损耗大大减少,提高了后期实时渲染的效率。
3.2.2 零部件多细节层次三维效果
通过简化后的三维效果图能直观看到运行逐步简化程序后,可生成不同细节层次的三维模型效果。通过观察对比,发现图7和图8的零部件均有多孔、多内槽的特点,而在圆孔、型腔、凹槽和凸台等部分,经过前期网格顶点修正环节的优化,避免了直接简化引起的耗时长、重要特征形状表面破损的情况。同时,为了使得虚拟展示系统具有更好的真实感体验,用户能根据自定的简化率获取多种不同细节层次结构的三维模型。并且,最终能够得到模型整体形状前后近乎不变的已简化网格模型。
图7 基座的不同细节层次下模型简化效果
在图7和图8中利用本文提出的方法进行简化,虽然模型的网格简化越来越稀疏,但是基座和连接件(臂部)的整体形状得到了很好的保留,而且基座的圆孔、圆柱台和连接件的凸台及弯曲臂等各个部件仍然可以保持模型的基本特征。
图8 连接件的不同细节层次下模型简化效果
本文提出了一种基于经典边折叠法的改进网格简化算法。为了解决导出模型中存在的点冗余和边冗余的问题,在模型简化前引入修正网格顶点的优化环节,采用快速排序法和顶点与索引间的拓扑关系相结合的方法,能合理剔除并更新模型。此外,由于工业机器人虚拟展示系统中三维模型在纹理映射中的复杂度和计算量影响后期渲染的实时性和真实感,因而采用多分辨简化的方式对模型进行简化。该简化算法根据给定的简化率迭代,进而生成不同细节层次结构模型。经实验验证,所提出的三维模型简化技术,对工业机器人虚拟展示系统的光照、贴图和人机交互方面提供了精确、多分辨率的模型信息。