ADAMS与Matlab联合仿真文档精品资料.doc
7.1 机械夹紧机构建模使用实例机械系统建模实例将创建一种机械夹紧机构模型,是阿波罗登月计划中用于夹紧登月舱和宇宙飞船的十二个夹紧机构之一。夹紧机构包括:摇臂(Pivot)、手柄(Handle)、锁钩(Hook)、连杆(Slider)和固定块(ground Block)等物体。夹紧机构的工作原理是:如图7-1所示,在夹紧机构手柄(Handle)处施加一个作用力,驱动机构运动,使其锁钩(Hook)处产生十倍于作用力的夹紧力,用于夹紧登月舱和宇宙飞船。夹紧机构的设计要求是:至少产生800N的夹紧力;施加在手柄上的力应不大于80N;释放手柄的力应最小;在振动环境中夹紧机构应安全可靠。手柄Handle锁钩Hook图7-1 夹紧机构三维模型图以下将从创建几何构件、添加约束、添加载荷及结果后处理等几个方面详细介绍机械夹紧机构模型的建立。通过本实例的学习,能够详细了解ADAMS软件设计流程及使用方法。7.1.1创建几何构件1、创建新模型本实例将使用ADAMS/View的零件库、约束库和力库创建夹紧机构模型。首先打开ADAMS/View,选择“Create a new model”,模型名称(Model Name):Latch,点击OK,创建新模型完毕。其它设置如图7-2所示:图7-2 创建新模型2、设置工作环境选择菜单栏【Settings】【Units】命令,设置模型物理量单位,如图7-3所示:图7-3设置模型物理量单位选择菜单栏【Settings】【Working Grid】命令,设置工作网格,如图7-4所示:图7-4设置工作网格3、创建设计点设计点是几何构件形状设计和位置定位的参考点。本实例将通过设计点列表编辑器创建几何构件模型所需要的全部设计点。选择并点击几何模型库(Geometric Modeling)中的点(Point),下拉菜单选择(Add to Ground)、(Dont Attach),并单击Point Table列表编辑器,创建并生成Point_1、Point_2等六个设计点,如图7-5、图7-6所示:图7-5设计点列表编辑器图7-6创建设计点4、创建摇臂(Pivot)选择并点击几何模型库(Geometric Modeling)中的平板(Plate),设置平板厚度值(Thickness)为1,圆角半径(Radius)为1,用鼠标左键选择设计点:Point_1、Point_2、Point_3,按鼠标右键完成摇臂(Pivot)的创建,将其重新命名(Rename)为Pivot,如图7-7所示:图7-7创建摇臂5、创建手柄(Handle)选择并点击几何模型库(Geometric Modeling)中的连杆(Link),用鼠标左键选择设计点:Point_3和Point_4,完成手柄(Handle)的创建,将其重新命名(Rename)为Handle,如图7-8所示:图7-8创建手柄6、创建锁钩(Hook)选择并点击几何模型库(Geometric Modeling)中的拉伸体(Extrusion),选择“New Part”和“Clsoed”,拉伸体长度(Lengh)设为1,用鼠标左键选择表7-1所示的11个位置,按鼠标右键完成锁钩的创建,将其重新命名(Rename)为Hook,如图7-9示:表7-1锁钩节点坐标X坐标Y坐标Z坐标153023503-6604-14605-15506-15307-14108-12109-123010-53011420图7-9创建锁钩7、创建连杆(Slider)选择并点击几何模型库(Geometric Modeling)中的连杆(Link),用鼠标左键选择设计点:Point_5和Point_6,完成连杆(Slider)的创建,将其重新命名(Rename)为Slider,如图7-10所示:图7-10创建连杆8、创建固定块(Ground Block)选择并点击几何模型库(Geometric Modeling)中的长方体(Box),选择“On Ground”,使其与大地(Ground)固结在一起,按下图创建固定体用鼠标左键选择设计点:Point_5和Point_6,完成连杆(Slider)的创建,将其重新命名(Rename)为Slider,如图7-11所示:图7-11创建固定块7.1.2添加约束1、添加旋转约束副选择并点击约束库(Joints)中的旋转副(Revolute Joints);选择“1 Location”(一个位置),“Normal To Grid”(垂直于工作网络),用鼠标左键选择Point_1, 创建摇臂和大地的约束副;选择“2 Bodies - 1 Location”(两个物体一个位置),“Normal To Grid”(垂直于工作网络),选择摇臂和锁钩两个物体,左键选择Point_2, 创建摇臂和锁钩的约束副;同理选择摇臂和手柄,位置为Point_3,手柄和连杆,位置为Point_5,创建摇臂和手柄、手柄和连杆的旋转约束副。如图7-12所示:图7-12添加旋转约束副和圆柱约束副2、添加圆柱约束副选择并点击约束库(Joints)中的圆柱副(Cylindrical Joints);选择“2 Bodies - 1 Location”(两个物体一个位置),“Normal To Grid”(垂直于工作网络),在连杆和锁钩之间创建圆柱副,位置为Point_6,如图7-11所示。3、添加点-面约束副选择并点击约束库(Joints)中的点-面副(In-Plane Primitive Joints);选择“2 Bodies - 1 Location”(两个物体一个位置),“Pick Geometry Feature”(通过几何体特征确定约束副方向),用鼠标左键首先选择锁钩,然后选择固定块,设置约束副的位置(-12,1,0),确定约束副的方向垂直向上,如图7-13所示,创建点面约束副,使锁钩上的一点可以在固定块的一个平面内移动。图7-13添加点-面约束副7.1.3添加载荷1、添加弹簧选择并点击载荷库(Create Forces)中的弹簧(Spring-Damper),设置弹簧刚度(K)为800,阻尼(C)为0.5,用鼠标左键选择位置(-14,1,0)、(-23,1,0),创建锁钩和大地之间的弹簧,如图7-14所示。图7-14添加弹簧2、添加单向力选择并点击几何模型库(Geometric Modeling)中的连体坐标系(Marker),在位置(-18,14,0)处创建“Mar_5”;选择并点击载荷库(Create Forces)中的单向力(Force),设置力的方向为“Body Moving”与物体固连,初始方向选择“Pick Geometry Feature”,力设为“Constant”,数值为80;用鼠标左键选择手柄为参考物体,然后选择Point_4为力的作用点,选择“Mar_5”确定为力的方向,如图7-15所示:图7-15添加单向力至此,夹紧机构模型已经成功创建。选择主工具栏(Main Tools)中仿真运行(Run Simulation),设置仿真终止时间(End Time)为0.2,仿真工作步长(Steps)为100,然后开始仿真,观测模型的运行情况。7.1.4结果后处理本小节将通过测量弹簧力的大小测试夹紧机构的夹紧力,通过测量三个点的角度值测试手柄的运动轨迹,并通过创建一个传感器确定夹紧机构的锁止位置。1、测量弹簧力将鼠标放置在夹紧机构模型中的弹簧上,按右键选择“Spring_1”中的测量(Measure)命令,并将测量对话框中特性(Characteristic)选项设为力(Force);系统生成弹簧力变化曲线,如图7-16所示:图7-16弹簧力测试曲线2、测量角度选择菜单栏【Build】【Measure】【Angle】【New】,在测量角度对话框中,鼠标右键单击(First Point)栏,选择“Marker”中的“Pick”,选择Point_5处的Marker作为测量角度的第一点;相同的方法选择(Middle Point)和(Last Point)为Point_3和Point_6处的Marker。如图7-17所示:图7-17测量角度对话框设置示意图系统生成三个点形成的角度变化曲线,如图7-18所示:图7-18角度测量曲线3、创建传感器选择菜单栏【Simulate】【Sensor】【New】,设置传感器对话框,如图7-19所示,表示当“Angle_Mea_4”等于或小于(Less than and equal)0,系统将终止(Stop)仿真。图7-19传感器对话框设置示意图运行仿真模型,测量的弹簧力和测量角度变化情况如图7-20、图7-21所示,当角度等于0时,系统终止了仿真。1图7-20弹簧力变化曲线图7-21测量角度变化曲线7.2 ADAMS/Controls使用实例本实例以MATLAB作为外部控制程序,以偏心连杆模型为例,讲解ADAMS与MATLAB的联合仿真过程。主要包括创建机械系统模型、模型参数设置、建立MATLAB控制模型以及结果后处理四个步骤。机械模型建立、模型参数设置这两步为了导出一个可在MATLAB软件Simulink中使用的模块,这个模块包含了所建立ADAMS模型的信息参数,并有输入输出接口。利用这个模块在MALTAB中建立控制系统,就可以控制ADAMS模型,在仿真结束后,可以直接在MATLAB中得到所需的数据结果进行后处理。偏心连杆的形心与大地以铰链相连,连杆可以绕着铰链转动。连杆右端连接有一个小球,由于小球的存在,使整个机构的质心与形心不重合,若在连杆左端没有力矩作用,连杆将做顺时针运动。本例通过测量连杆运动的角速度、角度,对左端力矩的大小进行不断控制,最终使连杆相对平衡,即其角速度为零。图7-22 偏心连杆模型以下将详细介绍联合仿真的详细步骤。通过本实例的学习,能够详细了解ADAMS软件与MATLAB联合控制的使用方法。7.2.1 创建机械系统模型 1、设置单位启动ADAMS/View,选择新模型,在模型名输入MODEL_1。选择菜单栏【Settings】【Units】命令,设置模型物理量单位,将单位设置成MMKS,长度和力的单位设置成毫米和牛顿,如图7-23所示:图7-23设置模型物理量单位2、创建连杆单击几何工具包中的连杆按钮,将连杆参数设置为Length=400,Width=20,Depth=20,然后在图形区水平拖动鼠标,创建一个连杆,如图7-24。图7-24创建连杆3、创建旋转副单击运动副工具包中的旋转副按钮,将旋转副的参数设置为1 Location和Normal to gird,单击连杆质心处的Marker点,将连杆和大地关联起来,如图7-25所示。图7-25创建旋转副4、创建球体单击几何工具包中的球体按钮,将球体的选项设置为Add to Part,半径设置为20,然后在图形区单击连杆,再单击连杆右侧处的Marker点,将球体加入到连杆上,如图7-26所示。此时连杆的质心产生了移动。图7-26创建球体5、创建单分量力矩单击载荷工具包中的单分量力矩按钮,将单分量力矩的选项设置为Space Fixed和Normal to Grid,将Characteristic设置为Constant,勾选Torque并输入0,然后在图形区单击连杆,再单击连杆左侧的Marker点,在连杆上创建一个单分量力矩,如图7-27所示。图7-27创建单分量力矩至此,偏心连杆模型已经建好。7.2.2 模型参数设置1、创建输入状态变量单击菜单【Build】【System Elements】【State Variable】【New】,弹出创建状态变量对话框。如图7-28,将Name输入框改成. MODEL_1.Torque( MODEL_1为文件名,Torque为变量名)。单击OK按钮后创建状态变量Torque作为输入变量。图7-28创建输入变量Torque3、将状态变量与模型关联在图形区双击单分量力矩的图标,打开编辑对话框,如图7-28所示,在Function输入框中输入VARVAL(.MODEL_1.Torque) ,这里VARVAL()是一个ADAMS函数,它返回变量.MODEL_1.Torque的值。通过函数把状态变量Torque与力矩关联起来,力矩取值将来自于状态变量Torque。图7-28 编辑单分量力矩对话框4、指定状态变量Torque为输入变量单击菜单【Build】【Controls Toolkit】【Plant Input】后,弹出定义控制输入对话框,如图7-29所示。将Plant Input Name 输入框改成.MODEL_1.PINPUT_Torque, 在Variable Name输入框中,用鼠标右键快捷菜单输入状态变量.MODEL_1.Torque,单击OK按钮。图7-29 定义控制输入对话框5、创建输出状态变量单击菜单【Build】【System Elements】【State Variable】【New】,弹出创建状态变量对话框。如图7-30所示,将Name输入框修改成.MODEL_1. Angle,在F(time,)=输入框中输入表达式AZ(MARKER_3,MARKER_4)*180/PI,单击Apply按钮创建状态变量Angle作为第一个输出变量,然后将Name修改成.MODEL_1. Velocity,在F(time,)=输入框中输入表达式WZ(MARKER_3,MARKER_4)*180/PI,如图7-31所示。其中AZ()函数返回绕Z轴旋转的转角,这里代表连杆相对于转轴的转角,WZ()函数返回绕Z轴旋转的角速度,这里代表连杆的角速度。图7-30 创建输出变量Angle 图7-31 创建输出变量Velocity6、指定状态变量angle、Velocity为输出变量单击菜单【Build】【Controls Tookit】【Plant Output】后,弹出创建控制输出对话框,如图7-32所示。将Plant Output Name输入框修改成. MODEL_1.PINPUT_output。在Variable Name 输入框中,用鼠标右键快捷菜单输入状态变量Angel和Velocity,单击OK按钮。图7-32创建控制输出对话框7、导出控制参数如果还没有加载ADAMS/Controls模块,单击菜单【Tools】【Plugin Manager】,在弹出的插件管理对话框中选择ADAMS/Controls模块,并单击OK按钮,之后出现一个新的菜单Controls。单击菜单【Controls】【Plant Export】,弹出导出控制参数对话框,如图7-33所示。在File Prefix输入框中输入controlspid,在Plant Input输入框中用鼠标右键快捷菜单输入PINPUT_Torque,在Plant Output输入框中用鼠标右键快捷菜单输入.PINPUT_output,将Control package选择为MATLAB,Type选择为non_linear,Initial Static Analysis选择NO,ADAMS/Solver Choice选择为Fortran。单击OK按钮后,在ADAMS的工作目录下将生成controlspid.m、 controlspid.cmd、controlspid.adm这3个文件。图7-33 导出控制参数对话框7.2.3 建立MATLAB控制模型1、导出ADAMS模型在MATLAB里的模块启动MATLAB ,先将MATLAB的工作目录指向ADAMS的工作目录,方法是单击工作栏中Current Direction后的按钮,弹出选择路径对话框。在MATLAB命令窗口的>>提示符下,输入controlspid,也就是controlspid.m的文件名,然后在>>提示符下输入命令ADAMS_sys ,该命令是ADAMS与MATLAB的接口命令。在输入ADAMS_sys命令后,弹出一个新的窗口,该窗口是MATLAB/Simulink的选择窗口,其中S-Function方框表示ADAMS模型的非线性模型,即进行动力学计算的模型,State-Space表示ADAMS模型的线性化模型,在ADAMS_sub包含有非线性方程,也包含许多有用的变量。2、建立控制方案在MATLAB/Simulink选择窗口中,单击菜单【File】【New】【Model】后,弹出一个新的窗口,单击工具栏中的保存按钮,将新窗口存盘为control_model.mdl(不能与.m文件同名),将ADAMS_sub方框拖拽到control_model.mdl窗口中,并参考图7-34完成控制系统的搭建,也可采用其他的控制方案。图7-34 连接后的控制方案3、设置MATLAB与ADAMS之间的数据交换参数在control_model.mdl窗口中双击ADAMS_sub方框,在弹出的新的窗口中双击MSCSDoftware,弹出数据交换参数设置对话框,将Interprocess设置为PIPE(DDE) ,如果不是在一台计算机上,选择TCP/IP,将Communication Interval输入框中输入0.005,表示每隔0.005s在MATLAB和ADAMS之间进行一次数据交换,若仿真过慢,可以适当改大该参数,将Simulation Mode设置为continuous,Animation mode设置成interactive,表示交互式计算,在计算过程中会自动启动ADAMS/View,以便观察仿真动画,如果设置成batch,则用批处理的形式,看不到仿真动画,其他使用默认设置即可。4仿真设置和仿真计算。单击窗口中菜单【Simulation】【Simulation Parameters】,弹出仿真设置对话框,在Solver页中将Start time设置为0, 将Stop time设置为20, 将Type设置为Variable-step,其他使用默认选项,单击OK按钮。最后单击开始按钮,开始仿真。(若出现错误,重启MATLAB即可。每次启动MATLAB都需要选择路径到包含controlspid.m、 controlspid.cmd、controlspid.adm的文件夹,并输入controlspid(.m文件名)和ADAMS_sys(ADAMS与MATLAB的接口命令)。7.2.4 结果后处理在MATLAB示波器中,可以得到角度和力矩的曲线。得到的Velocity变量曲线和Torque变量曲线分别如图7-35和图7-36所示。此模型初始受重力作用,产生转动,通过控制力矩的大小,最终角速度为零,模型达到平衡。图7-35 变量Velocity随时间的变化图7-36 变量Torque随时间的变化附录资料:不需要的可以自行删除各类滤波器的MATLAB程序一、 理想低通滤波器IA=imread('lena.bmp');f1,f2=freqspace(size(IA),'meshgrid');Hd=ones(size(IA);r=sqrt(f1.2+f2.2);Hd(r>0.2)=0;Y=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 二、理想高通滤波器IA=imread('lena.bmp');f1,f2=freqspace(size(IA),'meshgrid');Hd=ones(size(IA);r=sqrt(f1.2+f2.2);Hd(r<0.2)=0;Y=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 三、 Butterworth低通滤波器IA=imread('lena.bmp');f1,f2=freqspace(size(IA),'meshgrid');D=0.3;r=f1.2+f2.2;n=4;for i=1:size(IA,1) for j=1:size(IA,2) t=r(i,j)/(D*D); Hd(i,j)=1/(tn+1); endendY=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 四、 Butterworth高通滤波器IA=imread('lena.bmp');f1,f2=freqspace(size(IA),'meshgrid');D=0.3;r=f1.2+f2.2;n=4;for i=1:size(IA,1) for j=1:size(IA,2) t=(D*D)/r(i,j); Hd(i,j)=1/(tn+1); endendY=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 五、 高斯低通滤波器IA=imread('lena.bmp');IB=imread('babarra.bmp');f1,f2=freqspace(size(IA),'meshgrid');D=100/size(IA,1);r=f1.2+f2.2;Hd=ones(size(IA);for i=1:size(IA,1) for j=1:size(IA,2) t=r(i,j)/(D*D); Hd(i,j)=exp(-t); endendY=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 六、 高斯高通滤波器IA=imread('lena.bmp');IB=imread('babarra.bmp');f1,f2=freqspace(size(IA),'meshgrid');%D=100/size(IA,1);D=0.3;r=f1.2+f2.2;for i=1:size(IA,1) for j=1:size(IA,2) t=r(i,j)/(D*D); Hd(i,j)=1-exp(-t); endendY=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 七、 梯形低通滤波器IA=imread('lena.bmp');IB=imread('babarra.bmp');f1,f2=freqspace(size(IA),'meshgrid');%D=100/size(IA,1);D0=0.1;D1=0.4;r=sqrt(f1.2+f2.2);Hd=zeros(size(IA);Hd(r<D0)=1;for i=1:size(IA,1) for j=1:size(IA,2) if r(i,j)>=D0 & r(i,j)<=D1 Hd(i,j)=(D1-r(i,j)/(D1-D0); end endendY=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 八、 梯形高通滤波器IA=imread('lena.bmp');IB=imread('babarra.bmp');f1,f2=freqspace(size(IA),'meshgrid');%D=100/size(IA,1);D0=0.1;D1=0.4;r=sqrt(f1.2+f2.2);Hd=ones(size(IA);Hd(r<D1)=0;for i=1:size(IA,1) for j=1:size(IA,2) if r(i,j)>=D0 & r(i,j)<=D1 Hd(i,j)=(D0-r(i,j)/(D0-D1); end endendY=fft2(double(IA);Y=fftshift(Y);Ya=Y.*Hd;Ya=ifftshift(Ya);Ia=real(ifft2(Ya);figuresubplot(2,2,1),imshow(uint8(IA);subplot(2,2,2),imshow(uint8(Ia);figuresurf(Hd,'Facecolor','interp','Edgecolor','none','Facelighting','phong'); 九、 用其他方法编写的理想低通、理想高通、Butterworth低通、同态滤波程序1、 理想低通i1=imread('lena.bmp');i2=imnoise(i1,'salt & pepper',0.1);f=double(i2);k=fft2(f);g=fftshift(k);N1,N2=size(g);d0=50;u0=floor(N1/2)+1;v0=floor(N2/2)+1;for i=1:N1 for j=1:N2 d=sqrt(i-u0)2+(j-v0)2); if d<=d0 h=1; else h=0; end y(i,j)=g(i,j)*h; endendy=ifftshift(y);E1=ifft2(y);E2=real(E1);figuresubplot(2,2,1),imshow(uint8(i1);subplot(2,2,2),imshow(uint8(i2);subplot(2,2,3),imshow(uint8(E2); 2、 理想高通i1=imread('lena.bmp');i2=imnoise(i1,'salt & pepper',0.1);f=double(i2);k=fft2(f);g=fftshift(k);N1,N2=size(g);n=2;d0=10;u0=floor(N1/2)+1;v0=floor(N2/2)+1;for i=1:N1 for j=1:N2 d=sqrt(i-u0)2+(j-v0)2); if d<=d0 h=0; else h=1; end y(i,j)=g(i,j)*h;endendy=ifftshift(y);E1=ifft2(y);E2=real(E1);figuresubplot(2,2,1),imshow(uint8(i1);subplot(2,2,2),imshow(uint8(i2);subplot(2,2,3),imshow(uint8(E2); 3、 Butterworth低通i1=imread('lena.bmp');i2=imnoise(i1,'salt & pepper',0.1);f=double(i2);k=fft2(f);g=fftshift(k);N1,N2=size(g);n=2;d0=50;u0=floor(N1/2)+1;v0=floor(N2/2)+1;for i=1:N1 for j=1:N2 d=sqrt(i-u0)2+(j-v0)2); h=1/(1+(d/d0)(2*n); y(i,j)=g(i,j)*h; endendy=ifftshift(y);E1=ifft2(y);E2=real(E1); figuresubplot(2,2,1),imshow(uint8(i1);subplot(2,2,2),imshow(uint8(i2);subplot(2,2,3),imshow(uint8(E2); 4、 同态滤波I=rgb2gray(imread('fabric00.bmp');