自2022年12月SmartPipe上市以来,我一直在不断迭代和升级其轴线识别算法。对于客户反馈的无法自动转换的模型,我都视若珍宝,将其视为提升算法性能的绝佳机会。经过一年半的积累,SmartPipe的测试模型从最初的10个逐步迭代到近100个。SmartPipe的轴线识别算法也日益成熟和强大,从最初只能识别普通标准管,到如今能够快速准确识别带有复杂孔洞、首末裁切管、带支管管路、压瘪管、装配管、推弯管、锥形管等各种类型。
上周,客户反馈了一个无法识别的管路模型,这个管路模型非常有特点,解决的过程也很有意思、颇具挑战,本文将介绍一下这个管路的debug过程。
该管路由上图1至7段组成,其中1、2、6、7为直线段,3、4、5为圆弧段。根据3、4、5三段连续的圆弧段,可以推测出该管路模型是推弯管。在SmartPipe中进行处理时,尽管轴线识别结果正确,但YBC预览失败了,如下图所示。
YBC预览失败的原因在于计算得到的XYZ折弯点数据出错,而折弯点数据是根据识别的轴线数据计算的,因此可能是识别的轴线数据存在错误。逐一输出轴线数据,发现3、4段连接处的轴端点存在缝隙,两点坐标分别为(5699.18,3217.12,651.798)和(5699.25,3217.13,651.778),存在较大缝隙。
为什么会出现这种缝隙呢?在CATIA中打开模型,发现在在3、4两段连接处,管路模型本身竟然存在着缝隙,如下图所示。正常情况下,第3段的末端和第4段的首端都是完整的圆弧边,两个圆弧边应该完全重合。然而,该模型显然出现了精度问题,导致上述两个圆弧不完全重合,且实际测试发现,其两端边的类型不完全是圆弧,而是自由曲线类型。
这种情况导致两个轴端首末端计算出的轴线端点坐标分别为(5699.18,3217.12,651.798)和(5699.25,3217.13,651.778),理应重合的点存在较大缝隙,轴线识别数据有误差,进而导致XYZ数据出错。
模型出现上述问题的原因可能是模型转换过程中精度较差导致的拓扑错误。针对这个问题,通常采用专业的三维模型修复软件如CADDoctor、CADFix来修复,但我尝试了一下,发现用CADDoctor修复后效果并不好,修复的模型仍存在拓扑错误,且修复过程繁琐,需要大量人工交互。
因此,我升级了轴线识别算法,针对这种含有间隙的低质量模型进行自动处理。我的思路是通过算法识别出这种带有间隙的错误情况,计算出两个圆弧的统一"中心点",根据这个中心点重新计算两侧的轴线,使两侧轴线满足一阶连续。
经过修正后,正确计算出了轴线,如图所示。
但是,虽然正确计算出了轴线,YBC预览仍然不成功,经过仔细分析,发现管路模型中的第4段是一个超过180度的圆弧段,如下图所示。在CATIA中测量此圆弧段的圆心角,约为190度。
圆心角超过180度,就意味着在求折弯点的时候,求不出交点,或者说求出的交点在另一侧,针对这个问题,我请教了一下客户经理,客户经理告诉我,一般这种情况是通过在超过180度的圆弧段中点插入一个小直线来实现的,将超过180度的圆弧段从其中点处劈裂,一分为二,中间插入相切直线,从而实现将超过180度的圆弧段转化为两段圆弧段的拼接。
于是,我进一步升级了算法,增加对超过180度圆弧的自动检测。对于检测出的圆弧段,从中点处劈开,在保证Edge方向不变的情况下分为两段,同时在两个圆弧段连接处插入一段0.1mm长度的微小直线,该微小直线与两端的圆弧段光滑相连。
升级算法后,YBC预览成功,效果如下图。
将导出的xyz数据输入到正向生成管路模块,生成的正向管路如下图所示,可以看到在原来的圆弧轴端4的中间,新增了一个微小的直线,这就是本软件算法做出的微小直线。
至此,该模型debug成功,管路模型轴线算法再次得到升级。