鄭曉芳 丁龍斌
摘要: 當前軌道車輛彎管工作中,存在需要轉(zhuǎn)換彎管空間坐標到角度坐標、需要根據(jù)實際管路數(shù)值進行數(shù)值修正的情況,而當前的工具使用不便,且沒有實現(xiàn)自動計算修正值的功能。本文深入分析了管路彎管工作的數(shù)學原理,詳細分析了彎管坐標轉(zhuǎn)換的具體過程,并使用python編程語言實現(xiàn)了管路彎管坐標轉(zhuǎn)換運算的算法和圖形用戶界面GUI的設計,完成了一套彎管坐標轉(zhuǎn)換和自動修正數(shù)值的軟件,并加入各種管路數(shù)值合理性判斷條件,能夠有效提升生產(chǎn)一線在彎管計算上的工作效率。
關(guān)鍵詞:管路彎管 彎管空間坐標 坐標變換 彈性值修正 應用程序開發(fā)
Design of Pipe Bend Coordinate Transformation Tool Based on Python
ZHENG Xiaofang DING Longbin
(CRRC Qingdao Co., Ltd., Qingdao, Shandong Province, 266111 China)
Abstract: At present, in the bend work of rail vehicles, it is necessary to convert the spatial coordinates of the bend to the Angle coordinates and make numerical correction according to the actual pipeline value. However, the current tool is inconvenient to use and does not realize the function of automatically calculating the repair value. This paper deeply analyzes the mathematical principle of pipe bending machine work, describes in detail the concrete process of pipe bending coordinate transformation and using the python programming language to realize the algorithm and the design of GUI, implements a set of pipe bending coordinate transformation and automatic correction numerical software, rationality and join various numerical judgement conditions, effectively improve the production line on the pipe bending calculation efficiency.
Key Words: Pipe elbow; Elbow space coordinates; Coordinate transformation; Elastic value correction; Application development
0 引言
在軌道車輛中,制動及給水裝置大多使用管路送風給水,部分電路也通過管路保護電線。管路分布較為復雜,需要多種多樣的管路彎管避免空間上管路鋪設時的相互碰撞和對抗。
數(shù)控彎管機采用矢量彎管的原理,工作時需要輸入直線進給量(Y軸)、空間旋轉(zhuǎn)角(B軸)和平面彎曲角(C軸)[1]。在當前普遍使用的三維軟件設計管路時,只能輸出彎管空間幾何坐標(X,Y,Z)。因此對空間坐標轉(zhuǎn)換為數(shù)控彎管機可以使用的矢量坐標是彎管工作中一項重要環(huán)節(jié)。
由于加工工藝、實際打磨和各個管道生產(chǎn)廠家的標準不同,實際使用的管路總是和其理論值有所偏差。此外,由于管路并不是絕對剛體,在彎管過程中也有一些彈性,不同材質(zhì)的管路彈性不同,因此彎曲角度的誤差不同,需要修正的彎曲角度也有所不同。
本文通過對管道彎管計算方法進行深入分析,開發(fā)彎管三維空間坐標系坐標轉(zhuǎn)換為線長和角度計量的坐標的軟件工具,將三維空間坐標轉(zhuǎn)換為(直線段長,彎曲角度,旋轉(zhuǎn)角度)的矢量坐標,并提供不同精確值不同修正參考值條件下的彎管偏差值修正的計算。此外,將各種設備的誤差計算匯總,方便選擇設備來進一步規(guī)范彎管數(shù)值計算。該工具能夠改善管道彎管實際工作過程中的坐標轉(zhuǎn)換不便,理論值修正值計算不便的現(xiàn)狀,提升管道彎管工作效率[2]。
1 彎管轉(zhuǎn)換原理
首先研究彎管轉(zhuǎn)換原理和轉(zhuǎn)換方法。矢量彎管是基于空間矢量技術(shù)的原理,將彎管加工中管件形位尺寸及空間角度的計算直接運用矢量坐標計算的方法,這一方法是將管件設置在一空間直角坐標系中,則管件上的任一點具有相應的坐標值,任一直線段具有量值的大小且有方向,根據(jù)這一特性,可將管件彎曲加工的參數(shù),直接求出管件展開長度和有關(guān)工藝參數(shù)[3]。
采用矢量方法增量型數(shù)控彎管機加工彎管,其彎管運動所需要的數(shù)據(jù)主要有三方面內(nèi)容:兩彎管之間的直線送進距離,彎曲角度和空間旋轉(zhuǎn)角度[4]。彎管運動簡化描述如圖1所示。
該圖中,紅色線路表示管路,該管路由直線段和圓弧段中心線構(gòu)成。相鄰兩中心線延長后產(chǎn)生交點,即直線段P1G與直線段HM延長后相交點P2、直線段HM與直線段NP4延長后相交點P3,P1和P4是管子的兩端,且點P1、P2在平面YOZ內(nèi),點P3、P4在平面XOZ內(nèi),G、H、M、N為圓弧與直線段的交點。
2坐標轉(zhuǎn)換方法
在彎管坐標轉(zhuǎn)換計算中,需要計算直線段長度l,弧線段長度s、管子彎曲角度α和管子旋轉(zhuǎn)角度β. 輸入數(shù)據(jù)為空間坐標點{P1, P2, … Pn}, n>3. 設P1,P2P3為管子的三個相鄰點,其中P2為相鄰兩直線段延長線的交點,即彎曲部位弧線兩端切線的交點,則三個點確定一個空間平面,向量和的夾角即為彎曲角度α,因此利用向量夾角的計算公式,可得:
然后利用反三角函數(shù)公式即可求出.
在得到彎曲角度之后,由弧長和半徑及弧度之間的關(guān)系,可根據(jù)彎管半徑求得弧線段長度s:
彎管坐標計算中,旋轉(zhuǎn)角度為兩平面的夾角,設P1P2P3 和P2P3P4為彎管上相鄰的兩個平面,交于直線P1P2,則兩平面的夾角與平面法向量的夾角相等(正向旋轉(zhuǎn)時)或相反(負向旋轉(zhuǎn)時)。
平面法向量平行于平面內(nèi)相交的兩個向量的矩,其向量表示可由公式(3)求出:
其中為P1P2P3的空間坐標。由于P1P2與P2P3相交且不平行,利用向量夾角公式(1)即可得到向量夾角.
由于空間平面旋轉(zhuǎn)角度在變化,在該區(qū)間內(nèi)余弦公式只能得到角度的值,而無法得到角度的符號。判斷旋轉(zhuǎn)角度的正負,即判斷P4在平面P1P2P3的上方還是下方。規(guī)定彎管方向為直線段方向的右側(cè),則在的右側(cè),根據(jù)右手定則,兩向量的矩的方向為垂直平面P1P2P3向下. 當P4在平面P1P2P3的上方時,向量與的點乘為負,當P4在平面P1P2P3的下方時,向量與的點乘為正,即旋轉(zhuǎn)角度β的符號與三個向量混合積的結(jié)果符號相反,如公式(4)所示:
為計算簡便,公式(4)右側(cè)表示為行列式形式為:
到此,即可得到旋轉(zhuǎn)角度β的準確值。
得到彎曲角度后,由圖1可得到第一段直線段長度l的計算公式(6):
其中為直線段左端點,為與下一段直線段延長線的交點(在最后一段直線段為終點)。對于第2段到第n-1段直線段,還需要再減去前面一段弧線對應的直線段長度,如公式(7)所示:
對于最后一段直線段,是該段直線長度減去前面半個弧度對應的直線長度,即公式(8):
由于實際管路和理論上的管路模型特性參數(shù)有誤差,因此需要對誤差部分進行修正。設管路彎曲角度的理論值和實際值對應關(guān)系為(i >1),利用彈性系數(shù)修正的方法,當計算出的彎曲角度為時,處于區(qū)間內(nèi),則修正值計算公式(9)-(12)為:
其中,為參考點的理論值和修正值,如理論彎曲度數(shù)為90度時,修正值為89度等等。,為彎曲角度的修正值,為直線段長度的修正值,k、b為彈性系數(shù)。
3 應用程序設計
3.1 彎管坐標轉(zhuǎn)換算法實現(xiàn)
彎管坐標轉(zhuǎn)換算法可描述如下:<!-- 表格格式如 -->
輸入:彎曲半徑R,多個空間三維坐標點{P1, P2, … Pn}, n>3,彎曲角度的理論值與實際值
約束條件:相鄰四點不共線,相鄰兩點不重合
輸出:直線段長度l,弧線段長度s、管子彎曲角度α和管道旋轉(zhuǎn)角度β;修正后的直線段長度和彎曲角度.
本文選用數(shù)學科學計算工具Python語言實現(xiàn),版本為3.7.5,使用科學數(shù)據(jù)包有numpy[5].
算法共分為兩個模塊,理論值計算和修正值計算。理論值計算包含數(shù)據(jù)輸入方法,彎曲角度計算方法,直線段長度計算方法和旋轉(zhuǎn)角度計算方法。修正值計算包括彈性區(qū)間選擇、彈性系數(shù)計算和修正值計算。后文將結(jié)合偽代碼對轉(zhuǎn)換算法進行分析。
首先是彎曲角度α的計算,如下偽代碼所示。輸入P1、P2、P3,首先使用二階范數(shù)函數(shù)norm計算P1P2和P2P3的長度,然后進行判斷,如果長度有一個為0,則表示有相鄰點重合,這是不被允許的,因此升起數(shù)值錯誤,若是沒有問題,則使用dot函數(shù)計算P1P2和P2P3向量的點乘后除去線段的長度,即得到彎曲角度α的余弦值,取反余弦函數(shù)acos,就得到了α.
def cosalpha(p1, p2, p3):
a = norm(p1-p2)
b = norm(p3-p2)
if a == 0 or b ==0:
raise ValueError("相鄰的點不能相同")
alpha = acos(dot(p2 - p1, p3 - p2) / a / b)
return alpha
第二部分是旋轉(zhuǎn)角度β的計算,如下偽代碼所示。輸入P1、P2、P3、P4,首先使用cross計算相鄰向量的矩,也就是叉乘,得到兩個平面的矩向量。然后,判斷矩向量長度是否為0,如果為零則表示共線,升起錯誤。如果沒有錯誤,則計算兩個矩向量的夾角的絕對值,即得到β的絕對值。計算出絕對值后,還需計算β的符號。β的符號和向量、、的混合積符號相反?;旌戏e的計算可以先計算、的叉乘,在與點乘,最后將得到的結(jié)果與0比較,如果大于0則β的值為負數(shù),小于等于0則為正數(shù)[7]。
def beta(p1, p2, p3, p4):
n1 = cross(p1p2, p2p3)
n2 = cross(p2p3, p2p4)
a = norm(n1)
b = norm(n2)
if a == 0 or b ==0:
raise ValueError("連續(xù)四點共線錯誤")
beta = acos(dot(n1, n2) / a / b)
sign = 1 if dot(p1p4, cross(p1p2, p1p3))<=0 else -1
return beta * sign
第三部分是直線段長度的計算,如下偽代碼所示。如果該直線段是第一段直線,則計算P1P2段的長度后減去一半弧度對應的長度即可。如果該直線段是第2到第n-1段直線,則還需減去直線之前的一半弧度對應的長度。如果是最后一段直線段,則需要在計算P1P2段的長度后減去之前的一半弧度對應的長度[8]。
def length(p1, p2, r, alpha):
if i == 1:
length[i] = norm(p2-p1) – r*tan(alpha[i]/2)
else if 1 < i <n-1:
length[i] = norm(p2-p1)-r*tan(alpha[i]/2)
–r*tan(alpha[i-1]/2)
if i == n:
length[i] = norm(p2-p1)- –r*tan(alpha[i-1]/2)
return length
然后是修正值的計算。如表5所示,首先選擇合適的彈性區(qū)間section。當一個彎曲角度α位于區(qū)間[theory[i], theory[i+1]]內(nèi)時,該區(qū)間即為α的彈性區(qū)間。通過彈性系數(shù)計算公式(9)和(10),可得到k和b的值。corr_alpha 為alpha的修正值,等于alpha乘上k加b. 求出corr_alpha后,第一段直線段長度不做修正,之后的直線段需要減去弧長的差值。
k = (theory[i+1]-theory[i])/(reality[i+1]-reality[i])
b = (theory[i+1]*reality[i+1]-theory[i+1]*reality[i])
/(reality[i+1]-reality[i])
corr_alpha = k * alpha + b
3.2 GUI設計[6]
如圖3所示,GUI主要包含三個部分,菜單欄、工作區(qū)以及結(jié)果顯示區(qū)。菜單欄主要有設備管理、計算結(jié)果的主要功能,和精確度管理、文件讀取等輔助功能。工作區(qū)左側(cè)包括設備選擇,空間坐標輸入,空間坐標增刪改以及彎曲半徑選擇,右側(cè)表格顯示已經(jīng)添加的空間坐標,空間坐標也可通過菜單欄的文件讀取選項從excel文件中讀取。界面下方為結(jié)果顯示界面,使用兩個標簽界面分別顯示理論值的計算結(jié)果和實際值的計算結(jié)果。
設備管理的功能主要有添加設備、修改設備和刪除設備。圖4為添加設備界面,設備主要參數(shù)包括設備型號、模具規(guī)格和材質(zhì),以及該材質(zhì)對應的彎曲角度理論值與修正值。圖5為修改設備界面,可修改模具、材質(zhì)和彎曲值對應關(guān)系。圖6為刪除設備界面,可通過設備名稱刪除存在的設備條目。
圖7為修正值的顯示界面,包含兩個表格,分別顯示修正值結(jié)果和所選設備設置的理論值與實際值。默認保留整數(shù),可通過菜單欄的精確度菜單選擇保留的小數(shù)位數(shù)。
3.3 代碼結(jié)構(gòu)
彎管左邊轉(zhuǎn)換工具quality的代碼結(jié)構(gòu)如圖8所示。Dist文件夾中存放程序打包后的exe可執(zhí)行文件,bendpipe中實現(xiàn)了理論值與修正值的計算算法,plus_factory、update_factory和del_factory實現(xiàn)了設備添加、修改和刪除界面,myPlusFactory是對plus_factory的包裝,實現(xiàn)了設備添加的邏輯功能,主程序為quality_define,所有的邏輯功能實現(xiàn)在該文件中集成,quality_window是主界面的設計代碼。添加的設備信息以字典和列表的形式存儲在factories.json文件中。
如圖9所示,當輸入表1中的空間坐標點時,點擊運行后直接顯示理論值,并通過右圖中右下角的理論值;修正值的參考表計算出彈性系數(shù)k和b,然后自動計算出當前理論值下的修正值情況。
糾錯功能:當輸入相鄰兩點相同或者相鄰四點共線時,彈出警告對話框,如圖11所示。
5總結(jié)
本文基于Python語言的管道彎管坐標轉(zhuǎn)換工具設計結(jié)合了一線管路彎管工作的生產(chǎn)實際,通過對彎管空間坐標變換到彎管矢量坐標的數(shù)學理論研究,實現(xiàn)了空間坐標點到彎管機實際使用數(shù)據(jù)的自動轉(zhuǎn)換功能,并能供結(jié)合提供的彈性區(qū)間自動進行修正值的計算。利用Python編程語言和科學工具包numpy,將其用編程語言實現(xiàn),然后利用Qt編寫GUI提供給用戶使用,并添加了多種特殊情況判斷,優(yōu)化了坐標轉(zhuǎn)換的計算過程和使用者對數(shù)據(jù)的判斷流程,能夠提高彎管的生產(chǎn)效率。
今后,可在本文研究的基礎上,繼續(xù)深入,進一步開發(fā)三維彎管仿真模型的三維視覺仿真程序,并在當前基礎上增加更細粒度的邏輯判斷,以直觀地展示當前數(shù)據(jù)的生成模型,減少在判斷彎管數(shù)據(jù)上的時間和出錯的幾率,提升工作效率。
注:軟件源代碼可在https://github.com/dlb123/pipebend-caculate獲取
6參考文獻
王立新. 矢量彎管[M]. 國防工業(yè)出版社, 1984.
陳亞樓. 一體化彎管數(shù)控機床的伺服驅(qū)動器的研究與設計[D].武漢理工大學,2018.
羅志猛. 基于三角形算法的數(shù)控彎管信息轉(zhuǎn)換及仿真[D].武漢理工大學,2006.
張德乾,李豐,姜楊楊,夏元平.基于易語言的彎管坐標轉(zhuǎn)換加工程序研究[J].科技創(chuàng)新導報,2020,17(07):111-112.
丁龍斌,伍忠東,蘇佳麗.基于集成深度森林的入侵檢測方法[J].計算機工程,2020,46(03):144-150.
孫守江. 供熱管道系統(tǒng)的受力分析及優(yōu)化[D].北京建筑大學,2020.
丁龍斌. 隨機森林入侵檢測算法研究[D].蘭州交通大學,2020.
蘇佳麗,伍忠東,丁龍斌,劉菲菲.基于IGWO-RBF的LTE-R切換算法研究[J].計算機工程與應用,2020,56(08):74-80.