1. 问题描述
现有一个Solidworks中的小车模型,如图所示。
现在需要在matlab中进行物理仿真,所以需要在matlab中建立物理模型,这里使用Simscape较为合适。
2.导入模型到matlab中
分别将车身(除轮子以外的部分)与车轮保存为stl或step格式。
在simulink中创建file solid,file为先前保存的车身、车轮。
3.建立模型
3.1步骤
我们可以对首先建立一个与实际情况近似的模型,使机构基本能够工作,后续迭代可以逐渐增加模型的复杂度。建模步骤按照下述方法进行:
1.定义机构中的刚体
2.定义刚体之间的连接(关节、约束等)
3.孤立地考虑每一个刚体,建立刚体的简单近似模型。
4.利用关节/约束等组装刚体。
3.2模型建立
1)理论模型
图1 理论模型图
平衡车可以看成一个倒立摆,车轮与车体之间由转动副连接,车轮与地面之间相当于一个移动副(棱柱副)。
需要注意两个细节:
转动副和移动副会提供一个自由度,这个自由度必须沿成这样,它连接两个刚体,转轴必须是z轴,所以应当做好连接部分的坐标变换,使得连接处的转轴为z轴。这个非常重要!!
revolute joint prismatic joint
现在我们在matlab命令行输入smnew建一个模板,如图所示。
2)车体
车体需要提供一个连接口,位置在图1中的ro处,以便与轮子用转动副连接,这个需要用Rigid Transform来实现,这个模块就是用来变换坐标的,B为Base frame(基本构架),F为follower frame(下一个构架)。
不论怎么变换,最后注意z轴与转轴方向一致,如图所示:
提示一下,可以连接到世界坐标系运行,这样可以看到模型,方便调整,弄完后封装为子系统(Subsystem)全都选中就可以封装,如果有兴趣,还可以右键->Mask弄一个小界面,最后就像这样。
3)车轮
车轮要提供两个接口,一个用于连接棱柱副,车体的移动方向要为z轴,一个用于连接转动副,轮子的转动轴要为z轴。
封装好后:
4)连接成整体模型
这里我们为了进行PID控制,要在转动副上添加传感器,在移动副上施加力。
用input port 和output port把这几个模块信号引出,再封装成子系统:
4.控制
4.1 直立控制
直立控制很简单,当摆杆向下运动的时候,受重力作用,摆杆会加速向下,那么怎么给摆杆一个反力呢,那就需要给下方的车一个同向的加速度,产生一个反力,这个反力应当包括回复力$k_1{/theta}$和阻尼力$k_2{/theta}^{/prime}$,其中$k_1,k_2$为比例系数(阻尼力可以使摆尽快稳定):
在模型中表示就是:
然后就是调节PD参数的时候(I不管),不断调节,使小车能够稳定即可。
目前的效果:
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/245426.html