浅谈基于VPython的机构运动仿真研究及实现

时间:2022-05-10 19:35:02 心得体会 浏览次数:
摘 要:近年来有许多针对机构运动学虚拟仿真技术的研究,用来辅助教学。其中,采用VPython对机构运动学教学进行三维图形编程是一种易学易用、功能强大的选择。通过建立机构运动的数学模型和参数化绘图,实现了常用平面连杆机构的运动分析和仿真,展示了VPython用于辅助教学的设计思想与实现方法,从而降低仿真开发难度,提高了机构研究设计的效率和效果。

关键词:曲柄滑块机构;Python;VPython;虚拟仿真;三维图像编程


1 引言

在机构运动学的教学中,人们经常用虚拟的三维软件来形象直观地表达机构运动过程。用于机械动态模拟的方法和软件很多,其中VPython是建构在Python程序设计语言之上的一个模块,它在可视觉化方面有丰富的功能及方便的操作介面。应用VPython我们可以创造一个能够实现交互的虚拟世界,可编写某一机构的具有交互作用的三维动画,进而更加形象地表示机构的外形、运动过程、工作状态等 [1]。同时,由于VPython的简单易学,在机械设计课程中加入简单的VPython程序编写,可以使那些非程序设计人员体验到编程的乐趣。

基于这样的设计思想,本文介绍了用VPython虚拟仿真曲柄滑块机构的运动设计与实现。

2 基本技术介绍

2.1 Python

Python是一种面向对象的程序语言(OOP),于1990年由荷兰科学家Guido van Rossem所发明。相较于其它编程语言,Python极其简单易学。它内置了许多常用的高级数据结构(如字典、列表、集合等)和功能模块(如文本处理、网络、多媒体、数据库和GUI等),使人们可以把精力集中在要解决的问题算法上,而不用考虑低层实现细节。Python开发效率非常高,据估计,实现同样功能程序,Python的开发周期比Java开发的缩短4~6倍。初学者通过很短时间的学习即可写出复杂的程序[2,3]

2.2 VPython

VPython是一个建立在Python上的视觉化图形模块,其创立者是美国卡内基美隆学生David Sherer。VPython能使三维可视编程更容易。它提供了一组三维元件(素材),如球状体,柱状体和线型等。通过Vector操作函数可以很容易进行时空变换。进而,允许用户用鼠标直接操作屏幕上[1]对象。

目前,VPython广泛应用于高等数学、平面几何、地理和物理等教学中,并取得了较好的教学效果[2]

3机构运动分析的数学模型

3.1 机构运动建模

该曲柄滑块机构包括 3个运动构件,各构件和杆矢的方位角如图l所示。构件 l(OB)作匀角速圆周运动,构件2(BC)作复杂的平面运动,其运动方式可分解为随同构件 l的转动和绕 B点的转动。构件3(C)为往复运动[4,5]。假定C块中心点与A处于同一水平面上。

图1 曲柄滑块机构示意图

3.2 运动分析

经分析得知,只要确定了各构件在某一时刻相对于初始位置的转动角度,就可以确定各构件在这一时刻的位置及运动方向,进而模拟出整个机构的运动。

下面用矢量方程解析法来分析各构件转角之间的关系: 

如图 1所示,在机构示意图中建立直角坐标系,以O为原点,OC为x轴,在O点垂直OC向上为y轴。并标出各杆矢的方位角。其中,BO与X轴正向夹角为α;BC与X轴正向夹角为β。杆 1匀角速度转动,其转角大小随时间变化。杆 1是原动件,其它各杆都随杆 l运动 。

可视α为已知,O点坐标为(0,0),设OB与BC的长度分别为r1与r2,且是设定量,则可求在任意时刻,B点(XB,YB),C点(XcYc)的运动轨迹。

由已知可得:转角β与转角α的关系式:

r1 sinα = r2 sinβ         (1)

B点坐标为:

XB = r1 cosα               (2)

YB = r1 sinα               (3)

C点坐标为:

Xc = r1 cosα+ r2cosβ      (4)

Yc = 0                     (5)

由(1)式得出:

β= arcsin(r1 sinα/ r2)     (6)

把(6)式代入(4)得:

Xc = r1 cosα+ r2cos[arcsin(r1 sinα/ r2)]                           (7)

所以可知在任意时刻,B与C点轨迹都是r1 r2及α的关系式。

因为杆1为等角速圆周运动,设角速度为ω, ω为常量,α0为杆1初始角,故α=α0+ωt。又r1、r2已知,故B、C两点的坐标是随α也即随时间t变化的函数。

4 仿真及实现

4.1 程序设计思想

