Simscape单摆模型搭建
打开MATLAB R2018a软件,依次点击顶部菜单栏“主页”-“Simulink”,在“Simulink Start Page”页面中选择“New”-“Simscape”-“Multibody”,操作步骤如下图1所示。
图1 打开Simscape Multibody步骤
打开的界面如图2所示。
图2 Simscape Multibody界面
点击顶部菜单栏中的“Display”选项,取消勾选“Hide Automatic Names”,点击右侧蓝色长方形“Open Simscape Multibody Library”可打开Simscape Multibody Library模块库。界面中的Simulink-PS Converter模块用来把Simulink信号转换为物理信号,以便能在Simscape物理建模环境里使用;而PS-Simulink Converter模块可以把Simscape物理建模环境中的物理信号转换为Simulink能够处理的信号。Scope模块用于可视化显示信号随时间变化的情况。在Multibody建模中,Solver Configuration、World Frame,Mechanism Configuration模块必不可少;Solver Configuration模块主要用于配置仿真求解器的相关参数;World Frame模块定义了整个机械系统的全局参考坐标系,也就是世界坐标系。它为机械系统中的各个刚体和关节提供了一个统一的参考框架,用于描述刚体的位置、姿态和运动。所有刚体的位置和姿态都是相对于世界坐标系来定义的;Mechanism Configuration模块用于配置机械系统的初始条件和仿真参数,常用于设置重力加速度方向。Solid模块主要用来表示机械系统中的刚体,可以定义刚体的质量特性、惯性特性等,从而对刚体在力和力矩作用下的运动进行建模和仿真。Rigid Transform模块主要用于描述坐标系之间的位置(平移)和姿态(旋转)转换。各模块如图3所示。
图3 各模块功能介绍
修改Solid模块中的“Geometry”参数,将宽和高修改为0.1m。要以左端为旋转关节,y轴为旋转轴,在Z-X平面旋转,则需要使用Rigid Transform模块将坐标系在X轴方向平移0.5m。如图4所示。
图4 修改Solid模块属性
图5 添加Rigid Transform模块
从图5中可以看出Rigid Transform模块中的B端指向世界坐标系,F端指向Solid模块刚体的几何中心,即F端相对于B端向X轴方向移动了0.5m。如果没使用Rigid Transform模块,Solid模块刚体的几何中心应与世界坐标系重合。
要使刚体绕左端旋转,则需添加Revolute Joint模块,双击界面空白处,输入“Revolute Joint”回车创建一个旋转关节模块。将Revolute Joint模块按照图6中的位置放置,从它的Description描述中可以看出,B端(Base,基础框架)和F端(Follower,从动框架)的坐标原点应该重合,且B端和F端的Z轴重合,从而从动框架中的X轴和Y轴绕Z轴旋转。
图6 添加Revolute Joint模块
从Mechanism Configuration模块中可以看出重力加速度的方向在-Z轴。要使刚体绕左端旋转,则旋转轴应为世界坐标系中的y轴。即需要添加Rigid Transform模块将世界坐标系中的y轴变换到Revolute Joint模块B端中的Z轴。在Rigid Transform1模块中修改“Rotation”参数,按照右手螺旋定则,大拇指为旋转轴,四指指向旋转方向,具体修改如图7所示。(此步也可不添加Rigid Transform模块,在Mechanism Configuration模块中修改重力加速度方向为非±Z轴方向,即刚体在XY平面内绕世界坐标系Z轴旋转)
图7 修改Rigid Transform1模块参数
点击顶部工具栏中的“Run”按钮,可以看到刚体只受重力的影响下在ZX平面内运动。进一步地,要对这个单摆模型进行动力学“正问题”分析(已知力或力矩,求运动),则需要修改旋转关节(Revolute Joint模块)相关属性。在Actuation(驱动)栏中,修改Torque(扭矩)为“Provided by Input”,Motion(运动)位“Automatically Computed”;在Sensing(传感)栏中选择Position(位置)、Velocity(速度)、Acceleration(加速度)、Actuator Torque(驱动力矩)作为输出。双击界面空白处输入“Sine Wave”,添加用于生成标准正弦波的信号模块,并设置Amplitude(振幅)为2。将各模块连接,具体操作如图8所示。
图8 单摆动力学正问题分析
点击顶部工具栏中的“Run”按钮,依次双击打开右侧scope、scope1、scope2、scope3模块的曲线图,如图9、10、11、12所示。从图10 Position图中可以看出,x轴为采样时间,y轴为杆与x轴的夹角,单位为弧度,在0到5s内单摆大约做了不到5圈正向旋转,之后做了两圈多的逆向旋转,再做了1圈多的正向旋转。图10为对应位置的速度曲线图。图11为对应位置的加速度曲线图。图12为驱动力矩随时间变换的曲线图,对应Revolute Joint模块中的左侧t口中的Sine Wave信号,为2sin(t)。
图9 Position曲线图
图10 Velocity曲线图
图11 Acceleration曲线图
图12 Actuator Torque曲线图
进行逆动力学分析,修改左侧Simulink-PS Converter模块的参数。将“Units”页下的“Input signal unit”标签值改为“deg”,表示将输入信号转为单位为deg角度的物理量;将“Input Handling”页下的Filtering and derivatives标签值改为“Provide signals”,“Provided signals”标签改为“Input and first two derivatives”,表示该模块需要外部提供输入信号及其前两阶导数信号。修改如图13所示。
图13 修改Simulink-PS Converter模块参数
在界面空白处双击输入“Derivative”添加求Derivative微分模块,操作如图14所示。值得注意的是,simulink中的Derivative模块有局限性,容易造成突变,建议手动求微分。
图14 添加Derivative模块
则运行结果如图15、16、17、18所示。图15为单摆旋转的角度;图16为其速度变化曲线图,可以看出前1s内产生了突变;图17为其加速度变化曲线图,也可看出前1s内产生了突变;图18为驱动力矩随时间变化图。
图15 Position曲线图
图16 Velocity曲线图
图17 Acceleration曲线图
图18 Actuator Torque曲线图
为了防止使用Derivative模块而造成的开始波动比较大的问题,可以使用Function模块或者手动搭建角速度和角加速度模块。Function模块需要搭配clock模块使用,在界面空白处添加clock模块,并设置Decimation为10为仿真时间,添加MATLAB Function模块,双击该模块编写数学表达式,如图19所示。手动搭建角速度和角加速度模块如图20所示,只需要在sine Wave2模块上修改Phase(相位)值为pi/2。
图19
图20 手动搭建角速度和角加速度模块
最后结果如图21、22、23、24所示。
图21 Position曲线图
图22 Velocity曲线图
图23 Acceleration曲线图
图24 Actuator Torque曲线图