# 倒立摆
本文通过拖拽建模方式,创建多领域联合仿真模型。详细介绍如何创建简化的倒立摆模型。本文所使用的方法也适用于创建其他多领域联合仿真的模型。
# 案例分析
目标模型:倒立摆系统是一种经典的控制系统问题,通过 PID 控制方法,调整比例、积分和微分系数来控制小车的运动保持摆杆运动姿态稳定。它广泛应用于两轮自平衡机器人、火箭发射姿态控制以及自动运输小车稳定控制等领域。
在忽略空气阻力和各种摩擦的情况下,可以将直线一级倒立摆系统抽象为由小车和匀质杆组成的系统。在创建简单倒立摆模型时,需要用到 9 个 Sysplorer 组件,这些组件分别代表物体等效刚体、传感器、外力和控制器元件。本示例中的组件均内置于 Modelica 标准库中的 Blocks 和 Mechanics 子库。具体案例简图和模型如下所示:

在模型中使用的组件列表如下所示:
| 组件 | 路径 |
|---|---|
| world | Modelica.Mechanics.MultiBody.World |
| fixed | Modelica.Mechanics.MultiBody.Parts.Fixed |
| prismatic | Modelica.Mechanics.MultiBody.Joints.Prismatic |
| bodyShape | Modelica.Mechanics.MultiBody.Parts.BodyShape |
| bodyShape1 | Modelica.Mechanics.MultiBody.Parts.BodyShape |
| revolute | Modelica.Mechanics.MultiBody.Joints.Revolute |
| angleSensor | Modelica.Mechanics.Rotational.Sensors.AngleSensor |
| PID1 | Modelica.Blocks.Continuous.PID |
| force | Modelica.Mechanics.Translational.Sources.Force |
# 构建模型
在构建模型时,需要根据分析模型得到的目标选择合适的组件模型,确定其连接关系,并将该案例的参数和模型参数联系起来。
# 新建模型
进入文件 > 新建 Modelica 模型 > model…,在新建模型面板中,填写模型名为“InversePendulum”,描述为“倒立摆”,其他为默认选项,选择模型文件存储位置后,单击确定,完成模型创建。
# 将组件添加到模型
完成模型创建后,开始构建模型,请浏览模型库Modelica.Mechanics和Modelica.Blocks并添加组件。
从
Modelica.Mechanics.MultiBody模型库中,将World组件拖到右侧图形视图中;
使用相同的方法将以下组件添加到模型中,并根据物理拓扑关系排列组件。

# 连接组件
单击组件接口,按住鼠标左键,拖动鼠标至另一个组件接口;

为保证相连接口中的变量一致,可以连接,请单击选中
revolute组件,单击界面左下方组件参数,将useAxisFlange参数置为 true,组件参数面板默认位于主界面左下侧,若未显示,在 Sysplorer 底部边框右击,勾选组件参数;
设置完成后,用同样的方法设置
prismatic组件,并依次连接组件的各个接口。
# 设置参数
根据倒立摆的物理属性和控制逻辑,设置模型参数。
设置小车为等效长方体
bodyshape,其质量为 0.2 kg,长度为 0.5 m;因为默认平面为 xy 平面,所以小车的长度和质心参数都设置为 {x,y,z} 中的 x 向量。
提示
均值长方体质心位置是长度的一半。

使用相同的方法依次修改其余组件的参数。
组件 参数名称 参数数值 参数单位 bodyShape animateSphere(是否显示球体) false / bodyShape shapeType(动画类型) "box" / revolute phi.start(初始角度) -20(fixed=true) deg bodyShape1 animateSphere(是否显示球体) false / bodyShape1 r(b 接口到 a 接口的矢量) {0,0.2,0} m[3] bodyShape1 r_CM(质心到 a 接口的矢量) {0,0.1,0} m[3] bodyShape1 m(物体质量) 0.05 kg bodyShape1 I_11(转动惯性矩 I11) 0.003 kg.m2 bodyShape1 I_22(转动惯性矩 I22) 0.003 kg.m2 bodyShape1 I_33(转动惯性矩 I33) 0.003 kg.m2 PID1 K(比例系数) -0.25*9.81*2 1 PID1 Ti(积分系数) 10 s PID1 Td(微分系数) 0.2 s
# 绘制图标
模型构建完成之后,可以为模型绘制图标,让模型更加直观。具体操作步骤如下:
右击模型编辑窗口空白处,单击图标,切换到图标视图;
在主页面切换到编辑页签,选择所需的图形进行图标绘制;

单击选中所绘图形,为图形添加填充颜色及样式。

# 仿真模型
在完成模型构建后,可对模型进行检查、翻译、仿真工作,分步验证模型,并得到最终的仿真结果。
# 检查模型
通过检查模型,分析模型是否存在错误。可以进行仿真的模型需符合以下条件:
- 模型中不存在语法或其他错误。错误信息必须修改,警告仅起提示作用,可不修改;
- 模型完备,变量数和方程数相等。
进入主页 > 检查,查看检查输出页面的提示信息。
提示
如出现错误提示:当前授权不允许变量方程数大于 300,请获取 License 使用许可。
# 翻译模型
通过模型翻译,分析模型是否可转化为可执行文件。如无错误翻译信息,则将模型转化为可执行文件。
进入主页 > 翻译,查看翻译输出信息,出现翻译完毕证明模型翻译正常。
# 仿真设置
进入主页 > 仿真设置,根据需求选择仿真区间、积分算法等,设置完成后,单击确定并保存到模型。
开始时间:仿真开始,此处设置为 0 秒;
终止时间:仿真结束,此处设置为 10 秒;
步长:仿真输出点之间的间隔长度,此处设置步长为 0.001;
步数:仿真生成的输出间隔的数目(步长和步数设置一个即可);
类型:此处积分算法类型为变步长;
算法:此处使用 Dassl 算法;
精度:指定每个仿真步长的局部精度,此处设置为 1e-6;
初始积分步长:Dassl 算法为变步长算法,默认积分步长为初始积分步长;
确定并保存到模型:对于可修改的模型,可以将仿真设置中的常规设置保存到模型中。
# 运行仿真
单击仿真,进行模型仿真。在结果查看器可查看模型仿真进度。
仿真结束后可查看模型输出信息。
# 查看结果
仿真结束后,在结果查看器可查看组件变量的变化曲线。如果模型是机械多体模型,可以查看模型的三维动画。
# 查看曲线
在视图栏选择视图布局方式,可以得到 2 个曲线窗口。先单击 y(t)-1 曲线窗口,然后单击左侧变量bodyShape1.frame_b.r_0[1];再单击 y(t)-2 曲线窗口,然后单击左侧变量bodyShape1.frame_b.r_0[2],即可查看变量随时间的变化曲线。
# 三维动画显示
对于机械多体系统,仿真成功后,Sysplorer 提供三维动画的创建和播放等功能。
打开动画窗口,单击播放,查看生成的单摆三维动画。
# 仿真结果分析
从查看结果部分的曲线结果和动画可以看出,通过对倒立摆模型 10 s 仿真计算,可知倒立摆模型在 2 s 内通过 PID 控制完成姿态调整,摆杆在后续时间始终保持竖直状态,完成对摆杆姿态的稳定控制。