Simscape Multibody 物理建模
文章目录
简介
以一个单摆为例说明如何进行物理建模。
一、创建模型
在MatLab命令行输入
smnew
打开一个新的simscape multibody项目
在命令行输入
sm_lib
打开Simscape Multibody block library选择自己想要添加的块
二、创建机械连接
-
块类型说明
- Rigid Transform(刚体变换)块:提供端坐标系。
- Solid(立体)块:提供几何(geometry),惯性(inertia),颜色(color)特性。
Rigid Transform块在Frame and Transform 下,Solid块在Body Element下。
-
连接块图
-
设置Solid block特性
- 左键快速单击solid block两次,在弹出的对话框中将参数设置为如下图所示:
将长宽高用变量LHW代替,密度用rho代替,颜色用rgb代替。这里出现错误是因为我们输入的变量未定义,将在下面定义。
-
设置Rigid Transform块
左键快速单击Rigid Transform block,在弹出的对话框中将参数设置为如下图所示:
- 将Rigid Transform 设置为如下图所示
- 将Rigid Transform1 设置为如下图所示
得到如下所示子系统:
6. ### 定义前面的参数
右键单击Subsystem,在弹出的对话框中选择 Mask > Create Mask
在弹出的对话框中选择 Parameters & Dialog,在左边的栏中添加五个 到 Parameters,然后将变量名改为前面输入的变量名
在右边栏Properties > value中将各变量值设置为如下所示
L**(cm)** | 20 |
---|---|
W**(cm)** | 1 |
H**(cm)** | 1 |
rho**(kg/m^3)** | 2700 |
rgb | [0.25,0.40,0.70] |
确定,然后在simulink界面中选择Simulation > Update Diagram,更新块图,得到如下图的立体
-
添加旋转部件
在matlab命令行输入
smnew
新建一个模型,删除不需要的块并将上述的Subsystem复制过来
从Simscape > Multibody > Joints 中添加一个 Revolute Joint(旋转节点)到图中,并连接成如下图所示
鼠标左键快速单击图中的solid block两次,在弹出的对话框中将其参数设置为如图所示
点击确定。
-
设置重力
旋转节点(Revolute Joint block)使用底座和从动件坐标系的公共Z轴作为旋转轴,为了让从动件在重力的作用下旋转,需要使重力矢量偏移Z轴。鼠标左键快速单击Mechanism Configuration block两次,在弹出的窗口中将重力设置为
[0 -9.81 0]
(-y方向)。 -
设置单摆起始位置
鼠标在左键快速单击Revolute Joint两次,在弹出的对话框中选择State Targets > Position进行设置,默认为水平。
选择确定。求解器用于模型可视化。
选择View convention将其设置为Y up (XY Front)
,保证重力与屏幕垂直对齐,选择view > standard view 中的一项来刷新视图。选择来保存设置。
-
运行模型
点击Simulation > Run,运行模型,将会看到单摆摆动
-
分析模型
-
添加以下块到模型
-
PS-Simulink Converter:在Simscape > Utilities
-
To Workspace:在Simulink > Sinks
如图
将文件另存为一个新文件 simple_pendulum_analysis。
-
-
摆角、角速度关于时间的函数
打开刚刚的文件 simple_pendulum_analysis ,然后选择Simulation > Run,在matlab命令行中输入以下命令
figure; % Open a new figure hold on; plot(q); % Plot the pendulum angle plot(W); % Plot the pendulum angular velocity
得出摆角(蓝色)与角速度(红色)关于时间的函数图像
-
无阻尼条件下摆角与角速度关系
在matlab命令行中输入以下命令
figure; plot(q.data, W.data);
得到函数图像:纵轴为角速度,横轴为摆角。
在 Revolute Joint block State 对话框的Targets> Position中设置不同的起始角:-80, -40, 0, 40和80 °,重复上述的命令得到不同起始角下摆角与角速度的关系
-
有阻尼下摆角与角速度关系
-
左键快速单击Revolute Joint block,在弹出的对话框中将 Internal Mechanics > Damping coefficient 设为8e-5(N*m)/(deg/s),确保State Targets > specify Position Target > Value为0(初始角为0)。
-
在matlab命令行输入以下命令
figure; hold on; plot(q); plot(w);
得到如下图所示摆角(蓝色)、角速度(红色)与时间的函数关系
-
在matlab命令行中输入以下命令
figure; plot(q.data, W.data);
得到摆角与角速度的关系
-
改变初始角为-240,-180, -120, -60, 0, and 60 °,重复上述命令可以得到如图:
-
有阻尼和激励下的单摆
-
左键快速单击Revolute Joint两次,在弹出来的对话框中设置Actuation > Torque为 `Provided by Input。
-
添加以下两个模块
-
Library Block Simscape > Utilities Simulink-PSConverter Simulink > Sources Sine Wave
连接成如下图所示
-
-
左键快速单击Sine Wave block 两次,在弹出的对话框中将Amplitude设置为
0.06
,在Revolute Joint block 对话框中将确认 State Targets > Position > Value为0。 -
运行仿真,在matlab命令行中输入以下命令画出摆角、角速度与时间的关系
figure; hold on; plot(q); plot(w);
如下图所示

-
在matlab命令行中输入以下命令画出摆角与角速度的函数关系
plot(q.data, W.Data);
-
Simscape刚体变换
一、创建坐标系
以一个L梁作为示例,在matlab命令行输入
smdoc_lbeam_inertia
将会弹出一个L梁的坐标关系图:
左键快速点击图中的立方体两次,弹出立体对话框
点击Frames左边的**“+”号,选择new frame**右边的加号,
会弹出一个坐标对话框
从上到下依次为:
-
坐标名称
-
坐标原点
-
主轴
-
副轴
按自己想要的设置即可。
二、添加立体到模型中
2. ### 选择Simscape下的Multibody:
将其中的solid拖到窗口中即可。
三、建立坐标系及刚体变换
-
将两个立方体连接起来,使立方体的世界坐标系在空间上是重合的
-
可视化立体坐标系:将Simscape >> Utilities >> Solver Configuration 拖到模型中,并与一个立方体连接
-
选择Simulation > Update Diagram更新流程图,将会打开Mechanics Explorer窗口
-
应用刚体变换:在Multibody>Frames and Transforms拖一个rigid Transform,将它连接到两个立体的中间,左键快速单击两次,在弹出对话框中选择
-
Rotation > Method to
Standard Axis
. -
Rotation > Axis to
-Z
. -
Rotation > Angle to
45
.
-
-
选择OK然后Simulation > Update Diagram更新流程图,如下图,完成了一个刚体转动变换。
- 点击Rigid Transform 可以看到,两个立体的坐标系原点和Z轴是重合的,X轴和Y轴彼此错开了45°。
- 将Translation > Method 设置为 Cartesian,Translation > Offset to
[1 1 0]
。
- offset数组表示相对于基础坐标系(Base Frame,就是与变换块**“B“**接口相连的立体坐标系)在x,y,z方向上的偏移量,后面的是单位。
3. 选择OK然后Simulation > Update Diagram更新流程图,如下图,完成了一个刚体平移变换。