热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SimscapeMultiby学习笔记7——Multibody仿真实例2双曲柄瞄准系统

文章目录一.建立和封装零件(一)建立杆件A(二)建立杆件B(三)建立滑块C(四&#


文章目录

  • 一. 建立和封装零件
    • (一)建立杆件A
    • (二)建立杆件B
    • (三)建立滑块C
    • (四)建立杆件D
  • 二. 修改坐标系
    • (一)修改D的坐标系
    • (二)修改B的坐标系
    • (三)修改A的坐标系
    • (四)修改C的坐标系
  • 三. 装配(连接坐标系)
  • 四. 施加驱动力和增加传感器
  • 五. 设计控制器
  • 六. 仿真分析



经过了前面的讲解,我们其实可以总结出Multibody中建模的规律了。这里给出我的理解(分析和建模的顺序)

第一步,建立零件并封装零件,这一步里面包括要把需要的坐标系建立出来(坐标系的目的是为了装配,即自由度约束)。这一步就类似于SolidWorks中的建立零件

第二步,修改坐标系,这一步是SolidWorks中没有的,我也是把Multibody弄明白之后反过来理解了SolidWorks的背后装配思路,其实就是坐标系连接,只不过SolidWorks里面是后台操作的,我们看不到这些东西。这一步相当于SolidWorks中装配的第一步。

第三步,装配,即连接坐标系。这一步里面需要增加关节,然后把所有的零件和关节头连尾巴、头连尾巴、头连尾巴,这样子连起来就行了。这一步相当于SolidWorks中装配的第二步。

第四步,施加驱动力和增加传感器。前三步完成了建模,从第四步开始加力和传感器,这样就实现了驱动和数据输出。

第五步,设计控制器。

第六步,仿真分析。

下面我们以Matlab官方的一个双曲柄瞄准机构的建模为例讲解。

img


一. 建立和封装零件

这个例子中包含四个构件,摇杆A,摇杆B,滑块C和大地D。初学时我们做一些简化,大地我们简化成一个杆件,这个杆件在装配的时候和大地固连。A和B从图里面看有孔,我们也忽略,按照前面建立单摆模型时一样,直接让他们干涉连接,最后的效果像下面这个样子。
在这里插入图片描述


(一)建立杆件A

A和D之间是铰接的关系,有一个转动自由度,A和C之间是滑动连接,有一个滑动自由度。所以在A上面我们要建立两个新的坐标系。

使用smnew新建一个Multibody文件,里面的默认组件先不管他。

拖进来一个Cylindrical Solid,命名为Link A,增加两个Rigid Transform,改名如下图 ,增加两个Connection Port,命名Fad和Fac,像下面这样子连起来(注意B都是朝里的,两个坐标系的B连接brick的B)
在这里插入图片描述
然后框选上面的组件,右键Create Subsystem
在这里插入图片描述

多出来的外面的这俩端口删掉,命名为rigid body A
在这里插入图片描述
变成这样
在这里插入图片描述
下面我们指定一下A的尺寸、密度、颜色。
在这里插入图片描述
注意看,右边的预览,轴向方向是沿着Z轴的。前面建立装配体(笔记4)那一篇我重点提醒了,所有的旋转关节转轴都是沿着Z轴的,滑动关节都是沿着Z轴的。 所以,连接处的坐标系必须进行旋转。这一步我们放到后面统一做


(二)建立杆件B

B的形状和A是一样的,不过B两个端部都是转动关节。
我们把刚才建立A的Subsystem直接复制一个,命名为rigid body B。然后双击进去把名字全都改一下
在这里插入图片描述
然后双击Link B,修改属性
在这里插入图片描述


(三)建立滑块C

滑块C一样的,我们复制一个刚才的rigid body A子系统,命名为rigid body C,双击进去。由于C是个滑块,我们要把Cylindrical Solid删掉,换成一个Brick Solid,然后全部重新命名,如图所示。
在这里插入图片描述
然后双击Link C,修改属性
在这里插入图片描述


(四)建立杆件D

杆件D也是回转体,和A、B形状是一样的,但是D除了与A、与B铰接之外,还要与地球固连,所以要给他新建一个坐标系。我们直接复制一个Rigid Body A过来,命名为Rigid Body D,双击进去,修改名字。
在这里插入图片描述
然后双击Link D,修改属性
在这里插入图片描述

现在我们的文件里面包含了四个杆件了

把大小和位置调整一下,像下面这个样子
在这里插入图片描述


二. 修改坐标系

下面是重点了,怎么旋转坐标系。

我们刚才已经把坐标系建立进去了,但现在里面没有设置,默认没有旋转,也没有平移,也就是说新建立的坐标系和零件的基坐标系重合(基坐标系R一般是几何中心)。

下面我们开始修改坐标系。修改坐标系我是按照装配关系来的,也就是先改D(和大地连接),再改A,再B,最后改C。


(一)修改D的坐标系

展开D零件,双击World Frame Transform,修改如下。把这个坐标系移动到头上面,然后绕Y轴旋转-90°。注意Fdw是要接到地理坐标系的,也就是地理坐标系绕着D的Y轴转-90度,那么反过来D绕着地理坐标系的Y轴转+90度。

以上这句话请深刻理解。
在这里插入图片描述
退出去,把A、B、C comment out(注释掉)操作如下:
在这里插入图片描述
然后把地理坐标系与D连起来,
在这里插入图片描述

运行一下,结果是这样的。请重点看这个图,Fdw与世界坐标系(左下角显示)是固连的,Fdw与D的极坐标系(在杆件的重心)的关系就是我们刚才设定的,沿Z轴平移半个长度,绕Y轴旋转-90度。

我们做的这件事其实就是把D给横过来。
在这里插入图片描述
好了,现在回头再双击进入rigid body D,修改两个Hole FrameTransform。我们还是看上面这个图,我们要把两个Hole FrameTransform的z轴转到地理-y轴这个朝向。所以修改方法为,绕x轴旋转90度。
在这里插入图片描述
在这里插入图片描述

再次运行,看看结果,图示就是left Hole FrameTransform坐标系。z轴已经转过来了,与设定的一致。点一下左侧浏览器的right Hole FrameTransform,可以看到在尾巴上也有一个坐标系了,朝向和这个一样。
在这里插入图片描述


(二)修改B的坐标系

经过刚才的讲解,我们已经知道套路了,对于B,依然要把两个关节坐标系Z轴转过来。

修改方法这样的,还是绕X轴旋转90度,两个都是。
在这里插入图片描述
在这里插入图片描述


(三)修改A的坐标系

A的话只有一个旋转关节,这个坐标系跟上面B的坐标系旋转方法一样,移动关节不需要改,因为z轴本来就是沿着轴向的。
在这里插入图片描述
在这里插入图片描述


(四)修改C的坐标系

C的话又不一样了,因为C是个方块,他与A是滑动连接,与B要转动连接,我们回头看看C的预览
在这里插入图片描述
X轴长度是10,我们其实是想沿着C的x轴方向滑动的,那么怎么转呢?提问三秒钟。

显然,绕着Y轴转90度就可以了。

然后C还要绕着B来转,其实是想让它绕着自己的y轴转,怎么转呢?又是提问三秒钟。

这里绕着x轴旋转90度就行了。

不能理解请回头看这句话:

Multibody中所有的旋转关节转轴都是沿着Z轴的,滑动关节都是沿着Z轴的。所以,连接处的坐标系必须进行旋转,转完后新的z轴要沿着想要的转动方向或滑动方向

图示如下:
在这里插入图片描述
在这里插入图片描述


三. 装配(连接坐标系)

经过刚才的步骤,我们把所有的坐标系都建立起来了,现在可以连接了。连接是通过关节来连接的,拖进来三个Revolute Joint和一个Prismatic Joint,然后依次连接起来。这一步是最爽的了哈哈,超级简单。
在这里插入图片描述
双击Rdb关节,把初始角度改成30度
在这里插入图片描述
运行一下,效果就出来了
在这里插入图片描述
我们的安装方向是竖着装的,此时还没有设置任何外部力与内部力,所以在重力的作用下系统会乱动,像下面这样子
在这里插入图片描述


四. 施加驱动力和增加传感器

下面我们怎么驱动力与传感器。我们把力施加在D和B连接的关节上,输出B和A连接关节的角度和速度

双击Rdb,增加外部驱动力,把初始角度改成150度,通过PS-Simulink Conveter连到输入模块,命名T
在这里插入图片描述

双击Rda,增加传感器,通过PS-Simulink Conveter连到输出模块,命名q,w
在这里插入图片描述
然后把整个模块框选起来,右键创建子系统。成了下面这样子
在这里插入图片描述


五. 设计控制器

本文的控制器直接把Matlab官方的控制器拿过来了,设计的还挺巧妙的。我自己直接加的一个PID控制器稳定性不好,可能有什么动力学因素在里面。
在这里插入图片描述
这个PD控制器里面还比较复杂,感兴趣的可以点进去看一看,如何设计好控制器就是我们仿真的终极目标了,当然就会是重难点部分,我们的目标是熟悉整个流程,就不对控制器详解了。

Aim Reference是输入信号,控制的是两个量,位置和速度。参考信号是下面这样子的
在这里插入图片描述


六. 仿真分析

点击运行,看看系统的跟随效果
在这里插入图片描述
看看示波器的曲线,位置控制效果很棒
在这里插入图片描述


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 本文讨论了在dva中引入antd组件table时没有显示样式的问题。提供了.roadhogrc文件的配置,包括环境和import的设置。同时介绍了extraBabelPlugins和transform-runtime的使用方法,并解释了libraryName和css的含义。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
author-avatar
垚垚8858
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有