APP下载

中标麒麟下自动创建FAST格构柱数字化模型

2020-12-04赵士伟赵正旭张庆海李明超

计算机技术与发展 2020年11期
关键词:平铺工具包型钢

赵士伟,赵正旭,张庆海,李明超

(1.石家庄铁道大学 复杂网络与可视化研究所,河北 石家庄 050043; 2.青岛理工大学,山东 青岛 266520)

0 引 言

贵州黔南布依族苗族自治州平塘县的五百米孔径球面望远镜(five-hundred-meter aperture spherical telescope),简称FAST。FAST射电望远镜的整体结构十分复杂,各个部分信息量也十分巨大,其中格构支柱的信息量具有代表性。如果使用传统的手工三维建模来完成格构支柱建模工作,不仅耗费极大的人力物力,同时也会由于人为原因导致建模精度不足,对随后的模型修改和编辑也带来极大不便,并且在与其他部件(例如圆梁)整合时也十分不便。该文基于中标麒麟操作系统和开源建模软件Blender,使用Blender内置的Python脚本进行数字化建模,不仅可以大大简化建模工作,并且能改进模型的准确性,同时也为模型的后续改进提供极大方便[1-2]。

1 绪 论

美国天文学家央斯基(Karl Guthe Jansky,1905-1950)于二十世纪三十年代发现了银河系中的无线电波信号,这为随后兴起的射电天文学打下了坚实基础。中国对宇宙的探索从未间断过,对深空探测能力的提升给予极大的重视,并主动了解、掌握世界各国先进的科学技术,积极投身于国际上的合作与竞争中。中国以天文学家南仁东为首的科学团队构想并设计出建造500 m口径球面射电天文望远镜——FAST(five-hundred-meter aperture sherical radio telescope)的方案。

1994年,FAST由中国科学院国家天文台主导来进行研究、建设,全国20多所高校的专家学者、研究所科技骨干都积极参与其中,并得到国家在各方面的支持。直到2009年,FAST[3-4]建设团队开始对这一项重大工程实施建造,经过全体工作人员的长期工作与努力,FAST于2016年竣工。根据各项数据的研究与分析,FAST在未来的深空探测中,其综合性能将是美国的Arecibo天文望远镜的10倍,并在未来的20到30年内保持国际领先地位[5-7]。

FAST工程由台址勘察与开挖、主动反射面、馈源支撑、测量与控制、接收机与终端和观测基地建设6个系统部分组成[8]。FAST这一项重大工程的建设经验对中国制造技术向信息化方向迈进提供了技术支撑,FAST的完工与实施,也将更进一步推进对宇宙的探测。通过对天区的观测,将发现更多未知的脉冲星,其独特的脉冲信号将在深空自主导航方面起到重要的作用[9],为天文学学者提供大量信息资源和可靠的研究平台。FAST将成为在地球上观测浩瀚宇宙的基本操作平台,成为探索宇宙奥秘的新窗口。

2 系统环境与建模工具

2.1 系统环境

国内大部分个体电脑用户的使用习惯都是微软公司的Windows操作系统。然而微软的Windows系统是闭源的,在保护私有信息方面具有某些缺点。为了能够实现信息安全的独立可控,中国开始计划并着手发展国产操作系统。国产操作系统的发展不仅能够确保国家重大科研项目的进行和相关项目的发展实施,同时也可以保证国家的信息安全和自主可控。FAST格构柱模型的建立是基于中标麒麟7.0桌面平台,其操作系统平台充分保障国家信息的安全。麒麟操作系统基于Linux内核,并独立开发适用于X86和国产CPU平台,例如龙芯、神威、众志和飞腾。它率先从系统方面实现对X86和家用CPU的支持与扩展,从而使其能够提供最佳性能。其性能完全满足项目支持应用程序开发[10]。

2.2 Blender开源三维建模软件

基于Windows的建模软件有很多,例如3D Max、Maya、Rhino等,并且是闭源软件。但是建模软件Blender是在麒麟操作系统上设置建模环境的绝佳之选。Blender软件具有开源性,从而得到众多个人用户的拥护,其强大的综合性能同时也得到了企业与公司支持[10]。同时,Blender支持各种系统平台。不管是在Windows,Mac系统平台,还是基于Linux内核的开源系统平台,都可以兼容运行。

