转载请注明出处,谢谢
原创作者:MingruiYU
原创链接:https://www.cnblogs.com/MingruiYu/p/12305851.html
本文要点:
- Simscape Multibody 简介
- Simscape Multibody 入门学习的推荐学习材料和学习顺序
- 建模仿真过程中的重要知识
- 模型的参数设置(Model Workspaces)
- 模型求解器(Solver)的选择
写在前面
对于MATLAB系列的所有产品,个人认为最好的学习材料都是 MathWorks 公司提供的官方文档,非常清晰,也非常详尽。本文的大部分内容也都是基于官方文档,我也极力推荐大家以阅读官方文档为先(阅读英文版更好)。但个人学习过程中感觉学习官方文档可能存在的问题是:文档特别多,不知道该从哪个页面入手,学习顺序应该怎样。所以在这里,我会对我探索后觉得比较合适的阅读学习顺序进行梳理。
我开始学习使用Simscape Multibody的契机是最近要做一个关于线状柔性体 (Deformable Linear Object) 操作控制的项目,需要首先对柔性体进行物理建模。物理建模首选当然是找一找有没有现成的仿真平台可以使用,经过调研和查找之后,发现在 Simulink 环境中有一个叫作 Simscape 的模块,其中的 Simscape Multibody 模块似乎可以达成这个目的。于是开始学习 Simscape 和 Simscape Multibody,并探索如何使用它对线状柔性体进行简单的仿真。现在这个仿真的 demo 已经基本做出来了,如何对线状柔性体进行仿真我将会在以后的文章中进行介绍,本文用来介绍一下如何入门 Simscape Multibody 模块。
对于Simulink我就不过多介绍了,进入大学,一定会使用到 MATLAB ,也一定会听说过 Simulink。Simulink 是一个超级超级强大的仿真平台,除了生孩子啥都能干(笑)。对于 Simulink 的学习,首先建议阅读 Simulink 官方文档,另外如果想深入学习 Simulink 作为以后安身立命的家伙事儿的话,可以阅读《Simulink仿真及代码生成技术入门到精通》书籍。
Simscape Multibody 简介
Simscape 是 Simulink 的一个模块,而 Simscape Multibody 又是 Simscape 的一个模块。其关系如下:(官方介绍)
- Simulink:一个模块图环境,用于多域仿真以及基于模型的设计。它支持系统级设计、仿真、自动代码生成以及嵌入式系统的连续测试和验证。Simulink 提供图形编辑器、可自定义的模块库以及求解器,能够进行动态系统建模和仿真。Simulink 与 MATLAB 相集成,这样您不仅能够在 Simulink 中将 MATLAB 算法融入模型,还能将仿真结果导出至 MATLAB 做进一步分析。
- Simscape: 可让您在 Simulink 环境中迅速创建物理系统的模型。通过 Simscape,您可以基于物理连接直接相连模块框图建立物理组件模型。通过将基础组件依照原理图装配,为电机、桥式整流器、液压致动器和制冷系统等系统建模。Simscape 附加产品提供了更多复杂组件和分析功能。
- Simscape Multibody: (前身为 SimMechanics)提供了适用于 3D 机械系统(例如机器人、汽车悬架、建筑设备和飞机起落架)的多体仿真环境。您可以使用表示刚体、关节、约束、力元件和传感器的模块对多体系统进行建模。Simscape Multibody 会建立整个机械系统的运动方程并进行求解。您可将完整的 CAD 装配件(包括质量、惯性、关节、约束和 3D 几何结构)导入到模型。您可在自动生成的 3D 动画中查看系统动态。Simscape Multibody 可帮助您开发控制系统并测试系统级性能。
- Simscape: 可让您在 Simulink 环境中迅速创建物理系统的模型。通过 Simscape,您可以基于物理连接直接相连模块框图建立物理组件模型。通过将基础组件依照原理图装配,为电机、桥式整流器、液压致动器和制冷系统等系统建模。Simscape 附加产品提供了更多复杂组件和分析功能。
简言之,Simscape 是以非常直观的形式对物理系统进行仿真的,而 Simscape Multibody 是其中专门用来对机械系统进行仿真。官方有一个视频简介,可以让你很直观地了解 Simscape Multibody 的作用。我感觉,它区别于 Simscape 基础模块的一个重要内容就是,它可以在三维空间进行仿真,并且可以给出渲染后的三维系统。
注: 我现在使用的 MATLAB 版本是 R2019b(最新版),在我学习的过程中发现,像 Simscape Multibody 这种比较新的工具模块,更新是比较多的。我之前用的是 R2018a,发现其中很多内容和最新的官方文档都不完全一样(例如选项的位置,机械部件的种类等)。所以,在大家学习的过程中,非常建议将自己的 MATLAB 版本更新至与官方文档一致。
Simscape Multibody 入门学习
那么,如何来学习 Simscape Multibody 呢?我个人认为,以下的入门学习流程是比较合适的:
- 通过官方文档中的例子初步了解 Simscape
- 通过官方文档中的例子初步了解 Simscape Multibody
- (根据需要,阅读其它的官方文档)
- 通过官方提供的 examples 进行学习
通过例子初步了解 Simscape
既然 Simscape Multibody 是 Simscape 的一个子模块,那当然要先了解一下 Simscape 了。建议通过官方文档中的一个例子来了解:Essential Steps for Constructing a Physical Model。这个例子讲了如何建立一个质点-弹簧-阻尼(Mass-Spring-Damper)系统,并对其进行 PID 控制。这个例子非常详细,即使之前完全没有用过 Simulink,也可以根据教程进行操作,非常适合用来入门,通过例子来对 Simscape 进行形象直观的了解。
通过例子初步了解 Simscape Multibody
Simscape 基础模块大概了解一下就可以了,下面直接进入对于 Simscape Multibody 的学习。还是推荐通过官方文档中的例子来了解:Getting Started with Simscape Multibody。这个例子分四步介绍了如何从零开始,建立一个单摆的仿真模型。
通过学习该示例教程,可以简单体会 Simscape Multibody 的思想,以及建模仿真的基本流程。以后遇到更复杂的模型,都是在这种简单模型的基础上,一点点叠加构成的。所以掌握好这个例子,就可以为之后学习更复杂的例子,打下很好的基础。
注: 在跟随该教程建立了一个单摆的仿真模型后,我建议,可以直接在该模型的基础上,自己动手实践,将其升级为一个双摆模型,并进行仿真实验。以此简单检验自己的掌握程度,锻炼自己的操作水平。
(根据需要,阅读其它的官方文档)
除了 Getting Started 之外, Simscape Multibody 的官方文档 还包括很多很多的内容。但是我个人感觉,其它的内容比较细致,也比较杂。按顺序阅读是不太现实的。建议等到需要用什么功能、什么模块的时候,再按需求查阅,进行学习。在官方文档页面的右上角搜索栏,输入需要搜索的内容,可以很方便的检索到相关的文档。
通过官方提供的 examples 进行学习
官方文档的阅读是需要不断进行的,但不动手实践,没有示例支持,学习官方文档是艰涩的。Simscape Multibody 提供了很多个 Examples,个人感觉,通过这些已建立好的模型进行学习,是特别直观和有效的(就好像刷点题之后,对概念的理解会更加深入)。
点进某一个模型后,有对这个模型的简单介绍。再点击页面右上角View MATLAB Command
图标,会显示该模型的命令,在MATLAB软件的命令行窗口中输入该命令,就可以直接大概该模型的Simulink界面。
对官方模型的每一个细节都好好研究一番,对建立自己的模型是非常有帮助的。同时,Examples 中的模型的复杂程度也是由简入繁,适合循序渐进的学习。后面的模型已经很复杂了,大家可以根据自己的情况,研究到自己觉得够用了就可以了。
自此,对于 Simscape Multibody 的入门学习基本就完成了。我学完这些内容大概用了两天时间(因为在探索怎么学,所以效率较低),相信大家的学习速度肯定会快很多。
建模仿真过程中的重要知识
下面记录一些自己在学习建模仿真过程中,觉得比较基础也比较重要,有必要展开了详细学习的内容。我也是刚刚开始探索和学习,这也是我掌握程度不断提升的过程。
这些知识的列举顺序,大概就是我在学习和实践中遇到这些问题的顺序,所以对大家应该也有些参考价值。
依然是以官方文档为最高参考资料。
模型中的参数设置
模型中肯定少不了参数,那么怎么对模型中的参数进行设置(或者说,模型中的参数是从哪里读取的)呢?
模型中的参数是存储在 model workspaces 中的。就像 MATLAB 有工作区(Base Workspaces)一样,每一个模型也有自己的工作区。model workspaces 的相关介绍: (https://ww2.mathworks.cn/help/simulink/ug/using-model-workspaces.html?lang=en),页面下方的 Related topics 中有更详细的介绍。
关于如何更改 model workspaces 中存储的 data,参考文档:(https://ww2.mathworks.cn/help/simulink/ug/change-model-workspace-data.html?lang=en)。
求解器(Solver)的设置
系统的仿真,必然是需要微分方程的求解的。在 Simulink 中, 微分方程的求解是自动完成的,但是需要自己选择合适的求解器(Solver),并设置合适的求解器参数。
关于如何选择合适的求解器,参考文档:(https://ww2.mathworks.cn/help/simulink/gui/solver.html)。
一般来说:
- 首先尝试 ode45
- ode45 失败或低效,则尝试 ode15s(最适合刚性问题)
- ode15s 难以处理的问题,可尝试 ode23t(容差较宽松的条件下,更高效)
持续学习和更新中 ……