一. 给关节施加力和建立传感器
建立完模型之后,我们最想要做的就是模拟系统在受力情况下是怎么运动的,这就是动力学仿真的真谛。上一节我们其实已经观察了自由单摆在只受重力作用下的运动,其实就是一个正弦变动,由于没有摩擦力,所以他会一直等幅振荡。
接着上一节的内容,本次我们的目标是给单摆施加驱动力矩,同时记录单摆的摆动位置和速度。在Multibody里面施加力和增加传感器都是在关节当中进行的。
打开我们上一节的模型,双击打开Revolute Joint,像下面这样设置
Internal Mechanics是施加弹性力(Spring Stiffness)与阻尼(Damping Coefficient),以前都学过的,弹性力与位移成正比,阻尼力与速度成正比(力是广义力,包含力矩)这样设置完之后其实就是一个标准的质量—弹簧—阻尼系统了,一个二阶系统。
Actuation是驱动力,在Torque里面选择Provided by Input,就是通过输入力驱动,当然可以选择直接给一个值的。
Sensing就是传感器,这里勾选Position和velocity,位置和速度。
完事之后Revolute Joint就多出了几个接口,分别是输入力与输出位置、速度。
加进去一个正弦信号,一个Simulink-PS Converter,一个PS-Simulink Converter,一个Scope,一个to workspace块,连接起来。最后像下面这样。
说明一下,所有的部件都可以在Simulink library里面找到,找不到就搜索,最快的是直接在模型里面打字,它会自己出来的,比如搜索To Worksapce模块
这样就加入了力和传感器,Simulink-PS Converter和PS-Simulink Converter的作用已经说过了,是实现Simulink信号与Multibody信号的转换,没有这个东西它是不让你连接的。
点击运行,观察三维视图里面的真实运动,打开Scope观察位移和速度的曲线,然后在Matlab Workspce里面可以使用导出的数据绘图。这里我就不截图了,很简单。
二. 加入PID控制器
接下来是重头戏,我们看如何加入PID控制器,控制输入力矩,实现单摆的角度控制。
有了上面的基础其实答案已经呼之欲出了,我们只需要像在simulink里面仿真一样加入PID控制器、比较器就行了。只不过Simulink里面的Plant是建立的数学模型(传递函数或状态空间或S-function别的什么东东),而Multibody里面是虚拟样机。
直接给出连接关系,如下:
这里面PID控制器的参数调整采用里面提供的PID整定器,双击打开PID控制器,点击Tune,打开PID Turner
PID Turner的页面如下,TURNING TOOLS里面拖动两个按钮就可以调整输出曲线。
调完之后点击RESULT,点击UPDATE Block,将参数更新到PID控制器。
三.观察运行结果
点击运行,看看效果。很快就调整到倒立位置了,也就是设立的参考输入180度。
可以加一个示波器看看角度曲线。可以看到跟PID整定的曲线是一样的,大家可以调整一下PID,看看变化。
四. 给零件施加外部力
上面我们是通过关节的设置,来实现给关节施加力的,那么能不能直接给零件施加力呢,答案是肯定的,这个时候需要用到External Force And Torque模块。下面我们看看它的用法
拖进来一个External Force And Torque模块,位置在这里
拖进来之后双击打开,如下设置,增加一个沿着x轴的力(复选框打钩)。这里解释一下,关于力的施加位置和方向,External Force And Torque模块有一个输出端口F(follower),连接到下一个坐标系。力的作用点就是下一个连上来的坐标系的原点,力方向就是沿着下一个练上来的坐标系的轴。
然后连接,把External Force And Torque的F连到pendulum的尾巴上去。也就是说给单摆的末端施加了一个始终垂直于单摆的力。在这个力的作用下就会形成绕转轴的力矩,单摆就会摆起来。
运行之后看一下。
图里面这个坐标系就是pendulum的尾巴坐标系,力的施加方向就是沿着这个坐标系的x轴的。
那么怎么施加力和力矩到任意一点呢?就很简单了,首先需要在你想要施加力的位置建立一个坐标系,然后把External Force And Torque的F连到这个坐标系就行了。