一.ADAMS软件简介虚拟样机仿真分析软件ADAMS(AutomaticDynamicAnalysisofMechanicalSystems)是对机械系统的运动学与动力学进行仿真的商用软件,由美国MDI(MechnicalDynamicsInc.)开发,在经历了12个版本后,被美国MSC公司收购。
ADAMS集建模、计算和后处理于一体,ADAMS有许多个模块组成,基本模块是View模块和Postprocess模块,通常的机械系统都可以用这两个模块来完成,另外在ADAMS中还针对专业领域而单独开发的一些专用模块和嵌入模块,例如专业模块包括汽车模块ADAMS/Car、发动机模块ADAMS/Engine、火车模块ADAMS/Rail、飞机模块ADAMS/Aircraft等;嵌入模块如振动模块ADAMS/Vibration、耐久性模块ADAMS/Durability、液压模块ADAMS/Hydraulic、控制模块ADAMS/Control和柔性体模块ADAMS/AutoFlex等[3]。
1.1ADAMS软件概述ADAMS是以计算多体系统动力学(ComputationalDynamicsofMultibodySystems)为基础,包含多个专业模块和专业领域的虚拟样机开发系统软件,利用它可以建立复杂机械系统的运动学和动力学模型,其模型可以是刚体的,也可以是柔性体,以及刚柔混合体模型。
如果在产品的概念设计阶段就采取ADAMS进行辅助分析,就可以在建造真实的物理样机之前,对产品进行各种性能测试,达到缩短开发周期、降低开发成本的目的。
ADAMS,即机械系统动力学自动分析(AutomaticDynamicAnalysisofMechanicalSystems)该软件是美国MDI公司(MechnicalDynamicsInc.)开发的虚拟样机分析软件。
目前,ADAMS已经被全世界各行各业的数百家主要制造商采用。
根据1999年机械系统动态分析软件国际市场份额的统计资料,ADAMS软件销售总额近八千万美元、占据了51%的份额。
ADAMS软件使用交互式图形环境和零件库、约束库、力库,创建完全参数化的机械系统几何模型,其求解器采用多刚体系统动力学理论中的拉格朗日方程方法,建立系统动力学方程,对虚拟机械系统进行静力学、运动学和动力学分析,输出位移、速度、加速度和反作用力曲线。
ADAMS软件的仿真可用于预测机械系统的性能、运动范围、碰撞检测、峰值载荷以及计算有限元的输入载荷等。
ADAMS一方面是虚拟样机分析的应用软件,用户可以运用该软件非常方便地对虚拟机械系统进行静力学、运动学和动力学分析。
另一方面,又是虚拟样机分析开发工具,其开放性的程序结构和多种接口,可以成为特殊行业用户进行特殊类型虚拟样机分析的二次开发工具平台。
ADAMS软件有两种操作系统的版本:UNIX版和WindowsNT/2000版。
1.2用户界面模块(ADAMS/View)ADAMS/View是ADAMS系列产品的核心模块之一,采用以用户为中心的交互式图形环境,将图标操作,菜单操作,鼠标点击操作与交互式图形建模,仿真计算,动画显示,优化设计,X-Y曲线图处理,结果分析和数据打印等功能集成在一起。
ADAMS/View采用简单的分层方式完成建模工作。
采用Parasolid内核进行实体建模,并提供了丰富的零件几何图形库,约束库和力/力矩库,并且支持布尔运算,支持FORTRAN/77和FORTRAN/90中的函数。
除此之外,还提供了丰富的位移函数,速度函数,加速度函数,接触函数,样条函数,力/力矩函数,合力/力矩函数,数据元函数,若干用户子程序函数以及常量和变量等[3]。
自9.0版后,ADAMS/View采用用户熟悉的Motif界面(UNIX系统)和Windows界面(NT系统),从而大大提高了快速建模能力。
在ADAMS/View中,用户利用TABLEEDITOR,可像用EXCEL一样方便地编辑模型数据,同时还提供了PLOTBROWSER和FUNCTIONBUILDER工具包。
DS(设计研究),DOE(实验设计)及OPTIMIZE(优化)功能可使用户方便地进行优化工作。
ADAMS/View有自己的高级编程语言,支持命令行输入命令和C++语言,有丰富的宏命令以及快捷方便的图标,菜单和对话框创建和修改工具包,而且具有在线帮助功能。
ADAMS/View模块界面如图1.1所示。
1.3求解器模块(ADAMS/Solver)ADAMS/Solver是ADAMS系列产品的核心模块之一,是ADAMS产品系列中处于心脏地位的仿真器。
该软件自动形成机械系统模型的动力学方程,提供静力学,运动学和动力学的解算结果。
ADAMS/Solver有各种建模和求解选项,以便精确有效地解决各种工程应用问题。
ADAMS/Solver可以对刚体和弹性体进行仿真研究。
为了进行有限元分析和控制系统研究,用户除要求软件输出位移,速度,加速度和力外,还可要求模块输出用户自己定义的数据。
用户可以通过运动副,运动激励,高副接触,用户定义的子程序等添加不同的约束。
用户同时可求解运动副之间的作用力和反作用力,或施加单点外力。
ADAMS/Solver新版中对校正功能进行了改进,使得积分器能够根据模型的复杂程度自动调整参数,仿真计算速度提高了30%;采用新的S12型积分器(StabilizedIndex2intergrator),能够同时求解运动方程组的位移和速度,显著增强积分器的鲁棒性,提高复杂系统的解算速度;采用适用于柔性单元(梁,衬套,力场,弹簧-阻尼器)的新算法,可提高S12型积分器的求解精度和鲁棒性;可以将样条数据存储成独立文件使之管理更加方便,并且spline语句适用于各种样条数据文件,样条数据文件子程序还支持用户定义的数据格式;具有丰富的约束摩擦特性功能,在Translational,Revolute,Hooks,Cylindrical,Spherical,Universal等约束中可定义各种摩擦特性。
1.4后处理模块(ADAMS/PostProcessor)MDI公司开发的后处理模块ADAMS/Postprocessor,用来处理仿真结果数据,显示仿真动画等。
既可以在ADAMS/View环境中运行,也可脱离该环境独立运行。
后处理的操作界面如图1.2所示。
ADAMS/PostProcessor的主要特点是:采用快速高质量的动画显示,便于从可视化角度深入理解设计方案的有效性;使用树状搜索结构,层次清晰,并可快速检索对象;具有丰富的数据作图,数据处理及文件输出功能;具有灵活多变的窗口风格,支持多窗口画面分割显示及多页面存储;多视窗动画与曲线结果同步显示,并可录制成电影文件;具有完备的曲线数据统计功能:如均值,均方根,极值,斜率等;具有丰富的数据处理功能,能够进行曲线的代数运算反向,偏置,缩放,图1.2ADAMS/PostProcessor界面编辑和生成Bode图等;为光滑消隐的柔体动画提供了更优的内存管理模式;强化了曲线编辑工具栏功能;能支持模态形状动画,模态形状动画可记录的标准图形文件格式有:*.gif,*.jpg,*.bmp,*.xpm,*.avi等;在日期,分析名称,页数等方面增加了图表动画功能;可进行几何属性的细节的动态演示。
ADAMS/PostProcessor的主要功能是为观察模型的运动提供了所需的环境,用户可以向前,向后播放动画,随时中断播放动画,而且可以选择最佳观察视角,从而使用户更容易地完成模型排错任务;为了验证ADAMS仿真分析结果数据的有效性,可以输入测试数据,并测试数据与仿真结果数据进行绘图比较,还可对数据结果进行数学运算,对输出进行统计分析;用户可以对多个模拟结果进行图解比较,选择合理的设计方案;可以帮助用户再现ADAMS中的仿真分析结果数据,以提高设计报告的质量;可以改变图表的形式,也可以添加标题和注释;可以载入实体动画,从而加强仿真分析结果数据的表达效果;还可以实现在播放三维动画的同时,显示曲线的数据位置,从而可以观察运动与参数变化的对应关系。
1.5控制模块(ADAMS/Controls)ADAMS/Controls是ADAMS软件包中的一个集成可选模块。
在ADAMS/Controls中,设计师既可以通过简单的继电器,逻辑与非门,阻尼线圈等建立简单的控制机构,也可利用通用控制系统软件(如MATLAB,MATRIX,EASY5)建立的控制系统框图,建立包括控制系统,液压系统,气动系统和运动机械系统的仿真模型。
在仿真计算过程中,ADAMS采取两种工作方式:其一,机械系统采用ADAMS解算器,控制系统采用控制软件解算器,二者之间通过状态方程进行联系;其二,利用控制软件书写描述控制系统的控制框图,然后将控制框图提交给ADAMS,应用ADAMS解算器进行包括控制系统在内的复杂机械系统虚拟样机的同步仿真计算。
这样的机械-控制系统的联合仿真分析过程可以用于许多领域,例如汽车自动防抱死系统(ABS),主动悬架,飞机起落架助动器,卫星姿态控制等。
联合仿真计算可以是线性的,也可以是非线性的。
使用ADAMS/Controls的前提是需要ADAMS与控制系统软件同时安装在相同的工作平台上。
二.典型机器人虚拟实验2.1串联机器人在ADAMS中用连杆模拟机械臂,对两自由度的机械臂分别进行运动学分析、动力学分析及机械臂的轨迹规划。
2.1.1运动学分析下面是建立模型并对模型进行设置分析的详细过程。
(1)启动ADAMS/View,在欢迎对话框中选择新建模型,模型取名为Robot_arm,并将单位设置为MMKS,然后单击OK。
(2)打开坐标系窗口。
按下F4键,或者单击菜单【View】→【CoordinateWindow】后,打开坐标系窗口。
当鼠标在图形区移动时,在坐标窗口中显示了当前鼠标所在位置的坐标值。
(3)创建机械臂关节1(连杆)。
单击连杆按钮,勾选连杆的长、宽、深选项,分别将其设置为300mm、40mm、10mm,如图2.1所示。
在图形区单击鼠标左键,然后将连杆拖至水平位置时,在单击鼠标左键。
(4)在连杆的右端打孔。
在几何建模工具栏单击打孔按钮,将半径Radius设置为10mm,深度设置为10mm,如图2.2所示。
然后在图形区模型附近单击鼠标左键,在与XY平面垂直的表面上单击鼠标左键。
然后修改孔的位置,在孔附近单击鼠标右键,选择【HOLE_1】→【Modify】,在弹出的对话框中,将Center的坐标值设置成(300,0.0,5.0),如图2.3所示。
(5)用(3)的方法在关节1右端孔中心处创建关节2,如图2.4所示。
然后再将关节2向内侧平移10mm。
2.2孔设置2.1创建连杆设置2.3修改孔位置对话框2.4关节模型(6)添加约束。
在关节1的左端与大地之间添加转动副,在关节1与关节2结合处添加转动副。
单击工具栏中的旋转副按钮,并将创建旋转副的选项设置为2Bod-1Loc和NormalGrid,然后在图形区单击关节1和大地,之后需要选择一个作用点,将鼠标移动到关节1的Marker1处出现center信息时,按下鼠标左键后就可以创建旋转副,旋转副的轴垂直于工作栅格。
然后用同样的方法创建关节1与关节2之间的旋转副,如图2.5所示。
2.5创建旋转副(7)添加驱动。
在运动副1(Joint1)和运动副2(Joint2)上分别添加旋转驱动。
单击主工具栏的旋转驱动按钮,然后在选择上面创建的旋转副1,然后在图形区单击鼠标右键,在快捷菜单中中选择Modify,在编辑对话框中将驱动函数设置为40d*sin(time),如图2.6所示。
用同样的方法在旋转副2上创建旋转驱动,并将驱动函数设置为15d*time*(-1)。
2.6旋转驱动设置(8)运行仿真计算。
(9)绘制运动轨迹。
单击菜单【Review】→【CreateTraceSpline】,然后选择关节2右端点Marker4,再选择关节1与大地的铰接点,鼠标移动到Joint1处,单击鼠标右键,在弹出对话框中选择ground,单击OK创建运动轨迹,如图2.7所示。
2.7末端运动轨迹(10)结果后处理。
按下键盘上的F8键,界面将从View模块直接进入到PostProcess模块,后处理模块界面如图2.8所示。
2.8后处理模块界面在后处理模块,通过菜单【View】→【LoadAnimation】可以载入动画。
单击播放按钮后开始播放动画,如果在播放同时按下记录按钮,在播放动画的同时也将动画保存到动画文件中,动画文件位于ADAMS的工作目录下。
在后处理模块中,通过菜单【View】→【LoadPlot】,通过选择相应的选项,绘制出相应的结果曲线。
如果2.9、2.10所示,分别绘制出机械臂末端点的速度曲线和加速度曲线。
2.9机械臂末端速度曲线2.10机械臂末端加速度曲线2.1.2动力学分析(1)创建机械臂模型。
按照2.1.1节的(1)~(6)步创建同样的机械臂,并添加运动副约束。
(2)添加驱动。
与运动分析不同,动力学分析添加的驱动为单分量力矩。
单击工具栏上的单分量力矩选项,将选项设置为SpaceFixed、NormaltoGrid和Constant,然后勾选Torque项并输入4000,然后在图形区单击关节1,再在其上单击任何一点。
用同样的方法添加关节2的驱动,并将其值设置为-100,如图2.11所示。
2.11添加单分量力矩(3)运动学计算仿真。
(4)绘制运动轨迹。
单击菜单【Review】→【CreateTraceSpline】,然后选择关节2右端点Marker4,再选择关节1与大地的铰接点,鼠标移动到Joint1处,单击鼠标右键,在弹出对话框中选择ground,单击OK创建运动轨迹,如图2.12所示。
2.12机械臂末端运动轨迹(5)结果后处理。
在后处理模块,通过菜单【View】→【LoadAnimation】可以载入动画。
单击播放按钮后开始播放动画,在播放同时按下记录按钮,将动画保存到动画文件中。
如果2.13、2.14所示,分别绘制出机械臂末端点的速度曲线和加速度曲线。
2.13机械臂末端速度曲线2.14机械臂末端加速度曲线2.1.3轨迹规划本例将建立在ADAMS/View中用ControsToolkits建立控制系统,通过PID环节进行控制,控制对象是作用在每个关节单分量力矩,使机械臂的末端运动轨迹为圆。
因为关节1的一端与大地(Ground)原点铰接,因此将圆的方程设为(x-550)2+y2=502,用参数形式表示就是x=550+50*cos(t),y=50*sin(t),要使关节2的末端运动轨迹按指定的轨迹运动,这时需要通过轨迹方程计算出两个关节的关节变量,然后将这两个关节变量作为控制系统模型的关节输入。
建立控制系统具体步骤如下:(1)建立机械臂的模型,在两个关节处分别添加单分量力矩,然后将数值设为0。
(2)将MATLAB计算出的数据以Spline形式导入ADAMS。
如图2.15所示。
然后用同样的方法导入关节2的数据。
2.16导入数据文件建立SPLINES(3)建立控制系统的输入环节。
单击菜单【Build】→【ControlsToolkit】→【StandardControlBlocks】后,弹出创建控制环节工具包,在其中单击输入环节按钮,将Name输入框中的名称修改为.Control_PID.joint1_input,单击function输入框后的按钮,,弹出函数构造器,在其函数下拉表中选Spline项,然后单击Assist按钮,弹出函数辅助对话框,在FirstIndependentVariable中输入1,然后在SplineName中单击鼠标右键,在弹出快捷菜单中选择【Spline】→【Guesses】→【Spline1】,单击OK按钮,如图2.16所示,然后单击OK按钮。
(4)创建比较环节。
单击控制环节工具包中的比较环节按钮,将Name输入框中的名字改为.Control_PID.sum1,在Input1输入框中单击鼠标右键,在弹出的快捷菜单中选择【controls_input】→【Guesses】→【Joint1_input】,在Input2输入框中单击鼠标右键,在弹出的快捷菜单中选择【controls_input】→【Guesses】→【Joint1_angl】,其他选项默认。
用同样的方法建立关节2的比较环节.Control_PID.sum2。
(5)创建PID环节。
单击控制环节工具包中的PID按钮,在Input输入框中单击鼠标右键,在弹出的快捷菜单中选择【controls_sum】→【Guesses】→【sum_1】,在Input2输入框中单击鼠标右键,在弹出的快捷菜单中选择【controls_input】→【Guesses】→【Joint1_angl】,其他选项默认,如图2.17所示。
用同样的方法建立关节2的PID控制环节。
2.17创建PID环节(6)将单分量力矩参数化。
在图形区双击单分量力矩的图标,在弹出的编辑对话框中,单击Function输入框后的函数构造器按钮,在GettingObjectData下拉菜单中选择Measures,然后在输入框中单击鼠标右键,选择【Runtme_Measure】→【Guesses】→【pid_1】,然后在单击InsertObjectName按钮,单击OK,如图2.18所示。
单击F8进入后处理模块中,在后处理模块中将关节1与关节2的输入角位移和输出角位移进行比较,然后修改PID环节的参数,直至两条曲线重合为止,如图2.19,2.20所示。
2.19关节1的位移调节曲线2.20关节2的位移调节曲线(8)绘制运动轨迹。
单击菜单【Review】→【CreateTraceSpline】,然后选择关节2右端点Marker4,再选择关节1与大地的铰接点,鼠标移动到Joint1处,单击鼠标右键,在弹出对话框中选择ground,单击OK创建运动轨迹,如图2.21所示。
2.21机械臂末端轨迹2.1.4基于ADAMS和MATLAB的联合运动控制现在以MATLAB作为外部控制程序,仍以2.1.3节中的轨迹规划为例,来说明ADAMS与MATLAB的联合控制过程。
详细过程如下:(1)建立机械臂模型。
按照2.1.1节(1)~(7)建立模型,并添加相应的运动副,然后在两个旋转副位置分别添加单分量力矩。
(2)创建输入状态变量。
单击菜单【Build】→【SystemElements】→【StateVariable】→【New】,弹出创建状态变量对话框。
将Name输入框改成Torque1,单击OK按钮,如图2.22所示。
用同样的方法创建输入状态变量Torque2。
在图形区双击力矩图标,打开对话框如图2.23所示,在Function中输入VARVAL(Torque1),单击OK按钮后将状态变量Torque1与单分量力矩关联起来,同样将另一个单分量力矩与状态变量关联起来。
2.23状态变量与模型关联(4)创建输出状态变量。
单击菜单【Build】→【SystemElements】→【StateVariable】→【New】,弹出创建状态变量对话框,如图2.24所示。
将Name输入框修改成spline1,然后用上节提到的方法将该状态变量与SPLINE1关联,单击OK。
然后再建立状态变量angle1,然后在F(time…)=输入框中输入表达式AZ(MARKER_1,MARKER_6),单击OK。
用同样的方法创建状态变量spline2和angle2。
2.24创建输出状态变量(5)指定状态变量为输入输出变量。
单击菜单【Build】→【ControlsToolkit】→【PlantInput】/【PlantOutput】后弹出相应的对话框,如图2.25所示,然后添加相应的输入输出变量即可完成定义。
分别将Torque1、Torque2指定为输入变量,将spline1、spline2、angle1、angle2指定为输出变量。
2.25指定输入/输出/变量(6)导出控制参数。
单击菜单【Controls】→【PlantExport】,弹出导出控制参数对话框,如图2.26所示。
在FilePrefix输入框中输入adams_matlab,在PlantInput输入框中用鼠标右键快捷菜单输入PINPUT_1,在PlantOutput输入框中用鼠标右键快捷菜单输入POUTPUT_1,将ControlPackage选择为MATLAB,其他为默认,单击OK按钮后,在ADAMS工作目录中生成adams_matlab.m、adams_matlab.cmd、adams_matlab.adm这3个文件。
2.26导出控制参数对话框(7)启动MATLAB,将MATLAB的工作目录指向ADAMS的工作目录。
在MATLAB命令窗口中输入adams_matlab,然后输入命令adams_sys,该命令是ADAMS与MATLAB的接口命令。
弹出了一个新的窗口,该窗口是MATLAB/Simlink选择窗口,窗口中包含的内容如图2.27所示。
2.27MATLAB/Simlink窗口(8)建立控制方案。
在MATLAB/Simlink选择窗口中,单击菜单【File】→【New】→【Model】,弹出了新窗口,将新窗口存盘为adams_matlab.mdl,将adams_sub方框拖到adams_matlab.mdl中,然后在窗口中添加相应的环节,组成控制系统,如图2.28所示。
2.28控制方案(9)设置MATLAB于ADAMS之间的数据交换参数。
在adams_matlab.mdl窗口中双击adams_sub方框,在弹出的新窗口中双击MSCSoftware,弹出书籍交换设置对话框,将SimulationMode设置成continuous,Animationmode设置成interactive,其他默认,单击OK按钮。
(10)仿真设置和仿真计算。
单击新窗口中的【Simulation】→【SimulationParameters】,弹出仿真设置对话框,在Solver页中将Starttime设置成0,将Stoptime设置成6.28,其他默认,单击OK按钮。
最后单击菜单【Simulation】→【Start】开始进行仿真计算。
(11)结果后处理。
回到ADAMS/View,单击【File】→【Import】,在弹出的导入对话框中,将FileType设置成ADAMS/SolverAnalysis(*.req,*.gra,*.res),在FileToRead输入框中用鼠标右键浏览输入adams_matlab.res文件,然后通过处理模块绘制出spline1和angle曲线进行对比,然后在调节PID控制的增益系数,直到关节的输入与输出曲线重合,绘制运动轨迹。