58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!

640?wx_fmt=gif

 

640?wx_fmt=jpeg

作者 | 安布奇

责编 | 胡巍巍

本文干货满满,主要以一个单摆为例,讲述如何进行物理建模。58张实操图,手把手带你学会Simscape Multibody物理建模与刚体变换!

 

 

640?wx_fmt=png

创建模型

 

在MatLab命令行输入smnew,打开一个新的simscape multibody项目。

640?wx_fmt=png

在命令行输入sm_lib,打开Simscape Multibody block library选择自己想要添加的块。

640?wx_fmt=png

 

 

640?wx_fmt=png

创建机械连接

 

块类型说明:

Rigid Transform(刚体变换)块:提供端坐标系。

Solid(立体)块:提供几何(geometry),惯性(inertia),颜色(color)特性。

Rigid Transform块在Frame and Transform 下,Solid块在Body Element下。

连接块图:

640?wx_fmt=png

设置Solid block 特性:

左键快速单击solid block两次,在弹出的对话框中将参数设置为如下图所示:

640?wx_fmt=png

将长宽高用变量LHW代替,密度用rho代替,颜色用rgb代替,方便修改参数。这里出现错误是因为我们输入的变量未定义,将在下面定义。

640?wx_fmt=png

设置Rigid Transform块:

左键快速单击Rigid Transform block,在弹出的对话框中将参数设置为如下图所示:

将Rigid Transform 设置为如下图所示:

640?wx_fmt=png

将Rigid Transform1 设置为如下图所示:

640?wx_fmt=png

生成子系统:

同时选中Rigid Transform,Rigid Transform1和solid block,在高亮的地方右键选择Create Subsystem from Selection:

640?wx_fmt=png

 得到如下所示子系统:

640?wx_fmt=png

定义前面的参数:

右键单击Subsystem,在弹出的对话框中选择 Mask > Create Mask。

640?wx_fmt=png

在弹出的对话框中选择 Parameters & Dialog,在左边的栏中添加五个        640?wx_fmt=png       到 Parameters,然后将变量名改为前面输入的变量名。

640?wx_fmt=png

在右边栏Properties > value中将各变量值设置为如下所示:

640?wx_fmt=png

确定,然后在simulink界面中选择Simulation > Update Diagram,更新块图,得到如下图的立体:

640?wx_fmt=png

添加旋转部件:

在matlab命令行输入smnew,新建一个模型,删除不需要的块并将上述的Subsystem复制过来。

640?wx_fmt=png

从Simscape > Multibody > Joints 中添加一个 Revolute Joint(旋转节点)到图中,并连接成如下图所示:

640?wx_fmt=png

鼠标左键快速单击图中的solid block两次,在弹出的对话框中将其参数设置为如图所示:

640?wx_fmt=png

点击确定。

设置重力:

旋转节点(Revolute Joint block)使用底座和从动件坐标系的公共Z轴作为旋转轴,为了让从动件在重力的作用下旋转,需要使重力矢量偏移Z轴。鼠标左键快速单击Mechanism Configuration block两次,在弹出的窗口中将重力设置为[0 -9.81 0](-y方向)。

640?wx_fmt=png

 

设置单摆起始位置:

鼠标在左键快速单击Revolute Joint两次,在弹出的对话框中选择State Targets > Position进行设置,默认为水平。 

640?wx_fmt=png

配置求解器:

在simulink中选择Simulation > Model Configuration Parameters,配置为如下图所示:

640?wx_fmt=png

选择确定。

组装模型:

选择Simulation > Update diagram,得到如图所示的模型。

640?wx_fmt=png

选择View convention将其设置为Y up (XY Front),保证重力与屏幕垂直对齐,选择view > standard view 中的一项来刷新视图。选择        640?wx_fmt=png      来保存设置。

运行模型:

点击Simulation > Run,运行模型,将会看到单摆摆动。

分析模型:

测量单摆运动:左键快速单击Revolute Joint block两次,在弹出的对话框中选择Sensing 下的Position 和Velocity。

640?wx_fmt=png

添加以下块到模型:

PS-Simulink Converter:在Simscape > Utilities

To Workspace:在Simulink > Sinks