Blender各项功能可与3D max媲美,其拥有三维建模软件基本的三维建模功能,并且其渲染,动画,后处理,跨平台交互式制作等功能均不亚于Windows所支持的建模软件。Blender具有内部API支持,其中最流行也最成熟的是Python。通过Python脚本可实现模型创建,模型映射,渲染等一系列操作。Blender在麒麟7.0操作系统上的运行能够完全满足FAST格构柱建模的需求。

2.3 Python-API

当人们对一个系统实施仿真研究,首先会为其创建相应的数学模型,使用相应的程序与算法来编写仿真程序。程序的应用使得人与计算机能够进行交互,人们可以编写相应的程序代码来控制相应的功能以达到设定的目标。格构柱模型是使用Python脚本进行模型创建,以数学方式确定模型的位置和大小,并且相对易于管理和修改[11-12]。

Blender软件内部API是专门为Python准备的,人们可使用Python编程语言来进行各项模型创建操作。除此之外, Python编程语言拥有很完善的扩展软件包,在使用时可以进行下载安装,完成扩展。该文主要用到bpy、math、xlrd、xlwt等工具包。Python在不同的研究方向拥有其针对性软件包,很容易上手使用,也能很兼容地在Blender中运行[13]。

3 结构分析与数据提取

3.1 结构分析

三维模型由多个点(一维)构成一条线(二维)、再由多条线组成面(三维)。FAST模型可以进行手工创建:使用基本的元素集合(例如立方体、经纬球、圆柱体等),通过对相应元素进行移动,旋转,拉伸操作,同时进行相应的布尔运算,从而完成复杂场景的构建。但是Blender内部支持Python脚本建模,秉承“模型与数据相结合”的目的,详细分析FAST格构柱模型,进而根据图纸信息提取格构柱相应数据信息进行脚本3D建模,从而加快三维建模进度,还能够使得模型和数据有效地结合在一起。

3.2 格构柱结构

FAST工程共50组格构柱,每组格构柱为四肢柱(肢柱1、肢柱2、肢柱3与肢柱4)。展开图和平铺图分别如图1和图2所示[14]。

图1 格构柱展开方式

图2 格构柱平铺图示例

3.3 FAST格构柱数据存储

FAST每组格构柱信息由PDF格式存储并呈现,由于格构柱组数众多,所以导致数据信息繁多,需要借助xls文件进行存储数据。FAST拥有五十组格构柱,且每组格构柱索结构排列拥有大致的三维格式,只需要根据格构柱组件数据(格构柱部件粗细、旋转角度)的不同进行排布即可,但是排布的时候要注意其格式。

按照表1所示,格构柱水平每层用H2表示长度,H3表示高度,每层存储之后就有这一组格构柱的总高度;水平长度需要各个存储,每个H2的长度都不尽相同,需要对其进行输入;倾斜H3的长度可以由竖直和水平的长度进行勾股顶底的计算,所以不需要尽心存储。另外还需要存储的是H3的倾斜方向,即倾斜的角度,只需存储每一层第一个倾斜组件的倾斜方向即可。

horizontal表示水平H2的长度,每个H2的长度不尽相同,所以需要手工输入。vertical表示竖直H3的长度,每个H3的长度也是不尽相同的,所以也需要手工输入。direction表示第一层倾斜组件的倾斜方向。“l”表示向左倾斜,即“↙”样式,“l”表示向左倾斜,即“↗”样式。

表1 格构柱平铺图存储格式

4 标准库安装与数据读取

Blender建模软件拥有已经编译好的Python环境,但是在Blender所带的Python控制台还不能完全满足需求,需要对其环境进行相应的扩展。

4.1 xlrd标准库的安装

格构柱的结构信息需要将数据放入.xls文件中,然而Blender所内置的Python控制台不具有相应的工具包来读取.xls文件,也没有管理工具pip3。因此需要自己构建和移植它。该文使用的Blender版本是2.79b,Blender拥有内置的Python控制台,可打开控制台来查看当前Blender所使用Python的详细版本。Python版本(3.5.3)如图3所示。

图3 Python3查询版本与导入xlrd

打开Python控制台,输入“import xlrd”,回车,系统会提示“No module named ‘xlrd’”,表示Blender中没有xlrd工具包,需要迁移并安装该库。该文使用的工具包为xlrd工具包,是用于读取.xls文件的Python标准库,Blender下的Python标准库的安装与pip3的安装不同,需要将已安装的xlrd库移植到Blender的Python下。

