岳喜娜, 吳學(xué)毅, 呂明珠
(西安理工大學(xué) 印刷包裝與數(shù)字媒體學(xué)院, 西安 710048)
隨著我國公路建設(shè)事業(yè)的快速發(fā)展, 橋梁行業(yè)更是實(shí)現(xiàn)了跨越式發(fā)展.在橋梁養(yǎng)護(hù)行業(yè), 傳統(tǒng)的橋梁養(yǎng)護(hù)管理模式面對繁雜的數(shù)據(jù)報(bào)告, 容易產(chǎn)生數(shù)據(jù)錯誤或遺失現(xiàn)象, 因此橋梁養(yǎng)護(hù)公司為了降低企業(yè)成本, 提高工作效率, 紛紛轉(zhuǎn)向數(shù)字化病害檢測記錄方式[1], 而實(shí)現(xiàn)橋梁的三維建模是實(shí)現(xiàn)其工作的基礎(chǔ).參數(shù)化建模是擴(kuò)展橋梁建模靈活性的主要手段[2], 而專家系統(tǒng)是是實(shí)現(xiàn)橋梁結(jié)構(gòu)建模邏輯的方法之一, 本文針對使用專家系統(tǒng)方法進(jìn)行梁式橋三維參數(shù)化建模展開研究.
目前主流的橋梁建模平臺是基于Autodesk、Bently、Dassault 公司的產(chǎn)品, 最為常見的是基于對UG、CATIA、SolidWorks、Inventor 的二次開發(fā)來完成對模型的參數(shù)化建模[3-6].本文基于OSG 圖形開發(fā)技術(shù)采用邊界表示法完成了對梁式橋基本部件的參數(shù)化建模開發(fā),并采用一種將梁式橋參數(shù)化建模與專家系統(tǒng)相結(jié)合的方法, 以提高梁式橋參數(shù)化建模的靈活性與可擴(kuò)充性.
了解梁式橋參數(shù)化建模過程, 提取其普遍性建模流程, 是進(jìn)行梁式橋參數(shù)化建模專家系統(tǒng)方法研究的前提.
1.1.1 組件參數(shù)化建模過程
常見的梁式橋組件包括: 空心板、小箱梁、連續(xù)板、重力式橋臺、輕型橋臺、蓋梁柱式墩、柱式墩等.對一類組件進(jìn)行參數(shù)化建模的過程如下:
(1)明確組件類型, 確認(rèn)組件結(jié)構(gòu)參數(shù)值以及組件的下一級部件組成關(guān)系.
(2)建立組件全局坐標(biāo)系, 設(shè)置坐標(biāo)原點(diǎn)與組件中某一部件的局部坐標(biāo)系原點(diǎn)重合.
(3)按照組件的下一級部件組成關(guān)系及拓?fù)淇臻g位置拼接各個部件, 形成完整的組件.
(4)將拼接完的組件進(jìn)行繪制并展示模型.
1.1.2 全橋參數(shù)化建模過程
梁式橋全橋建模從建模流程上, 類似于組件建模,從建模內(nèi)容上, 比組件建模較為復(fù)雜.
(1)明確全橋的結(jié)構(gòu)組成, 全部組件結(jié)構(gòu)參數(shù)值.
(2)建立全橋的全局坐標(biāo)系.其中X 軸與全橋的橋梁中心線重合, Y 軸與全橋縱橋線重合, 坐標(biāo)原點(diǎn)與左側(cè)橋臺局部坐標(biāo)系原點(diǎn)重合.
(3)按照全橋的結(jié)構(gòu)組成及組件的空間拓?fù)潢P(guān)系拼接全橋.
(4)將拼接好的全橋模型進(jìn)行繪制并展示.
提取梁式橋組件及全橋建模的一般過程(如圖1)可以發(fā)現(xiàn), 專家總結(jié)的橋梁結(jié)構(gòu)計(jì)算公式及拼接知識是完成組件及全橋建模的邏輯基礎(chǔ), 也是專家系統(tǒng)的知識庫內(nèi)容; 組件及全橋的建模過程中的組裝流程是推理機(jī)的主要內(nèi)容; 對推理出的結(jié)果進(jìn)行三維繪制可作為解釋機(jī)制, 驗(yàn)證參數(shù)化建模的正確性; 因此, 知識庫、推理機(jī)、參數(shù)化建模模塊是系統(tǒng)的重要組成模塊[7].
圖1 梁式橋快速建模專家系統(tǒng)結(jié)構(gòu)圖
知識庫: 知識庫中存儲著梁式橋部件結(jié)構(gòu)計(jì)算類知識和組件及全橋的拼接類知識, 按照知識類別及推理機(jī)的數(shù)據(jù)需要, 將知識庫分為4 類; 同時(shí)選擇合適的知識表達(dá)方式, 并設(shè)計(jì)其數(shù)據(jù)庫表結(jié)構(gòu); 知識庫是實(shí)現(xiàn)整個推理過程的數(shù)據(jù)基礎(chǔ).
數(shù)據(jù)庫: 數(shù)據(jù)庫中保存了系統(tǒng)運(yùn)行過程中產(chǎn)生的一些必要數(shù)據(jù).同時(shí)知識庫是以數(shù)據(jù)庫的形式存在, 因此數(shù)據(jù)庫中包含了知識庫.數(shù)據(jù)庫是實(shí)現(xiàn)系統(tǒng)運(yùn)行與推理過程的數(shù)據(jù)依托基礎(chǔ).
主推理程序: 提取組件建模及全橋建模拼接的過程性知識, 實(shí)現(xiàn)組件及全橋建模繪制的過程性程序.
人機(jī)交互界面: 一部分是用戶使用, 在這部分用戶能夠?qū)崿F(xiàn)橋梁組件瀏覽和全橋快速建模.另一部分是針對知識工程師的接口, 工程師在知識庫編輯界面, 可編輯、擴(kuò)充知識庫, 使得系統(tǒng)更具靈活性與可擴(kuò)展性.
參數(shù)化建模模塊: 包括3 部分內(nèi)容, (1)橋梁部件建模算法; (2)組件建模拼接算法; (3)全橋建模拼接算法.該模塊作為系統(tǒng)重要的一部分使得系統(tǒng)具有解釋性與可觀察性.
總結(jié)梁式橋參數(shù)化建模一般過程可以發(fā)現(xiàn), 知識共含有2 類: (1)橋梁組件結(jié)構(gòu)計(jì)算知識; (2)橋梁組件及全橋結(jié)構(gòu)拼接知識.
2.1.1 橋梁組件結(jié)構(gòu)計(jì)算知識
本文研究的橋梁組件共包含了7 類, 每一類組件下又包含了該組件下一級全部部件結(jié)構(gòu), 因此一個組件的結(jié)構(gòu)計(jì)算知識包含了其下一級全部部件的結(jié)構(gòu)計(jì)算知識之和.以組件空心板為例, 空心板結(jié)構(gòu)組成如圖2, 由一塊左邊板, N 塊中間板和一塊右邊板組成.因此空心板結(jié)構(gòu)計(jì)算類知識包含了這3 類部件的全部結(jié)構(gòu)計(jì)算知識之和.
圖2 空心板結(jié)構(gòu)圖
空心板按照跨徑長度又可以分為7 類, 以表1 中展示的空心板部分知識為例, 舉出跨徑長度為6 m、8 m、10 m 的3 類空心板的結(jié)構(gòu)計(jì)算知識.
表1 橋梁組件-空心板結(jié)構(gòu)計(jì)算公式
2.1.2 橋梁組件及全橋結(jié)構(gòu)拼接知識
對于每一類橋梁組件, 其結(jié)構(gòu)組成都是固定的知識, 比如已知組件為空心板, 則知道空心板是由左邊板、若干塊中間板和右邊板拼接而成; 這一類知識屬于結(jié)構(gòu)拼接類知識.而全橋的拼接知識與此類似.
梁式橋參數(shù)化建模需要兩類知識, 結(jié)合推理機(jī)進(jìn)行推理時(shí)所需要的知識類型, 設(shè)計(jì)了4 類知識庫, 每類知識庫是按照知識特點(diǎn)進(jìn)行劃分, 具有不同的作用.
2.2.1 組件結(jié)構(gòu)參數(shù)庫
組件結(jié)構(gòu)參數(shù)庫存放繪制一個組件所需要的結(jié)構(gòu)參數(shù)數(shù)值的集合.以空心板為例, 繪制一跨空心板需要知道其全部的結(jié)構(gòu)參數(shù)描述及參數(shù)的含義, 如: bNum:橋梁編號; span: 該聯(lián)跨徑組成; holenum: 孔號; length:跨徑長; bJ: 板間縫寬; kxbNum: 空心板數(shù)量; Gradient:彎斜坡度; Si: 蓋梁寬度中心距布孔線; Sj: 蓋梁寬度中心距墩柱中心線; D: 支座中心; 線距板端; H: 板梁高度;B: 右邊板右懸臂端部距道路設(shè)計(jì)線; bZ: 橫橋向支座中心距空心板中心線; hY1: 左邊板懸臂端部厚度; hY2:右邊板懸臂端部厚度; bB: 板梁寬度; bt: 中板頂寬;hG1: 左邊板懸臂根部厚度; hG2: 右邊板懸臂根部厚度;bY1: 左邊板懸臂寬度; bY2: 右邊板懸臂寬度; xT: 上倒角寬; yT: 上倒角高度; xJ: 下倒角寬; yJ: 下倒角高; hJ:底緣高度.以上的一組結(jié)構(gòu)參數(shù)能夠滿足對空心板的三維外觀描述, 其它的橋梁組件結(jié)構(gòu)參數(shù)庫, 都有一套可以用來描述自己三維結(jié)構(gòu)的特殊參數(shù).其設(shè)計(jì)方式和空心板類似.
2.2.2 組件知識庫
組件知識庫中存放了計(jì)算組件結(jié)構(gòu)參數(shù)的計(jì)算公式,為2.1.1 節(jié)所描述的知識類型, 屬于專家總結(jié)的元知識.
以空心板知識庫為例, 圖3 是其跨徑長度為10 m的知識庫內(nèi)容.
圖3 跨徑長度為10 米的空心板知識庫
2.2.3 模型拼接庫
模型拼接庫中存放了繪制該模型(組件或全橋)所需要的下一級結(jié)構(gòu)拼接關(guān)系、部件繪制函數(shù)名稱和部件個數(shù)約束等.具體存放的是2.1.2 節(jié)描述的知識類型.
2.2.4 模型繪制信息庫
模型繪制信息庫存放了繪制該模型(組件或全橋)所需要的全部信息.如一座橋梁的繪制信息庫(已選上部結(jié)構(gòu)為空心板、橋臺結(jié)構(gòu)為輕型橋臺, 墩柱類型為蓋梁柱式墩)會存儲: N 跨空心板的繪制信息,N-1 個蓋梁柱式墩的繪制信息和2 個輕型橋臺繪制信息.每一條繪制記錄中會包含當(dāng)前繪制組件的三維空間坐標(biāo)、模型繪制函數(shù)等.
2.3.1 知識表達(dá)方式
常見的知識表達(dá)方式包括一階邏輯謂詞表示法、產(chǎn)生式表示法、語義網(wǎng)絡(luò)表示法、框架表示法、過程表示法、面向?qū)ο蟊硎痉ǖ? 這些知識表達(dá)方式各有特定的適用條件, 且各有優(yōu)缺點(diǎn).本文結(jié)合2.1.1 節(jié)中知識類型的特點(diǎn), 選擇產(chǎn)生式規(guī)則結(jié)合公式表達(dá)式作為知識的表達(dá)方式.
產(chǎn)生式規(guī)則的具體表示為“IF a Then b”, 這與橋梁結(jié)構(gòu)計(jì)算知識的表示方式非常接近, 因此采用產(chǎn)生式規(guī)則能夠很好的解釋當(dāng)前知識點(diǎn).將知識采用產(chǎn)生式規(guī)則方法表達(dá)舉例如下:
if (組件類型==“空心板”&&跨徑長度==“10 米”&&參數(shù)名稱描述==“蓋梁長度”) then (蓋梁長度=“(A×G+70)/cos(E)”).
2.3.2 公式解析器的應(yīng)用
上一節(jié)知識表達(dá)式的后件是固定值或參數(shù)計(jì)算公式.計(jì)算公式是以字符串類型存在的, 字符串類型的公式失去了公式原本的意義, 因此為了解決公式的解析計(jì)算, 本文引入公式解析器來完成對字符串類型的公式的求解計(jì)算.
(1)橋梁結(jié)構(gòu)計(jì)算公式的分類
① 固定值.圖4 中, 可以看到板梁高度是由一個固定值表示.公式解析器需要完成將字符串類型的變量轉(zhuǎn)變?yōu)橐粋€整形值.
圖4 空心板元知識
② 普通公式計(jì)算.圖4 中左邊板懸臂寬度的公式為: “(B-A×G)/2”.公式解析器需完成變量替換以及基本算術(shù)表達(dá)式的計(jì)算功能.
③ 含有特殊數(shù)學(xué)符號的公式計(jì)算.如蓋梁柱式墩的部件蓋梁, 其長度的計(jì)算公式為“(A×G-70)/cos(E)”,公式解析器需要解析特殊的數(shù)學(xué)符號(cos, tan, sin, abs).
④ 帶有IF 語句的公式.圖4 中板梁寬度的計(jì)算公式為“IF((B-A×100)<150, 100, IF((B-A×125)<150, 125,(B-50)/A))))”.這是一個帶有IF 語句的具有特定邏輯判斷語句的公式, 因此公式解析器需要能夠自動解析這種類型的數(shù)學(xué)公式, 實(shí)現(xiàn)對本文所特有的橋梁公式的解析工作.
(2)公式解析器流程
圖5 是公式解析器總的計(jì)算流程, 圖6、圖7、圖8 是總流程下對應(yīng)功能的詳細(xì)計(jì)算流程.其中最為核心的是最內(nèi)側(cè)公式表達(dá)式處理, 是整個公式解析計(jì)算最重要的部分[8].
圖5 公式解析器運(yùn)算流程圖
圖6 預(yù)處理流程圖
圖7 邏輯語句處理流程圖
(3)計(jì)算結(jié)果展示
表2 列舉了9 項(xiàng)普通公式采用公式解析器及微軟計(jì)算器分別計(jì)算的結(jié)果值及誤差值, 可以看出誤差精確到千分之一, 能夠滿足本項(xiàng)目的計(jì)算精度.
表3 是4 組對含有IF 語句公式的計(jì)算結(jié)果, 邏輯結(jié)果判斷正確, 能有效計(jì)算特殊數(shù)學(xué)公式.
圖8 最內(nèi)側(cè)公式表達(dá)式流程圖
表2 普通計(jì)算公式結(jié)果統(tǒng)計(jì)
表3 含IF 語句公式計(jì)算結(jié)果統(tǒng)計(jì)
推理機(jī)調(diào)用知識庫中的知識, 按照專家思考問題的邏輯, 對提出的問題給出合理的答案.
本文研究最終驗(yàn)證手段是參數(shù)化建模結(jié)果, 因此,推理機(jī)給出的答案是參數(shù)化建模所需要的結(jié)構(gòu)參數(shù)數(shù)據(jù)和模型繪制數(shù)據(jù).推理機(jī)需求解的問題是特定模型的特定求解過程.因此推理機(jī)的推理內(nèi)容包括: 對組件建模所需信息進(jìn)行推理和對全橋建模進(jìn)行推理.
對組件推理完成拼接和建模參數(shù)的求解, 并將具體參數(shù)傳遞給參數(shù)化建模模塊實(shí)現(xiàn)模型的繪制是推理機(jī)的推理過程(如圖9).組件繪制推理過程中主要包括兩方面: (1)組件對應(yīng)的組件結(jié)構(gòu)參數(shù)庫推理; (2)組件對應(yīng)的模型繪制庫推理.全橋繪制推理過程也主要包括兩方面內(nèi)容: (1)主梁組件、橋臺組件、橋墩組件的組件結(jié)構(gòu)拼接庫推理; (2)全橋?qū)?yīng)的模型繪制庫推理.二者推理過程類似.
圖9 推理機(jī)主要推理流程
3.2.1 組件結(jié)構(gòu)參數(shù)庫推理過程
圖10 為組件對應(yīng)的結(jié)構(gòu)參數(shù)庫推理流程, 具體推理流程如下:
(1)判斷組件類型, 到該組件對應(yīng)的組件結(jié)構(gòu)參數(shù)庫中獲取繪制該組件所需要的全部結(jié)構(gòu)參數(shù)值標(biāo)簽.
(2)到該組件對應(yīng)的組件知識庫中逐條查找各值標(biāo)簽所對應(yīng)的結(jié)構(gòu)參數(shù)計(jì)算公式, 并返回查找結(jié)果.
(3)采用公式解析器對獲取到的公式表達(dá)式進(jìn)行解析計(jì)算, 并將計(jì)算結(jié)果返回.
(4)按照參數(shù)值標(biāo)簽將返回的計(jì)算結(jié)果存儲在組件結(jié)構(gòu)參數(shù)表對應(yīng)的值標(biāo)簽下, 至此完成組件結(jié)構(gòu)參數(shù)庫推理流程.
圖10 結(jié)構(gòu)參數(shù)庫推理流程圖
3.2.2 模型繪制信息庫推理過程
圖11 為模型繪制庫推理流程, 具體流程如下:
(1)根據(jù)所選組件類型, 到組件對應(yīng)的模型拼接庫中查找, 查找到該組件模型拼接庫的全部記錄信息.
(2)逐條解析模型拼接庫的記錄信息, 獲取本條記錄信息下部件名稱、部件個數(shù)、部件繪制函數(shù)等相關(guān)信息, 依據(jù)這些信息計(jì)算該部件在整個組件中的三維空間坐標(biāo).
(3)逐條將(2)中得到的全部信息存放在該組件對應(yīng)的模型繪制庫中, 此時(shí), 組件的模型繪制庫中包含了繪制該組件模型所必須的繪制信息.至此完成組件的模型繪制庫推理流程.
參數(shù)化建模模塊是將推理機(jī)推理出的數(shù)據(jù)結(jié)果通過參數(shù)化建模算法建立相對精確的三維實(shí)體模型[9], 實(shí)現(xiàn)結(jié)果驗(yàn)證.
整橋由組件拼接而成, 組件由部件拼接而成, 因此部件的建模算法最為基礎(chǔ).一般部件的建模流程如圖12 所示.
圖11 模型繪制庫推理流程圖
圖12 一般部件繪制流程圖
如連續(xù)板的繪制過程, 首先根據(jù)二維輪廓圖, 確定連續(xù)板的橫截面及相關(guān)結(jié)構(gòu)參數(shù), 再根據(jù)結(jié)構(gòu)參數(shù)確定坐標(biāo)原點(diǎn)與坐標(biāo)系, 從二維結(jié)構(gòu)參數(shù)計(jì)算三維頂點(diǎn)坐標(biāo), 最后依據(jù)頂點(diǎn)坐標(biāo)繪制三維模型[10].
4.2.1 組件建模拼接算法
組件拼接算法是在已獲得部件建模算法、組件結(jié)構(gòu)參數(shù)及組件繪制數(shù)據(jù)基礎(chǔ)上, 將組件繪制成三維模型的算法.通常拼接組件的流程, 如圖13, 具體為:
根據(jù)傳入的組件類型, 在MFC_OSG 類中匹配組件對應(yīng)的結(jié)構(gòu)參數(shù)信息和組件繪制信息, 并解析組件繪制信息完成橋梁組件的繪制.
圖13 組件建模拼接算法
4.2.2 全橋建模拼接算法
在全橋拼接過程中會將整橋的繪制信息、上部結(jié)構(gòu)、橋臺結(jié)構(gòu)和橋墩結(jié)構(gòu)的結(jié)構(gòu)參數(shù)信息全部傳遞給MFC_OSG 類, 只需要解析傳遞進(jìn)來全橋繪制信息, 匹配每一個組件對應(yīng)的繪制模型函數(shù)與繪制模型坐標(biāo)位置, 借助OSG 中位姿變換節(jié)點(diǎn), 將每個組件放置于特定位置, 即可完成全橋的模型繪制, 如圖14 所示.
知識庫的編輯模塊通過對知識庫內(nèi)容的增刪改查完成知識擴(kuò)充及修改, 為系統(tǒng)增加了擴(kuò)充性.用戶通過選擇組件類型、跨徑長度等條件調(diào)取相應(yīng)的組件知識庫完成知識的查看.用戶通過編輯知識展示區(qū)域, 選擇增加、刪除、修改等功能, 完成對當(dāng)前知識的修改, 且修改內(nèi)容直接存儲入知識庫中, 主界面見圖15.
基于上述系統(tǒng)設(shè)計(jì), 本文在VS2013 (Microsoft Visual Studio 2013)平臺上, 采用OSG 庫, 利用MFC界面庫, 使用三層架構(gòu)的系統(tǒng)架構(gòu)開發(fā)了一個梁式橋快速建模專家系統(tǒng).6.1.2 節(jié)詳述其應(yīng)用過程.
6.1.1 參數(shù)化建模結(jié)果
本文依次對7 類橋梁組件及全橋模型進(jìn)行系統(tǒng)建模, 其建模結(jié)果展示如圖16 至圖23.
6.1.2 系統(tǒng)結(jié)果展示
如圖24 為系統(tǒng)主界面, 包括3 部分, 橋梁BIM 組件建模, 全橋建模和知識庫管理.以全橋建模為例, 詳述系統(tǒng)運(yùn)行過程.在全橋建模模塊, 輸入繪制一個橋梁所需主要參數(shù)后, 點(diǎn)擊快速計(jì)算按鈕, 生成全橋模型如圖25.主要參數(shù)不變, 修改跨徑組成, 系統(tǒng)能夠生成不同全橋建模結(jié)果, 圖25 為6 跨橋梁, 圖26 為9 跨橋梁.
在全橋生成過程中, 首先系統(tǒng)從界面?zhèn)魅胫鹘Y(jié)構(gòu)參數(shù), 然后對比該實(shí)例的參數(shù)與數(shù)據(jù)庫中已有實(shí)例的參數(shù), 若已有, 則調(diào)取推理出的數(shù)據(jù)及繪制方案, 將其傳遞給參數(shù)化建模模塊, 完成模型繪制并展示在界面上.若無, 則利用推理機(jī)中的全橋推理流程, 檢索相應(yīng)知識庫, 完成數(shù)據(jù)及繪制方案推理, 將結(jié)果傳遞給參數(shù)化建模模塊, 完成模型繪制并展示在界面上.
圖14 全橋建模拼接算法
圖15 知識庫編輯主界面
圖16 空心板模型
圖17 連續(xù)板模型
圖18 小箱梁模型
BIM 組件的建模流程可參考全橋建模流程.知識庫的編輯可參照第5 節(jié).
圖19 輕型橋臺模型
圖20 蓋梁柱式墩模型
圖21 重力式橋臺模型
圖22 柱式墩模型
圖23 全橋模型
圖24 系統(tǒng)主界面
圖25 6 跨全橋建模結(jié)果
圖26 9 跨全橋建模結(jié)果
(1)參數(shù)化建模結(jié)果
對比專家給出的橋梁及組件三維圖形, 能夠正確建立模型形狀.三維建模結(jié)果準(zhǔn)確.在全橋拼接時(shí), 存在拼接縫隙, 說明系統(tǒng)計(jì)算結(jié)果有偏差, 計(jì)算精度待改進(jìn).
(2)知識庫編輯結(jié)果
可通過增刪查改方式修改知識庫中的存儲的知識內(nèi)容, 可修改推理機(jī)所依賴的知識內(nèi)容.
(3)專家系統(tǒng)結(jié)果
該專家系統(tǒng)能夠準(zhǔn)確運(yùn)行, 通過用戶在界面輸入少量必要的主要參數(shù), 就能準(zhǔn)確完成一座橋梁的粗建模, 完成自動化建模過程, 且結(jié)果準(zhǔn)確.
本文采用一種結(jié)合專家系統(tǒng)與梁式橋參數(shù)化建模的方法, 該方法通過構(gòu)建專家系統(tǒng)的各功能模塊以及各模塊之間的聯(lián)系, 能夠?qū)崿F(xiàn)根據(jù)用戶輸入的少量主要參數(shù)自動完成整橋及組件的參數(shù)化建模.通過知識庫編輯完成對知識的修改, 進(jìn)而影響參數(shù)化建模所依賴的數(shù)據(jù)計(jì)算方式, 使用戶參與到梁式橋參數(shù)化建模的過程中.該方法促進(jìn)了梁式橋參數(shù)化建模的靈活性和可擴(kuò)展性, 避免了傳統(tǒng)程序“一經(jīng)寫定, 不易修改”的弊端.