基于Python的管路弯管坐标转换工具设计

97
①作者简介:郑晓芳(1981—),女,硕士,高级工程师,研究方向为信息化技术应用。
通信作者:丁龙斌(1992—),男,硕士,助理工程师,研究方向为深度学习、信息安全。DOI:10.16660/jki.1674-098X.2101-5640-4076
基于Python的管路弯管坐标转换工具设计
郑晓芳  丁龙斌*
(中车青岛四方机车车辆股份有限公司  山东青岛  266111)
摘  要:当前轨道车辆弯管设计中,存在需要转换弯管空间坐标到角度坐标、需要根据实际管路数值进行数值修正的情况,而当前的工具使用不便,且没有实现自动计算修正值的功能。本文深入分析了管路弯管工作的数学原理,详细分析了弯管坐标转换的具体过程,并使用python编程语言实现了管路弯管坐标转换运算的算法和图形用户界面GUI的设计,开发了一套弯管坐标转换和自动修正数值的软件,并加入各种管路数值合理性判断条件,能够有效提升生产一线在弯管计算上的工作效率。
关键词:管路弯管  弯管空间坐标  坐标变换  弹性值修正  应用程序开发中图分类号:TG385
文献标识码:A                  文章编号:1674-098X(2021)03(b)-0097-06
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
在轨道车辆中,制动及给水装置大多使用管路送风给水,部分电路也通过管路保护电线。管路分布较为复杂,需要多种多样的管路弯管避免空间上管路铺设时的相互碰撞和对抗。
数控弯管机采用矢量弯管的原理,工作时需要输入直线进给量(Y 轴)、空间旋转角(B轴)和平面弯曲角(C 轴)[1]。当前普遍使用的三维软件设计管路,只能输出弯管空间几何坐标(X ,Y ,Z )。因此,空间坐标转换为数控弯管机可以使用的矢量坐标是弯管工作中一
项重要环节。
由于加工工艺、实际打磨和各个管道生产厂家的标准不同,实际使用的管路总是与其理论值有所偏差。此外,由于管路并不是绝对刚体,在弯管过程中也有一些弹性,不同材质的管路弹性不同,因此弯曲角度的误差不同,需要修正的弯曲角度也有所不同。
本文通过对管道弯管计算方法进行深入分析,开发弯管三维空间坐标系坐标,转换为线长和角度计量坐标的软件工具,将三维空间坐标转换为(直线段长,
98
弯曲角度,旋转角度的)矢量坐标,并提供不同精确值不同修正参考值条件下的弯管偏差值修正的计算。此外,将各种设备的误差计算汇总,方便选择设备来进一步规范弯管数值计算。该工具能够改善管道弯管实际工作过程中的坐标转换不便,理论值修正值计算不便的现状,提升管道弯管工作效率[2]
1  弯管转换原理
首先研究弯管转换原理和转换方法。矢量弯管是基于空间矢量技术的原理,将弯管加工中管件形位尺寸及空间角度的计算直接运用矢量坐标计算的方法,这一方法是将管件设置在一空间直角坐标系中,则管
件上的任一点具有相应的坐标值,任一直线段具有量值的大小且有方向,根据这一特性,可将管件弯曲加工
的参数,直接求出管件展开长度和有关工艺参数[3]。
采用矢量方法增量型数控弯管机加工弯管,其弯管运动所需要的数据主要有三方面内容:两弯管之间的直线送进距离,弯曲角度和空间旋转角度[4]。弯管运动简化描述如图1所示。
该图中,红线路表示管路,该管路由直线段和圆弧段中心线构成。相邻两中心线延长后产生交点,即直线段P1G与直线段HM延长后相交点P 2、直线段HM 与直线段NP4延长后相交点P 3,P 1和P 4是管子的两端,且点P 1、P 2在平面YOZ内,点P 3、P 4在平面XOZ内,G、H、M、N为圆弧与直线段的交点。
2  坐标转换方法
在弯管坐标转换计算中,
需要计算直线段长度l ,
图1  弯管运动简化描述
图4  添加设备对话框
图5  修改设备对话框
图6  删除设备对话框
图2  弯管坐标转换示意图
图3  弯管坐标转换工具GUI
99
弧线段长度s、管子弯曲角度α和管子旋转角度β。输入数据为空间坐标点{P 1, P 2, … P n }, n >3。设P 1,P 2 P 3为管子的3个相邻点,其中P 2为相邻两直线段延长线的交点,即弯曲部位弧线两端切线的交点,
则三个点确定一个空间平面,
向量
的夹角即为弯曲角度
α,因此利用向量夹角的计算公式,可得:
(1)
然后利用反三角函数公式即可求出α。
在得到弯曲角度α之后,由弧长和半径及弧度之间
的关系,可根据弯管半径求得弧线段长度s :
s =α·R                                                              (2)弯管坐标计算中,旋转角度为两平面的夹角,设
P 1P 2P 3和P 2P 3P 4为弯管上相邻的两个平面,交于直线P 1P 2,则两平面的夹角β与平面法向量的夹角γ相等(正向旋转时)或相反(负向旋转时)。
平面法向量平行于平面内相交的两个向量的矩,其向量表示可由公式(3)求出:
(3)
其中(X 1,X 1,X 1)(X 2,X 2,X 2)(X 3,X 3,X 3)为P 1P 2P 3的空间坐标。由于P 1P 2与P 2P 3相交且不平行,利用向量夹角公式(1)即可得到向量夹角γ。
由于空间平面旋转角度在[,]22ππ
−变化,在该区间内余弦公式只能得到角度的值,而无法得到角度的符号。判断旋转角度的正负,即判断P 4在平面P 1P 2P 3的上
方还是下方。规定弯管方向为直线段方向的右侧,
的右侧,根据右手定则,两向量的矩的方向为垂直平面P 1P 2P 3向下。当P 4在平面P 1P 2P 3
的上方时,向
与的点乘为负,当P 4在平面P 1P 2P
3的下方时,向
图7  修正值显示界面
图8  弯管坐标转换代码结构
图10  本文软件显示的实际值
图9  本文软件显示的理论值
100
量与的点乘为正,即旋转角度β的符号与三个向量混合积的结果符号相反,如公式(
4)所示:
(4)为计算简便,公式(4)右侧表示为行列式形式为:
414141212121
313131
X X Y Y Z Z X X Y Y Z Z X X Y Y Z Z −−−−−−−−−                                                                        (5)到此,即可得到旋转角度β的准确值。
得到弯曲角度α后,由图2可得到第一段直线段长度l 的计算公式(6):
(6)
其中P i 为直线段左端点,P j 为与下一段直线段延长线的交点(在最后一段直线段P j 为终点)。对于第2段到第n -1段直线段,还需要再减去前面一段弧线对应的直线段长度,如公式(7)所示:
1
*tan
*tan
2,3,4,...,12
2
i
i i i j l PP R R i n αα+=−−=−        (7)
对于最后一段直线段,是该段直线长度减去前面半个弧度对应的直线长度,即公式(8):
11*tan 2
n n n n l P P R α
−+=−                                      (8)
由于实际管路和理论上的管路模型特性参数有误差,因此需要对误差部分进行修正。设管路弯曲角度的理论值和实际值对应关系为[,]i i t r (i >1),利用弹性系数修正的方法,当计算出的弯曲角度为α时,α处于
1[,]i i t t +区间内,则修正值计算公式(9)-(12)为:
11()/()i i i i k t t r r ++=−−                                        (9)
111()/()i i i i i i b t r t r r r +++=−−                                (10)
corr k b αα=+                                                      (11)
*()corr corr l l R αα=−−                                        (12)
其中,,i i t r 为参考点的理论值和修正值,如理论弯曲度数为90度时,修正值为89度等等。,[0,180]i i t r ⊂,
corr α为弯曲角度的修正值,corr l 为直线段长度的修正
值,k 、b 为弹性系数。
图11  自动识别输入点的错误
表1  四个点的理论值
序号X Y Z 直线段长度
弯曲角度(度)
旋转角度(度)
100020010090.0090.00305010032.1376.36
104.03
4
200
100
150
204.26
3  应用程序设计
3.1 弯管坐标转换算法实现
弯管坐标转换算法可描述如下:
输入:弯曲半径R,多个空间三维坐标点{P1, P2, … P n}, n>3,弯曲角度的理论值与实际值
约束条件:相邻四点不共线,相邻两点不重合
输出:直线段长度l,弧线段长度s、管子弯曲角度α
和管道旋转角度β;修正后的直线段长度corr l和弯曲角度corr
α。
本文选用数学科学计算工具Python语言实现,版
本为3.7.5,使用科学数据包有numpy[5]。
算法共分为两个模块,理论值计算和修正值计
算。理论值计算包含数据输入方法,弯曲角度计算方
法,直线段长度计算方法和旋转角度计算方法。修正
值计算包括弹性区间选择、弹性系数计算和修正值计
算。后文将结合伪代码对转换算法进行分析。
首先是弯曲角度α的计算,如下伪代码所示。输
入P1、P2、P3,首先使用二阶范数函数norm计算P1P2和P2P3的长度,然后进行判断,如果长度有一个为0,则表示有相邻点重合,这是不被允许的,因此升起数值错误,若是没有问题,则使用dot函数计算P1P2和P2P3向量的点乘后除去线段的长度,即得到弯曲角度α的余弦值,取反余弦函数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
第二部分是旋转角度β的计算,如下伪代码所示。
输入P1、P2、P3、P4,首先使用cross计算相邻向量的矩,
也就是叉乘,得到两个平面的矩向量。然后,判断矩
向量长度是否为0,如果为零则表示共线,升起错误。
如果没有错误,则计算两个矩向量的夹角的绝对值,
即得到β的绝对值。计算出绝对值后,还需计算β的符
号。
β的符号和向量
、、
的混合积符号相
反。混合积的计算可以先计算
、的叉乘,在与
点乘,最后将得到的结果与0比较,如果大于0则β的值为负数,小于等于0则为正数[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("连续四点共线错误")
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所示,首先选择合适的弹性区间section。当一个弯曲角度α位于区间[theory[i], theory[i+1]]内时,该区间即为α的弹性区间。通过弹性系数计算公式(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设计
如图3所示,GUI主要包含三个部分,菜单栏、工作区以及结果显示区[6]。菜单栏主要有设备管理、计算结果的主要功能和精确度管理、文件读取等辅助功能。工作区左侧包括设备选择、空间坐标输入、空间坐标增删改以及弯曲半径选择,右侧表格显示已经添加
101

本文发布于:2024-09-22 05:26:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/377179.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:弯管   坐标   角度   计算   管路   转换
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议