首先我们在VPython for idle开发环境中导入Visual与math模块,三维物体都处在Visual的scene类中显示与控制。(程序中出现在“#”后的为程序的注释,以增加程序的可读性与可维护性,程序运行时会忽略。下同。)先进行scene相关属性的设置。如中心坐标,屏幕大小,显示比例等。为了简化演示与编程,可以设r1、r2为某固定值,需确保r1<r2。其次,对角速度,间距时间等进行初始化,确定O、B、C三点最初的位置。其中,杆用curve()绘制粗线来模拟,各交点使用sphere()绘制球体代替,滑块用box()函数绘制长方体来模拟。最后,每间隔时间t,改变各绘制函数的pos属性,从而完成三维图形的动态显示与控制。程序流程图见图2。


图2 程序流程图

4.2 程序主体代码

from visual import *

from math import *

#设置显示屏幕大小和背景色:

scene.x, scene.y = 0,0

scene.width = 640

scene.height = 380

autoscale=0

#给r1、r2赋值,确保r1<r2

r1, r2= 0.5, 1

#初始化

dt=0.01

dtime = 0

seta0 = 0

n = 30  # 转速/分种

omiga = n*pi/30

seta = seta0+omiga*dtime

#设置曲柄滑杆的初始位置

pointa=sphere(pos=(0,0,0),radius=0.06,color=color.red)

pointb=sphere(pos=(r1cos(seta),r1sin(seta),0),radius=0.06,color=color.red)

pointc=sphere(pos=(r2cos(asin(r1sin(seta)/r2))+r1cos(seta),0,0),radius=0.06,color=color.red)

lineab=curve(pos=[(0,0,0),(r1cos(seta),r1sin(seta),0)],radius=0.04,color=color.blue)

linebc=curve(pos=[(r1cos(seta),r1sin(seta),0),(r2cos(asin(r1sin(seta)/r2))+r1cos(seta),0,0)], radius=0.04,color=color.blue)

box1=box(pos=(r2cos(asin(r1sin(seta)/r2))+r1cos(seta),0,0),length=0.3,height=0.1,width=0.02,color=color.green)

#循环,使各构件随时间调整其pos属性,动态绘制及显示

while True:

    rate(100)#每秒种最多循环的次数

    seta = seta0+omiga*dtime

    pointb.pos = (r1*cos(seta), r1*sin(seta),0)

    pointc.pos = (r2*cos(asin(r1*sin(seta)/r2))+r1*cos(seta),0,0)

    lineab.pos[0] = pointa.pos

    lineab.pos[1] = pointb.pos

    linebc.pos[0] = pointb.pos

linebc.pos[1] = pointc.pos

    box1.pos = pointc.pos

dtime+=dt  # 增加时间

4.3程序运行及效果说明

    编辑完成后,在VPython for idle开发环境中,按F5运行程序。曲柄滑块仿真程序运行达到预期效果。图3为程序运行至某一时刻截图。

图3 VPython中曲柄滑块截图

 

5 结语

VPython是一种开源免费、易学易用且又功能强大的、基于Vector操作的三维编程软件[6]。通过在教学中应用VPython技术,能够有效的降低软件开发的难度和强度,提高非编程人员教学演示及交互控制能力,为机械设计中的虚拟仿真教学奠定一定的实践基础。如果配合NumPy,ScientificPython等科学计算模块,则能在摇杆、凸轮、碰撞、约束等具备规律展示的教学主题上发挥更大作用。

 

参考文献

[1] Lensyl D. Urbano,Jennifer L.Houghton. An Interactive Computer Model for Coriolis Demonstrations[J].Journal of Geoscience Education,2006, 54(1): 54-60.

[2] 徐爱凤.VPython在数学教学上的应用[J].中华理工学刊 vol.3,n.4,1994.7

[3] Ahlex Martelli. Python技术手册(影印版)[M].O’Reilly,东南大学出版社 2006

[4] 任继文,吴志强,张会明.基于 VRML的发动机机构运动仿真技术的研究[J].组合机床与自动化加工技术.2006,16: 130-131.

[5] 杨化书.机械基础[M]. 河南郑州:黄河水利出版社,2002:137-160.

[6] D.Schere, P.Dubois,and B. Sherwood. Vpython:3D Interactive Science Graphicsfor Student[J]. Computing in Science and Engineering, 2000,2(5): 55-62.

 

苗志锋:广西南宁长岗路99号广西水利电力职业技术学院计算机与信息工程系。

电话:13877180157.

Email:miaozhaozhao200@163.com



赵春平(1978-),女,吉林长岭人,助教,研究方向为机械设计及CAD技术;苗志锋(1979-),男,河北邯郸人,助教,硕士研究生,研究方向为网络协议及分布式系统、虚拟现实技术;

推荐访问:浅谈 仿真 机构 运动 研究