基于OpenGL的网格构件纤维缠绕仿真
2011-04-28田会方张梦芬
田会方,张梦芬,张 毅
(武汉理工大学机电工程学院,湖北 武汉 430070)
复合材料被广泛应用于化工、冶金、航空和航天等高科技领域。纤维缠绕工艺是生产复合材料制品的工艺方法之一,被广泛应用于空间技术与民用产品。纤维缠绕网格结构可做筛孔类制品,还可做内网格、外网格加强筋和夹芯壳体,其结构稳定,刚度较普通压力容器好,成为现今较理想的轻型受力薄壁结构组织。基于OpenGL技术对缠绕过程进行仿真,对网格构件一次成型具有指导意义。这种方法与用样品在样机上进行缠绕效果验证的方法相比效率更高,成本更低。
1 网格构件纤维缠绕的三维模型建立
1.1 纤维缠绕系统坐标系建立
仿真系统的模型有静态模型和动态模型,静态模型是指构建不随仿真时间变化的实体几何模型;动态模型是指构建随仿真时间变化而变化的实体几何模型。为减少坐标系统变换的转换次数,将主坐标系建立在某一静态模型上。主坐标系是一个绝对坐标系,是相对静止的坐标系,因此选择将其建立在主轴箱导轨或小车导轨的两个面上。主坐标系原点取世界坐标系原点,按右手法则来说明,原点位于视区中心(选取导轨面中心为主坐标系原点),X轴方向指向右方,Y轴方向指向上方,Z轴方向垂直屏幕指向用户[1-2]。
1.2 参数化三维模型建立
纤维缠绕系统由床头箱、尾座箱体、导轨、网格构件和小车等部分组成。由于纤维缠绕机的外形是比较规则的几何形体,可利用计算机图形学中的构造实体造型技术,由长方形、棱柱、圆柱、圆盘面和圆盘等基本实体,通过一定造型变换组建成更高级实体。这些基体函数可直接利用Open-GL的基本库和实用库提供的三维图形函数和基本几何图形函数绘制,从而避免使用交互式建模方式所带来的繁琐的数据转换。复杂实体绘制则利用OpenGL的基本几何图元,点、线、多边形采用多边形逼近的方式绘制。在用这种方法时,应保持多边形方向一致性,选择合适的多边形数目,以及决定物体相对光源方向的法向量的添加[3-6]。
在构建模型的过程中,将纤维缠绕分成若干部分利用显示列表、坐标平移函数glTrnslate()和坐标旋转函数glRotate(),使模型各部分相对位置准确。结合各部分的绝对运动和相对运动情况,可以在三维建模时将纤维缠绕系统分为以下3个部分:①圆周运动部分。即网格构件、床头箱主轴、三爪卡盘;②静止部分。即导轨、床头箱、尾座箱体;③往复运动部分。即小车、伸臂机构。
网格构件在建模时可以细分为圆筒和凹槽两部分。要求网格构件的长度、直径和凹槽数等基本参数可以改变,因此可采用多边形逼近的方法完成。为方便观察,圆筒直径应略小于客户要求直径。圆筒直径与凹槽尺寸关系图如图1所示,圆筒直径实际应为D,现简化为D1,凹槽宽为B,凹槽深为h。凹槽侧面可以分别用两个相同的多边形形成其上下底,再将两个多边形的对应线连接即可形成棱柱。螺旋凹槽底面可以沿螺旋方向分成多个小曲面,每个小曲面用棱柱近似表示。环向凹槽底面可以沿着旋转轴即芯模轴心线分成多个小曲面。绘制棱柱的一个表面四边形语句为:
图1 圆筒直径与凹槽尺寸关系图
glBegin(GL_QUADS);
glNormal3fv(m1);glVertex3f(V1);
glNormal3fv(m'1);glVertex3f(V1');
glNormal3fv(m'2);glVertex3f(V2');
glNormal3fv(m2);glVertex3f(V2);
glEnd();
点 V1、V2和点 V1'、V2'分属于棱台的两个底面,为四边形各顶点坐标;m1、m2、m1'、m2'为各点法向量,重复调用相似的代码就能得到棱台表[7-8]。
例如绘制圆筒语句如下:
for(int i=0;i<=359;i++)
{
int j=0;
if(i==359)j=0;else j=i+1;
glBegin(GL_QUADS);
glNormal3fv(m1);glVertex3f(-L/2,D1/2×sin(i×π/180),D1/2×cos(i×π/180));
glNormal3fv(m'1);glVertex3f(L/2,D1/2 ×sin(i×π/180),D1/2×cos(i×π/180));
glNormal3fv(m2');glVertex3f(L/2,D1/2 ×sin(j×π/180),D1/2×cos(j×π/180));
glNormal3fv(m2);glVertex3f(-L/2,D1/2×sin(j×π/180),D1/2×cos(j×π/180));
glEnd();
}
床头箱主轴、三爪卡盘、网格构件两端面、挂纱销钉、导轨、尾座箱体、小车和伸臂机构网格构件等形状规则的可以直接利用OpenGL二次几何物体绘制函数,如绘制圆柱面函数gluCylinder(),绘制圆盘面函数gluDisk(),绘制实心圆环函数glutSolidTorus()等。
使用OpenGL绘制的纤维缠绕系统三维模型如图2所示。网格构件的筒身直径、长度、螺旋凹槽、环向凹槽的个数、槽深槽宽、螺旋凹槽与筒身母线夹角均可根据需求设定。
图2 纤维缠绕系统三维模型
2 纱线轨迹算法
三角形网格构件结构特点为:筒身为圆筒状,表面有与圆柱体母线成一定角度的螺旋凹槽,另外还有一定数目的环向凹槽,环向凹槽正好位于与螺旋方向相反的螺旋凹槽交点处。与圆柱体母线夹角相反的两个螺旋凹槽和一个环向凹槽构成三角形的三条边。三角形网格构件纱线缠绕轨迹必须在凹槽内,因此可以在圆筒展开后的平面上直接构造直线,通过建立平面纱线与圆柱面纱线的转换关系,计算出缠绕轨迹,求取缠绕过程中的特征点[9-10]。
三角形网格构件筒身长度为L,筒身直径为D,螺旋凹槽与母线夹角为angle,凹槽深为h,则凹槽内绕线直径近似为D1=D-2h,其沿着直径为D1的圆柱母线的展开图如图3所示。假设纱线要在图3深色凹槽内缠绕,只需求取带子中线上任意点坐标即可知道在任意时刻纱线的轨迹。
纱线起始位置在YOZ面与Z轴的夹角angle'如图4所示。angle'的值为图3中弧长OA对应的弧度。
式中,LOA为OA段弧长(可以根据几何知识近似求出)。
坐标系如图5所示,X轴面向读者。纤维缠绕轨迹是由小车沿芯模母线方向(X轴方向)的往复运动与芯模(绕自身轴心线,此轴心线与X轴平行)圆周运动相耦合而成。在计算凹槽内纱线坐标时,将增量设为点的X坐标,将轨迹投影到YOZ平面内(如图5所示),假设沿X轴方向每次增加k,如图4所示,当k足够小时,在以D1为直径的圆内X每增加k时对应的弧长应为:
图3 芯模展开图
根据弧长公式求出每次递增弧度为:
若纱线从圆筒左端绕至圆筒右端,纱线轨迹方程为:
单程芯模转角为:
纱线再沿着与上述螺旋凹槽相平行的另一螺旋凹槽从圆筒右端绕至圆筒左端,其轨迹方程为:
式中:angle'为纱线起点位置与XOZ面夹角;n为回程轨迹凹槽与前一个轨迹凹槽间隔个数。
式(6)中的S_R与n×angle前的正负号由回程凹槽的位置决定。
鉴于三角形网格构件的特殊形状,纤维缠绕的方式总体来说有两种:将同方向螺旋凹槽缠绕完后再缠绕反向螺旋凹槽;小车一个往返中所缠绕的凹槽为方向正好相反的两个凹槽。小车每往返一次纱线轨迹形状是相同的,不同的是起点与XOZ面的夹角。计算某时刻纱线坐标时应注意选择的缠绕方式以及换槽时angle'值的改变。
纤维在环向凹槽内缠绕时选择弧长为递增量,在同一个环内纱线上点的x坐标是不变的。若弧长增量用k表示,则y=r×sin(k/r),z=r×cos(k/r)。
纤维缠绕过程中,已缠上的纱线随着芯模的转动而转动,纱线与芯模的相对位置保持不变,纤维缠绕的过程可以视为落纱点与芯模的相对运动。纱线的运动曲线可以先以纱线相对于芯模的运动来表示,将其转化为绝对坐标,再利用Open-GL绘制不封闭的曲线函数glBegingl(GL_LINE_STRIP)。落纱点与丝嘴之间的悬线,只需将任意时刻落纱点与丝嘴的坐标位置求出,然后用绘制多组线段函数glBegin(GL_LINE)将两点连接起来。纱线宽度可以用函数glLineWidth()调整。
3 网格构件纤维缠绕动态仿真的实现
开放性图形图库(open graphics library,Open-GL)从本质上说是一个3D图形和模型库,具有高度可移植性,且具有非常快的速度[11]。目前OpenGL已成为开放式的标准编程函数库。Open-GL虽然拥有众多覆盖了从设置材料颜色和反射属性到执行旋转和复杂的坐标变换等功能的函数和命令,但没有一个与窗口或屏幕管理相关的函数或命令,另外也没有用于处理键盘输入或鼠标交互的函数。因此就需要与其他编程环境和程序设计语言相结合使用。VC++中的MFC是开发Windows应用程序的C++接口,提供了面向对象的框架。将OpenGL与MFC联合进行编程,在建立友好的人机界面的同时又可以发挥OpenGL在3D图形处理上的优点。在MFC中实现Open-GL编程主要进行以下几项操作:添加OpenGL头文件和链接库,设置窗口属性,窗口初始化(如设置像素格式,创建绘制描述表等),添加消息响应函数(如WM_SIZE,WM_TIMER等)。
OpenGL采用双缓存技术实现动画,即前台缓存和后台缓存。后台缓存计算场景、生成画面,前台缓存显示后台缓存已经画好的画面。因此当完整的画面在后台缓存中画出以后,就调用Swap-Buffers()函数,使其成为前台可见的缓存。这样循环往复,隐藏了整个画图的过程,视频图像能以人眼察觉不出的时间间隔交替出现,于是看起来所有的画面都是连续的。由于纱线的轨迹是绕芯模旋转轴的空间曲线,可以在仿真程序中使用定时器使落纱点从某一初始值开始变化,然后根据速比等约束条件确定芯模的旋转起始角度、速度和纱线每一时刻所对应的空间位置。经过不断重绘就能实现纤维缠绕的过程仿真。定时器的时间设置根据小车移动速度来确定。程序运行时首先输入基本参数,经过计算后确定所需的仿真参数,然后开始仿真。程序流程图如图6所示。
图6 程序流程图
为了提高显示速度,可以利用OpenGL提供的显示列表技术。在三维建模时,将运动的小车、伸臂部分、芯模分别创建显示列表,在调用这些部分时调用函数glTranslate(),glRotate()结合定时器实现相对运动。缠绕效果图如图7所示,深色线条为已经缠绕上的纱线,浅色为凹槽。
图7 网格构件纤维缠绕效果图
4 结论
(1)在VC++6.0开发平台、MFC编程环境下,基于OpenGL技术对三角形网格构件纤维缠绕过程进行动态仿真。网格构件、小车、伸臂这3部分利用OpenGL的显示列表技术,仿真软件达到了流畅的显示速度。
(2)在此基础上,进行三角形螺旋凹槽纱线的轨迹算法和界面设计,可方便控制加工过程和进行人机交互,完善了仿真软件。
(3)初步完成的仿真软件基本实现了三角形网格构件的纤维缠绕运动仿真,由于实际的缠绕过程要考虑的因素很多,例如换槽时挂纱方式的体现,因此对仿真软件还需进一步完善。
[1] 田会方,张杰峰.纤维缠绕筒形压力容器动态仿真[J].机械工程师,2005(5):81 -82.
[2] 吕峰,吴皓莹,谢兴同.基于OpenGL的纤维缠绕的三维运动仿真[J].武汉理工大学学报,2002,24(9):76-78.
[3] GIACOLETTO H L.The art of filament winding[J].Reinforced Plastics,2002,46(10):30 -31.
[4] STEPHEN L.SPl handbook of technology and engineering of reinforced[M].[S.l.]:Plastlca ComosLtes,1973:243-260.
[5] CAMPBELL J H,KITTELSON J L.The tape winding proccess and application[J].SAMPE Symposium,1991(4):437-483.
[6] 刘东亮,王凤岐,郭伟.计算机仿真技术及其在生产系统中的应用[J].工艺与装备,2007(4):91-94.
[7] 杜志强,张毅.CAD/CAM技术在筒形压力容器缠绕成型工艺中的应用[J].制造业自动化,2001,23(8):43-46.
[8] 渠涛,肖军,李勇,等.基于OpenGL的圆筒段自动铺带仿真研究[J].玻璃钢/复合材料,2008(3):3 -6.
[9] 王增加,李辅安,刘建超.锥体结构单向纤维缠绕线型及程序设计[J].玻璃钢/复合材料,2005(2):34 -38.
[10] 娄小杰,田晶,张秀艳,等.锥壳容器缠绕线型研究[J].纤维复合材料,2004,3(1):31 -35.
[11] 徐东亮,李东海.基于OpenGL的虚拟铺放机建模及参数化驱动[J].武汉理工大学学报:信息与管理工程版,2010,32(3):403 -405.