在查看了Blender中的Python版本号之后,需要查看当前操作系统的Python版本。在终端界面输入命令行“Python3 -version”,如果只输入Python将查看的是Python2的版本号。一般来说,Python3高版本向下兼容低版本,尽量使得当前操作系统的Python3版本小于或等于Blender中的Python3版本号。在命令行下,“pip3 install xlrd”命令安装xlrd工具包。xlrd的默认安装位置是路径“/lib/python3.4/site-package”。找到xlrd文件夹,Blender下Python文件夹中有对应的site-package文件夹,直接拷贝。拷贝完成之后将Blender进行重启,在Blender中的Python控制台中输入import xlrd,如果没有返回错误信息,即没有返回消息,则表示验证成功。

完成上述步骤后,然后分析所得模型信息,将数据存储到xls文件,调整为所需要的格式以供将来修改和读取。

4.2 读取格构柱表格信息

xlrd是一个用于Excel表的Python工具包。该文使用的格构柱信息以表格形式进行存储,Blender并不能直接操作.xls文件,因此需要添加Python工具包来进行读取。

my_first_url=“../data/R131.xls”

# 读取相对路径下相应文件

my_first_xls=xlrd.open_workbook(my_first_url)

#重新声明表格对象名称

my_sheet1=my_first_xls.sheet_by_name(“my_Sheet1”)

#获取表格对象的前三列,数据类型为list类型

my_Acol1=sheet1.col_values(1)

my_Acol2=sheet1.col_values(2)

my_Acol3=sheet1.col_values(3)

因为每列中的数据数量会不同,并且xlrd工具包会根据整个表数据中的最长列来读取工作表的整列,如果其他列的元素个数未达到所有列最大列的元素个数,则多余位置会以空值填充,因此需要数据执行滤空操作。

my_Acol1=[i for i in c Acol1 if i != '']

# 对属于list 类型的my_Acol1进行滤空操作。

5 格构柱平铺模型

5.1 工型钢模型

在每组格构柱中,主要组件有柱体结构、球体结构和工型钢结构,对于柱体和球体结构都可以使用Blender中自身创建的模型,但是工型钢结构需要手工创建一个模型对象,保存成.3ds格式。对以后工型钢的大小、长短可以使用Python-API进行改变。H2和H3分别属于两种不同类型的工型钢,需要准备两种不同的模型对象。图4为工型钢示例图。

图4 工型钢示例图

5.2 格构柱平铺模型

平铺模型的构建是最终模型的基础,循序渐进地创建格构柱的最终模型。

首先建立前两行特殊工型钢模型。在创建一个组件时,需要知道的是这个物体的位置以及旋转角度,知道这两个变量后,即可进行组建的创建。工型钢不能直接由Blender进行创建,所以只能导入之前创建好的模型对象进行导入,Blender中导入3ds对象使用命令。

bpy.ops.import_scene.autodesk_3ds(filepath=url)

url为3ds对象的存放位置。

创建对象后使用Blender的命令进行物体的缩放和角度的旋转。

bpy.ops.transform.resize(value=(X,Y,Z))

对选中物体进行缩放,XYZ分别为缩放的方向。

for obj in bpy.context.scene.objects:

if obj.select==True:

obj.name=objName

对选中的物体进行重命名尤为重要,后续更改该物体的位置需要用到该物体的名字。

bpy.data.objects[objName].location[0]=x

bpy.data.objects[objName].location[1]=y

分别确定物体的X坐标和Y坐标,由于这属于格构柱的平铺图,所以Z坐标统一为0。

前两行工型钢与钢管结构如图5所示。

图5 前两行工型钢与钢管结构

由于数据表格存储的是H2、H3的长度,想要确定其位置需要对数据进行加工。

tmpLen=0

for i in range(0,count_horizontal):

tmpLen=tmpLen+horizontal[i]

tmpY=tmpLen-horizontal[i]/2

positionY.append(tmpY)

tmpLen=0

for i in range(0,count_vertical):

tmpLen=tmpLen+vertical[i]

tmpX=tmpLen

positionX.append(tmpX)

使用positionX、positionY对水平位置和竖直位置进行存储,来确定最终位置,格构柱中的横向和竖向组件类似于网格结构。平铺图建成后如图6所示。

