1.前言
最近做毕业设计使用了SimMechanics进行机械臂的建模仿真,网上资料也比较少,当然官方的文档才是最香的:https://ww2.mathworks.cn/help/physmod/sm/rigid-bodies-1.html?s_tid=CRUX_lftnav
自己摸爬滚打后,终于成功实现了建模并和S-Function写的控制算法一起仿真成功。这里记录一下自己的使用流程。
Matlab版本:2018及以上,本人使用2016a和2019b,当用到部分只在2018以上版本才有的功能时才使用2019b,太卡了,平时主力还是2016a。
本文采用i关节连接i个连杆方式,即每个Link与首端关节坐标系固连。
2.坐标系建立
我比较喜欢先把机械臂的坐标系照着实物建好,如果有需要的话可以先列出DH参数,在进行建立。
使用AxGlyph软件画的坐标关系图,这软件真香,支持国产!买买买!接下来就是在SimMechanics中建立该组坐标系。
3.使用smnew命令建立新的SimMechanics仿真文件,也即启动Simulink
中间的World Frame顾名思义就是惯性系,我们可以通过将其连接到Solid、Frame,来确定惯性系与我们坐标系的关系,在本例中,惯性系与机械臂第一个关节坐标系相连。
4.使用Frame Transform进行坐标系之间的变换
注意:本文坐标系之间只考虑旋转变化,平移变化由Link实现,具体做法就是让Link的两端都是同一方向坐标系,再连接一个Transform
因第一个坐标系与惯性系之间不需要变换,故设置保持默认为none
第二个关节为第一个关节绕x1轴旋转-90°,故设置为
后面如法炮制,把每个关节坐标系之间的关系表示出来。
5.添加Link和关节
这一步就很简单了,主要是要注意Link两端的坐标系要与该Link首端关节坐标系一致,如果需要用到质心位置,则也要将质心位置的坐标系调整到与关节一致。可以设置Link的惯性参数,如果为了省事可以直接设置成由形状计算,只需要设定质量or密度即可。
关节则直接使用Joint模块,连接Transform和Link即可
全部连接上即可。
6.一些需要用到的参数的测量
6.1.两个关节之间的位置关系
使用Transform Sensor即可,注意设置测量参考坐标系,如果以该Link的首段关节坐标系为参考,则将模块的B连接至该坐标系,F连接目标坐标系,设置为Base即可。
6.2.质量、转动惯量测量
此功能只有2018以上才有,我每次测量这些量的时候,就切换至2019。
使用Inertia Sensor,同样需要设置参考系和Sensor Extent,Sensor Extent的说明就不翻译了,以关节为终点,可以参考官方文档https://ww2.mathworks.cn/help/physmod/sm/ref/inertiasensor.html
附录 控制器仿真报错
可能出现了除以0或者NAN等情况,如果确认程序算法没问题,可以通过调参数或者更换solver解决