如图:

640?wx_fmt=png

将文件另存为一个新文件 simplependulumanalysis。

摆角、角速度关于时间的函数:

打开刚刚的文件 simplependulumanalysis ,然后选择Simulation > Run,在matlab命令行中输入以下命令:

 
figure; % Open a new figure	
hold on;plot(q); % Plot the pendulum angleplot(W); % Plot the pendulum angular velocity
hold on;

plot(q); % Plot the pendulum angle

plot(W); % Plot the pendulum angular velocity

得出摆角(蓝色)与角速度(红色)关于时间的函数图像:

640?wx_fmt=png

无阻尼条件下摆角与角速度关系

在matlab命令行中输入以下命令:

 
figure;	
plot(q.data, W.data);
plot(q.dataW.data);

得到函数图像:纵轴为角速度,横轴为摆角。

640?wx_fmt=png

在 Revolute Joint block State 对话框的Targets> Position中设置不同的起始角:-80, -40, 0, 40和80 °,重复上述的命令得到不同起始角下摆角与角速度的关系:

640?wx_fmt=png

有阻尼下摆角与角速度关系:

左键快速单击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);
hold on;

plot(q);

plot(w);

得到如下图所示摆角(蓝色)、角速度(红色)与时间的函数关系:

640?wx_fmt=png

在matlab命令行中输入以下命令:

 
figure;	
plot(q.data, W.data);
plot(q.dataW.data);

得到摆角与角速度的关系。

640?wx_fmt=png

改变初始角为-240,-180, -120, -60, 0, and 60 °,重复上述命令可以得到如图:

640?wx_fmt=png

有阻尼和激励下的单摆:

