張濤,郭陽,張慶海,趙正旭
(1.石家莊鐵道大學(xué)復(fù)雜網(wǎng)絡(luò)與可視化研究所,石家莊050043;2.青島理工大學(xué)機(jī)械與汽車工程學(xué)院,青島266520)
500 米口徑球面射電望遠(yuǎn)鏡(Five-Hundred-Meter Aperture Spherical Radio Telescope),簡稱FAST[1],位于我國貴州省平塘縣,2016 年建成,接力美國阿雷西博望遠(yuǎn)鏡成為世界上最大的射電望遠(yuǎn)鏡。阿雷西博望遠(yuǎn)鏡由于管理者更替以及資金缺乏等問題,年久失修,面臨被關(guān)閉的風(fēng)險。而FAST 工程結(jié)構(gòu)復(fù)雜,覆蓋面積大,且運(yùn)行維護(hù)難度高,工作量大。如何維護(hù)FAST 設(shè)施,避免遭遇阿雷西博同樣的困境,成為亟待解決的問題。
近年來,美國“工業(yè)互聯(lián)網(wǎng)”、德國“工業(yè)4.0”和“中國制造2025”等戰(zhàn)略的興起,使數(shù)字孿生技術(shù)成為研究熱點(diǎn)[2]。數(shù)字孿生技術(shù)是指在計算機(jī)環(huán)境中,建立物理實(shí)體的數(shù)字模型,并且通過數(shù)據(jù)驅(qū)動模擬物理實(shí)體在真實(shí)環(huán)境中的行為。數(shù)字孿生模型多沿用Grieves 教授定義的三維模型[3]。建立FAST 的數(shù)字孿生模型,運(yùn)用真實(shí)數(shù)據(jù)驅(qū)動,模擬仿真實(shí)驗(yàn),可方便FAST 的信息保護(hù)和健康狀態(tài)檢測等,為其維護(hù)發(fā)展提供有效手段。
FAST 屬于“十一五”國家重大科技基礎(chǔ)設(shè)施建設(shè)項目,反射面單元是其重要組成部分,為確保信息安全及自主可控,選擇在中標(biāo)麒麟國產(chǎn)操作系統(tǒng)[4]下進(jìn)行建模。Blender 作為開源跨平臺的三維動畫制作軟件,占用空間小,操作簡潔,并且提供非常強(qiáng)大的Python API支持[5],可以快速高效創(chuàng)建復(fù)雜的三維模型,成為FAST反射面單元建模的很好平臺。
FAST 主動反射面是一個口徑500 米,半徑300 米的球面,如圖1 所示,分為相同的五個區(qū)域,由4450 塊反射面單元構(gòu)成[6]。反射面單分為基本類型和特殊類型,主要由面板和背架構(gòu)成?;绢愋偷姆瓷涿鎲卧獮槿切谓Y(jié)構(gòu),共計341 種,4273 塊。特殊類型的反射面單元有27 塊三角形結(jié)構(gòu)及150 塊四邊形結(jié)構(gòu),由索網(wǎng)中心處反射面單元、測量機(jī)墩處反射面單元與索網(wǎng)邊緣處反射面單元構(gòu)成,共計54 種,177 塊[7]。
在基本類型反射面單元中,面板單元與背架單元的徑向關(guān)系如圖2 所示。面板單元位于曲率半徑為315m 的球面上,背架上弦節(jié)點(diǎn)到面板上表面的距離為h=150mm。背架厚度為H=1000mm,背架單元的上弦節(jié)點(diǎn)位于半徑為(315+h)m 的球面上,下弦節(jié)點(diǎn)位于半徑為(315+h+H)m 的球面上。面板單元的三個角點(diǎn)位于半徑為300m 的球面上,索網(wǎng)節(jié)點(diǎn)位于與面板單元的三個角點(diǎn)徑向距離相差400 mm 的同心球上,即半徑為300.4m 的球面上。
圖1 FAST主動反射面示意圖
圖2 反射面單元徑向關(guān)系示意圖
面板單元為三角形結(jié)構(gòu),邊長約為11m,相鄰兩塊面板的間隙為65mm[8]。按面板單元邊長相等進(jìn)行分類,面板單元共有186 種,加上對稱部分共341 種,其他區(qū)域相同,按面板邊長相差10mm 的歸并為同類,則可分為51 種,加上對稱部分共101 種,共4273 塊,背架分類與面板分類相同。
背架單元采用三角錐形式的雙層鋁合金螺栓球節(jié)點(diǎn)網(wǎng)架結(jié)構(gòu),由上弦桿、下弦桿、腹桿及螺栓球等組成。以其中一塊背架結(jié)構(gòu)為例進(jìn)行說明,如圖3 所示,背架的三角形邊長約11m 左右[9],背架厚度為H=1000mm,上下弦的螺栓球節(jié)點(diǎn)位于同心球面上,該球心即為面板球心。
特殊類型反射面單元由索網(wǎng)中心處反射面單元、測量機(jī)墩處反射面單元及索網(wǎng)邊緣處反射面單元三部分組成,如圖1 所示。每種類型的反射面單元均不同,需特殊設(shè)計。
圖3 反射面單元背架示意圖
索網(wǎng)中心處反射面單元位于反射面中心底部正五邊形上,為等腰三角形結(jié)構(gòu),邊長約11m,共1 種類型,5 塊面板及相應(yīng)背架,每塊由小塊單元拼接而成。索網(wǎng)中心處反射面單元底部有安裝升降旋轉(zhuǎn)座駕,當(dāng)其底下的饋源艙離港時,此處的面板能夠旋轉(zhuǎn)打開留出離港通道。當(dāng)FAST 望遠(yuǎn)鏡觀測時,此處的面板能夠合上,參與反射面整體變位[10]。
測量機(jī)墩處反射面單元共有23 塊,其中位于索網(wǎng)邊緣處的1 塊面板為四邊形結(jié)構(gòu),其他22 塊面板均為三角形結(jié)構(gòu)。由于此處的面板有測量機(jī)墩從中間穿過,所以面板中心需要設(shè)置洞口,相應(yīng)的背架也需要預(yù)留開孔。開孔的位置及大小需根據(jù)各處穿過的測量機(jī)墩的情況而定。
索網(wǎng)邊緣處反射面單元共30 種,149 塊,均為四邊形結(jié)構(gòu),位于索網(wǎng)邊緣處,與圈梁相接,此處的背架相應(yīng)的也為四邊形結(jié)構(gòu)。
由于FAST 反射面單元分為五個相同的部分,只需要建出其中的1/5 部分,旋轉(zhuǎn)復(fù)制即可得到整個模型,以A 區(qū)部分為例建模。基本類型面板單元為1.2mm厚的三角形面板,在Blender 內(nèi)建模需要知道三角形每個角點(diǎn)的具體坐標(biāo),點(diǎn)連成線、線連成面、面連成體即可建出面板模型。根據(jù)提供的資料,已知以(0,0,0)為球心,位于半徑為300.4m 球面上2225 個的索網(wǎng)節(jié)點(diǎn)坐標(biāo),由于面板單元三角點(diǎn)位于半徑為300m 且與索網(wǎng)坐標(biāo)節(jié)點(diǎn)同心的球面上,根據(jù)球面方程(1)和球的參數(shù)方程(2),可方便求出2225 個面板單元三角點(diǎn)(x,y,z)的坐標(biāo)。
將整理好的數(shù)據(jù)存放在Excel 表中,利用Python語言中的xlrd 工具包讀取數(shù)據(jù),需要先在cmd 命令提示符中輸入pip3 install xlrd,安裝此工具包,再在Blender 的文本編輯器中import xlrd,即可使用。讀取面板單元三角點(diǎn)坐標(biāo)的代碼如下:
面板的點(diǎn)、線、面的三維坐標(biāo)分別儲存在verts、edges 和faces 三個列表當(dāng)中。其中verts 列表存儲的是點(diǎn)的三維坐標(biāo),edges 列表在這里可為空,faces 列表存儲的是創(chuàng)建面的點(diǎn)連接順序。例如faces[0]=[0,1,2],描述的是由verts[0]、verts[1]和verts[2]三個點(diǎn)連接組成的面。
每塊三角形面板是由點(diǎn)、線、面組成的網(wǎng)格物體,Blender 內(nèi)用Python 代碼創(chuàng)建網(wǎng)格物體,需要導(dǎo)入bpy模塊。創(chuàng)建網(wǎng)格物體的函數(shù)如下:
Excel 表格中存儲的面板單元三角點(diǎn)的排列關(guān)系如圖4 所示。每創(chuàng)建一塊三角形面板,需要知道這三個點(diǎn)的坐標(biāo)及連接順序。面板單元的三角點(diǎn)坐標(biāo)按順序存儲在verts 列表中,每一塊面板的連接順序可按如下方式存儲到faces 列表中。可將面板單元分成若干行,每行由上下兩層三角形面板組成,第一行除外。如圖所示第2 行中,按逆時針順序,從左邊開始,上層面板為(4,2,5)和(5,3,6),下層面板為(2,3,5)。第三行中,上層面板為(7,4,8)、(8,5,9)和(9,6,10),下層面板為(4,5,8)和(5,6,9)。以此類推,已知面板可分為28 行,從第2 行開始,設(shè)行數(shù)為i,面板角點(diǎn)數(shù)為j,由數(shù)量關(guān)系推導(dǎo)可得,每行上層面板中的角點(diǎn)范圍為(((i-1)*i)/2+1,((i+1)*i)/2)),角點(diǎn)坐標(biāo)為(j+i,j,j+i+1)。下層面板中的角點(diǎn)范圍為(((i-1)*i)/2+1),((i+1)*i)/2),角點(diǎn)坐標(biāo)為(j,j+1,j+i+1)。創(chuàng)建三角面板的代碼如下:
圖4 反射面單元面板三角點(diǎn)關(guān)系示意圖
在Blender 中運(yùn)行Python 代碼創(chuàng)建A 區(qū)基本類型反射面單元面板模型四視圖如圖5 所示。
圖5 基本類型反射面單元面板模型1/5示意圖
索網(wǎng)中心處反射面單元面板形狀為一塊普通的三角形面板單元,根據(jù)A-B 區(qū)的三角點(diǎn)數(shù)據(jù),可知其三角點(diǎn)的坐標(biāo)及連接順序,即可調(diào)用createFaces(verts,edges,faces)函數(shù)建模。同理,A-B 區(qū)連接部分的面板模型、基本類型與索網(wǎng)邊緣處的面板模型,可通過分析出連接部分面板的連接順序,調(diào)用函數(shù)建模。
索網(wǎng)邊緣處反射面單元為四邊形形狀,由四個點(diǎn)按順序連接而成面。同樣將其每個點(diǎn)的坐標(biāo)存儲在verts 列表中,將每個面中四個點(diǎn)的連接順序存儲在faces2=[[0,0,0,0]]的列表中,調(diào)用createFaces(verts,edges,faces2)函數(shù),即可完成建模。以A 區(qū)索網(wǎng)邊緣處反射面單元為例,該部分四邊形面板共30 塊,創(chuàng)建的模型如圖6 所示。
圖6 索網(wǎng)邊緣處反射面單元面板模型示意圖
測量機(jī)墩處反射面單元共23 塊,以其中一塊為例,將經(jīng)過處理后的CAD 圖紙導(dǎo)入到Blender 中,令線條合并擠出1.2 mm 的厚度成三角形面板,如圖7 所示。23 塊面板創(chuàng)建成功后,導(dǎo)入到基本類型面板相應(yīng)位置替換即可。
圖7 測量機(jī)墩處反射面單元面板模型示意圖
將基本類型反射面單元面板與特殊類型反射面單元面板模型整合到同一Blender 場景中,由于相鄰兩塊面板單元間隙為65mm,經(jīng)比例關(guān)系計算,以各面片自己的原心為軸點(diǎn)縮放得出間隙。再選中全部面板,以整體反射面球心(0,0,0)為原點(diǎn)進(jìn)行5 次旋轉(zhuǎn)復(fù)制,得到整個FAST 反射面單元面板模型如圖8 所示。
圖8 FAST反射面單元面板模型示意圖
背架分類與面板分類相同,整個背架五分之一旋轉(zhuǎn)對稱,只需要建出其中1/5 即可。以A 區(qū)為例,按10mm 歸并計算,基本類型背架可分為51 種。以其中一塊背架信息為例進(jìn)行建模。
如圖3 所示,背架由上弦桿、腹桿和下弦桿組成網(wǎng)架結(jié)構(gòu)。每根桿的位置不同,對應(yīng)的編號也不同。以上弦桿為例,其桿件編號如圖9 所示。不同編號的桿件規(guī)格、長度均不相同,需按照其排列順序進(jìn)行對號信息讀取。
圖9 背架上弦桿件編號示意圖
其中三根上弦桿及三根腹桿可組成如圖10 所示的四面體,可將背架分成若干四面體對其進(jìn)行建模。
圖10 背架四面體網(wǎng)格模型示意圖
在圖10 中,建模思路為根據(jù)已知的六條桿的長度,求出四個頂點(diǎn)的坐標(biāo),從而求出六條桿的位置坐標(biāo)及旋轉(zhuǎn)角度,在Blender 中利用Python 腳本進(jìn)行建模。
首先對六條桿的規(guī)格及長度信息進(jìn)行讀取,其中按對應(yīng)編號讀取對應(yīng)桿件的信息的函數(shù)代碼如下。
四個頂點(diǎn)的坐標(biāo)計算方法如下:以角A 為原點(diǎn)(0,0,0),三角形ABC 所在平面為XOY 平面,垂直于該平面的方向?yàn)閆 軸,建立如圖10 所示的坐標(biāo)軸。B 點(diǎn)及C 點(diǎn)的Z 坐標(biāo)均為0,X 軸及Y 軸方向的坐標(biāo)可由余弦定理和極坐標(biāo)轉(zhuǎn)直角坐標(biāo)公式計算得出。而關(guān)于P 點(diǎn)的坐標(biāo)是計算的難點(diǎn)。關(guān)于XOY 平面作P 點(diǎn)的投影得到O 點(diǎn),設(shè)O 點(diǎn)的坐標(biāo)為(x,y,0),那么P 點(diǎn)的坐標(biāo)即為(x,y,h),其中h 為以三角形ABC 為底面,該四面體的高度。O 點(diǎn)X 軸及Y 軸方向坐標(biāo)計算方法與A、B點(diǎn)相同。高度的求法需借助海倫公式(3)、海倫秦九韶體積公式(4)及四面體體積公式(5)計算得出。
式中,a,b,c 分別為三角形的三條邊。
式中,a,b,c,d,e,f 分別為四面體的六條邊,其位置關(guān)系如圖10 所示。
首先根據(jù)海倫秦九韶體積公式求出四面體的體積V,并根據(jù)海倫公式求出三角形ABC 的面積S,再帶到三棱錐體積公式里面得到四面體的高度,即P 點(diǎn)在Z軸方向的坐標(biāo)。至此,根據(jù)四面體的六條邊的長度即可算出其四個頂點(diǎn)的坐標(biāo)位置。在Blender 內(nèi)用Py?thon 腳本編寫的函數(shù)如下。
最終由四面體的六條棱的長度,求出四個頂點(diǎn)的坐標(biāo)并存儲的函數(shù)如下。
由于四個頂點(diǎn)的位置坐標(biāo)已經(jīng)確定,桿件的位置坐標(biāo)可根據(jù)中點(diǎn)公式,由其兩端的頂點(diǎn)位置計算而出。其函數(shù)代碼如下。
桿件旋轉(zhuǎn)角度在Blender 內(nèi)需要的參數(shù)值為弧度,可根據(jù)兩點(diǎn)的位置,依據(jù)三角函數(shù)方程及角度轉(zhuǎn)弧度的公式計算得出,代碼如下。
在Blende 內(nèi)對螺栓球的建模只要輸入其半徑和坐標(biāo)長度參數(shù),運(yùn)行代碼 bpy.ops.mesh.primi?tive_uv_sphere_add(size=rSphere,location=arrayA[i])即可完成球體建模。而根據(jù)兩個頂點(diǎn)求桿的長度、坐標(biāo)、角度并建模型函數(shù)代碼如下。
在Blender 內(nèi),運(yùn)行Python 代碼建立的基本類型的三角形背架如圖11 所示。
圖11 基本類型背架示意圖
特殊類型背架與特殊類型面板一致,分為索網(wǎng)中心處、索網(wǎng)邊緣處及測量機(jī)墩處的三部分背架。
索網(wǎng)中心處的背架為五塊結(jié)構(gòu)相同,位置關(guān)于球心旋轉(zhuǎn)對稱的背架。其建模方法可參照基本類型建模方法。
索網(wǎng)邊緣處的背架為30 塊四邊形背架,以其中一塊背架為例,可根據(jù)其幾何結(jié)構(gòu),根據(jù)桿件及球的物理信息進(jìn)行建模。如圖12 所示。
圖12 索網(wǎng)邊緣處背架示意圖
測量機(jī)墩處的背架由于需要測量機(jī)墩從中間穿過,故需要留出相應(yīng)大小的開口。可以先建造出基本類型的三角形背架,再根據(jù)其開孔位置進(jìn)行球體及桿件刪減得到模型,如圖13 所示。
圖13 測量機(jī)墩處背架模型示意圖
FAST 作為國家重大科技基礎(chǔ)設(shè)施,其反射面單元數(shù)字孿生模型的創(chuàng)建,圖紙資料等需要嚴(yán)格保密,故基于信息安全自主可控的中標(biāo)麒麟國產(chǎn)操作系統(tǒng)展開。在對FAST 反射面單元結(jié)構(gòu)分析的基礎(chǔ)上,利用Blender開源跨平臺三維軟件,結(jié)合強(qiáng)大的Python 腳本語言自動建模,不僅大大提高了建模效率,并且保證了建模精度,為相關(guān)復(fù)雜結(jié)構(gòu)的自動建模提供了借鑒。FAST 反射面單元的數(shù)字孿生模型可以應(yīng)用于虛擬科普展示、大型科研設(shè)施的數(shù)字信息保護(hù)與FAST 健康檢測和故障處理等,為數(shù)字孿生技術(shù)的應(yīng)用提供了新的途徑。