文章目录
一. 给关节施加力和建立传感器
建立完模型之后,我们最想要做的就是模拟系统在受力情况下是怎么运动的,这就是动力学仿真的真谛。上一节我们其实已经观察了自由单摆在只受重力作用下的运动,其实就是一个正弦变动,由于没有摩擦力,所以他会一直等幅振荡。
接着上一节的内容,本次我们的目标是给单摆施加驱动力矩,同时记录单摆的摆动位置和速度。在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,看看变化。