图6 水平竖直平铺图建立图

5.3 格构柱立体结构

建立好格构柱水平和竖直结构后,可以接下来建立倾斜的结构。

倾斜组件根据H2、H3长度可由勾股定理进行确定,而H2、H3长度已经存储到xls表格中,所以倾斜组件的长度可以确定。接下来就是确定倾斜组件H3的位置和旋转角度。位置可以由水平H2水平组件和竖直H3组件进行确定,旋转角度可以由三角函数进行确定,只需计算atan(H2长度/H3长度)即可,进而完成倾斜组件的创建。同时可以添加上ZJD6型号的经纬球,即可完成格构柱平铺模型的创建[15](见图7)。

图7 平铺图模型建立图

格构柱平铺模型创建完毕之后,对完成的模型进行适当的旋转即可得到格构柱的立体模型(见图8)。

图8 旋转后模型建立图

5.4 建立格构柱整体模型

FAST一共拥有五十根格构柱,其排列规则按照一定的规律,排列在圈梁上,在圈梁底部围绕一圈,形成支撑结构,如图9所示

图9 格构柱分布图

根据命名规则,格构柱的每个名字:

GGZName="GGZ-"+str(i+1)+"*"

其中“GGZ”所代表的是格构柱中组件的名字,“*”是通配符,可以统一进行匹配,例如有第一个格构柱的一个工型钢的名字为GGZ-1-IBeam0-2,str(i)所代表的是第几个格构柱,示例中的1所代表的是第一个格构柱IBeam所代表的就是工型钢。GGZName所代表的就是第几个格构柱。在Blender中,所有的操作都可以由Python-API来完成,其中若想规整地放置若干个物体,则需要将物体进行选中来移动。由于格构柱的名字的前几位可以选中格构柱,则可以使用按名称进行格构柱的选择。具体完成代码如下:

GGZName="GGZ-"+str(i+1)+"*"

bpy.ops.object.select_pattern(pattern=GGZName)

其中bpy.ops.object.select_pattern是内置的Python-API函数,所代表的意义就是按名称选择物体,当选择完全部物体时,所有物体是按照所有物体的中心点来移动,所以需要改变全部物体的中心点的位置。这里设中心点的位子为positionName,由分析可知,格构柱的中线点位置可设置中心点处。

此时需要借助游标来改变所有物体的中心位置:

positionName="GGZ-"+str(i+1)+"-MiddleH-0"

bpy.data.screens["Default"].scene.cursor_location=bpy.data.objects[positionName].location

bpy.ops.object.origin_set(type='ORIGIN_CURSOR')

首先选中物体名称,然后根据物体的名称找到物体的位置并将游标位置改为该物体的位置,接着改变所有物体的中心位置,最终根据整个格构柱的中心位置完成整个格构柱的移动。经过上述方法可以完成所有格构柱的初始化工作。

6 结束语

关于微软拒绝发布和审查其自身专利保护的源代码,要知道微软是否在不审查源代码的情况下能够进行“暗箱”操作有很大的难度。2007年美国“棱镜”事件后,中国迫切需要发展国产化操作系统,以保障国家信息安全。该文使用国产操作系统,在该系统平台上搭建建模环境,可以有效地保证信息安全自主可控[16]。

FAST射电望远镜格构柱如果使用手工建模方式完全不能满足其工作量和模型精度的需求,在Blender建模环境下使用Python-API进行构建,不仅可以极大地提高工作进度,同时增加模型精准度,实现数据到模型的转化,也为之后格构柱模型的修正与改进做了良好的铺垫,最后也有利于格构柱整体与其他相应模型的整合。

综上,在中标麒麟操作系统上进行数字化建模环境搭建并进行FAST格构柱数字化构建,既能够有效保证国家信息安全自主可控,又能够提高建模效率与精准度。

猜你喜欢

平铺工具包型钢
型钢混凝土组合结构施工技术难点分析
火灾爆炸作用下型钢柱的动力响应与破坏模式分析
型钢再生混凝土梁抗弯性能试验分析
亲自动手做顶皇冠就算落单也不孤单
谷歌云与Digital Asset合作推出区块链工具包
清扫机器人对光伏发电量的提升分析
清扫机器人对光伏发电量的提升分析
可折叠3D魔方
运用MATLAB软件求解高中数学中的线性和非线性规划问题
职业安全卫生防护“工具包”应用