一. 建立自由单摆模型
单摆是最简单的机械系统,简单的单摆需要建立两个零件,一个是固定的滑块,一个是单摆,两个零件通过一个转动关节连接。
我们希望建立一个自由单摆,最后的效果如下:
使用上一节建立的零件。步骤如下:
-
新建零件,命令smnew。
-
将上一节我们建立的mask复制进来,然后将mask复制一个,分别命名为pendulum和fixed slide。
-
增加旋转关节,拖动一个Revolute Joint模块进来,位置在 Simscape > Multibody > Joints ,把他们连接起来。这样就实现了装配过程。
-
修改fixed slide和pendulum的尺寸和颜色
-
修改关节的初始角度,如图,改成30度。想让单摆形成本文第一张图那个效果
-
运行,看看结果。
什么,怎么是这个样子,设30度是想让单摆形成本文第一张图那个效果,好像转的方向不对?别急,原因出在坐标系上。
点击Revolute Joint的B和F,分别如下图所示。Revolute Joint的B连接的是Fixed Slide的F,Revolute Joint的F连接的是pendulum的B,所以Revolute Joint的B和F分别和Fixed Slide、pendulum对齐了(有点绕,建议多读几遍),但是Revolute Joint默认是沿着z轴转的,Fixed Slide、pendulum两个零件的z轴都朝上的,所以就出现了这样的效果。转到方向不对。
-
修改坐标系。
图里面左下角的是地理坐标系,我们其实希望的是pendulum与Fixed Slide的转轴是沿着地理坐标系的y轴的。这样才能实现自由摆动。所以我们需要修改坐标系,将Fixed Slide的F、pendulum的B转到和地理y轴一个朝向。
单击fixed slide,在block标签页下点击look under mask,进入到mask里面编辑。
点击rigid transform(尾巴坐标系),增加一个坐标旋转
同理修改pendulum的rigid transform1(头坐标系)
-
再次运行,结果是这样的。这次结果对了,图中的坐标系是Revolute Joint的F,可以看到单摆pendulum是沿着旋转关节的z轴旋转的。
二. 深刻理解坐标系与装配
经历了上面的修正过程,大家应该对装配就有一点理解了,想想我们是怎么建立零件的连接关系和约束关系的(也就是装配),其实就是通过坐标系:
第一步,将两个坐标系的原点重合。
第二步,建立约束。
如果直接将上面fixed slide的F和pendulum的B连在一起,两者其实就是原点重合加三个坐标系对齐,就是固定关系。
如果中间加一个关节,那么就增加了自由度,比如我们上面加的旋转关节,实现的就是fixed slide的F和pendulum的B原点对齐,z轴对齐,而x轴和y轴是可以转动的。
Matlab里面常用的关节是转动关节(Revolute Joint)和移动关节(Prismatic Joint)。这里重点提醒:
Matlab里面的Revolute Joint默认是绕z轴旋转的,Matlab里面的Revolute Joint默认是绕z轴旋转的,Matlab里面的Revolute Joint默认是绕z轴旋转的
Matlab里面的Prismatic Joint默认是绕z轴平移的,Matlab里面的Revolute Joint默认是绕z轴平移的,Matlab里面的Revolute Joint默认是绕z轴平移的
所以,在建模的时候,一定要把两个零件连接坐标系的z轴转到你想要的旋转轴上去,否则转动方向就会是错误的
(PS:我写的和Matlab官方有点不一样,因为我是写博客时完全重建了一遍,再加上自己的理解的,建议大家学完之后跟我一样,抛开所有教程,自己做一遍,理解会加深不少)