左键快速单击Revolute Joint两次,在弹出来的对话框中设置Actuation > Torque为 `Provided by Input。

添加以下两个模块:

640?wx_fmt=png

连接成如下图所示:

640?wx_fmt=png

左键快速单击Sine Wave block 两次,在弹出的对话框中将Amplitude设置为0.06,在Revolute Joint block 对话框中将确认 State Targets > Position > Value为0。

运行仿真,在matlab命令行中输入以下命令画出摆角、角速度与时间的关系:

 
figure;hold on;plot(q);plot(w);

hold on;

plot(q);

plot(w);

如下图所示:

640?wx_fmt=png

在matlab命令行中输入以下命令画出摆角与角速度的函数关系:

 
plot(q.data, W.Data);q.dataW.Data);

如下图所示:

640?wx_fmt=png

 

640?wx_fmt=png

 

Simscape刚体变换

 

 

创建坐标系:

以一个L梁作为示例,在matlab命令行输入smdoc_lbeam_inertia。

将会弹出一个L梁的坐标关系图:

640?wx_fmt=png

左键快速点击图中的立方体两次,弹出立体对话框:

640?wx_fmt=png

点击Frames左边的“+”号,选择new frame右边的加号。

640?wx_fmt=png

会弹出一个坐标对话框。

640?wx_fmt=png

从上到下依次为:

  • 坐标名称

  • 坐标原点

  • 主轴

  • 副轴

按自己想要的设置即可。

这几个Python技能实战,能让你少些1000行代码!

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

 

640?wx_fmt=png

添加立体到模型中

 

打开simulink:

640?wx_fmt=png

选择Simscape下的Multibody:

640?wx_fmt=png

将默认存在的块体删除,选择Library Browser >> Simscape >> Multibody >> Body Elements:

640?wx_fmt=png

640?wx_fmt=png

将其中的solid拖到窗口中即可。

640?wx_fmt=png

 

640?wx_fmt=png

建立坐标系及刚体变换

 

刚体转动变换:将两个立方体连接起来,使立方体的世界坐标系在空间上是重合的。

640?wx_fmt=png

可视化立体坐标系:将Simscape >> Utilities >> Solver Configuration 拖到模型中,并与一个立方体连接:

640?wx_fmt=png

选择Simulation > Update Diagram更新流程图,将会打开Mechanics Explorer窗口

640?wx_fmt=png

应用刚体变换:在Multibody>Frames and Transforms拖一个rigid Transform,将它连接到两个立体的中间,左键快速单击两次,在弹出对话框中选择:

Rotation > Method to Standard Axis.

Rotation > Axis to -Z.

Rotation > Angle to 45.

640?wx_fmt=png

选择OK然后Simulation > Update Diagram更新流程图,如下图,完成了一个刚体转动变换。

640?wx_fmt=png

点击Rigid Transform 可以看到,两个立体的坐标系原点和Z轴是重合的,X轴和Y轴彼此错开了45°。

平动变换:将Translation > Method 设置为 Cartesian,Translation > Offset to [1 1 0]。

640?wx_fmt=png

offset数组表示相对于基础坐标系(Base Frame,就是与变换块“B“接口相连的立体坐标系)在x,y,z方向上的偏移量,后面的是单位。

640?wx_fmt=png

选择OK然后Simulation > Update Diagram更新流程图,如下图,完成了一个刚体平移变换。

640?wx_fmt=png

作者简介:单雨,90后工科男,伪文艺青年。目前就读于北京理工大学宇航系,喜欢研究AI,网络爬虫,微信小程序以及机器人,痴迷于Coding,睡前必撸码。

【End】

640?wx_fmt=jpeg

 热 文 推 荐 

为什么超 80% 的开源开发者苦苦挣扎在贫困线?

☞麒麟 810 实体芯片亮相;1325 个安卓应用私自搜集数据;Linux Kernel 5.2 发布 | 极客头条

人工智能 60 年技术简史

☞2019年技术盘点容器篇(三):阿里专家谈容器:既叫好又叫座? | 程序员硬核评测

☞微软洪小文:AI将成为人类未来最好的左脑

6月Top 20榜单出炉啦! 万万没想到区块链大佬竟在忙这个...

☞干货 | Python后台开发的高并发场景优化解决方案

☞泪目!Linux之父:我就是觉得苹果太没意思!

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

Docker是一种流行的容器化技术,通过轻量级、隔离性强的容器来运行应用程序。下面我将通过十张图,带你深入理解Docker容器和镜像。 1. 第一张图展示了Docker容器和镜像的关系。镜像是Docker的基础组件,它是一个只读的模板,包含了运行应用程序所需的所有文件和配置。容器是从镜像创建的实例,它具有自己的文件系统、网络和进程空间。 2. 第二张图展示了Docker容器的隔离性。每个容器都有自己的文件系统,这意味着容器之间的文件互不干扰。此外,每个容器还有自己的网络和进程空间,使得容器之间的网络和进程相互隔离。 3. 第三张图展示了Docker镜像和容器的可移植性。镜像可以在不同的主机上运行,只需在目标主机上安装Docker引擎即可。容器也可以很容易地在不同的主机上迁移,只需将镜像传输到目标主机并在其上创建容器。 4. 第四张图展示了Docker容器的快速启动。由于Docker容器与主机共享操作系统内核,启动容器只需几秒钟的时间。这使得快速部署和扩展应用程序成为可能。 5. 第五张图展示了Docker容器的可重复性。通过使用Dockerfile定义镜像构建规则,可以确保每次构建的镜像都是相同的。这样,可以消除由于环境差异导致的应用程序运行问题。 6. 第六张图展示了Docker容器的资源隔离性。Docker引擎可以为每个容器分配一定数量的CPU、内存和磁盘空间,确保容器之间的资源不会互相干扰。 7. 第七张图展示了Docker容器的可扩展性。通过使用Docker Swarm或Kubernetes等容器编排工具,可以在多个主机上运行和管理大规模的容器群集。 8. 第八张图展示了Docker镜像的分层结构。镜像由多个只读层组成,每个层都包含一个或多个文件。这种分层结构使得镜像的存储和传输变得高效。 9. 第九张图展示了Docker容器的生命周期。容器可以通过创建、启动、停止和销毁等命令来管理。这使得容器的维护和管理变得简单。 10. 第十张图展示了Docker容器的应用场景。Docker容器广泛应用于开发、测试、部署和运维等领域。它可以提供一致的开发和运行环境,简化了应用程序的管理和交付过程。 通过这十张图,希望能让大家更深入地理解Docker容器和镜像的概念、特性和应用。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSDN资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值