基于Simulink的二轮平衡小车仿真
作者:@悠然儿
转载请注明出处:https://www.cnblogs.com/youraner/p/16134864.html
问题描述
现有一个Solidworks中的小车模型,如图所示。
现在需要在matlab中进行物理仿真,所以需要在matlab中建立物理模型,这里使用Simscape较为合适。
导入模型到matlab中
分别将车身(除轮子以外的部分)与车轮保存为stl或step格式。
在simulink中创建file solid,file为先前保存的车身、车轮。
建立模型
步骤
我们可以对首先建立一个与实际情况近似的模型,使机构基本能够工作,后续迭代可以逐渐增加模型的复杂度。建模步骤按照下述方法进行:
1.定义机构中的刚体
2.定义刚体之间的连接(关节、约束等)
3.孤立地考虑每一个刚体,建立刚体的简单近似模型。
4.利用关节/约束等组装刚体。
模型建立
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把这几个模块信号引出,再封装成子系统:
控制
直立控制
直立控制很简单,当摆杆向下运动的时候,受重力作用,摆杆会加速向下,那么怎么给摆杆一个反力呢,那就需要给下方的车一个同向的加速度,产生一个反力,这个反力应当包括回复力和阻尼力,其中为比例系数(阻尼力可以使摆尽快稳定):
在模型中表示就是:
然后就是调节PD参数的时候(I不管),不断调节,使小车能够稳定即可。
目前的效果:
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人