文章目录

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

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

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

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

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

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

第五步,设计控制器。

第六步,仿真分析。

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

一. 建立和封装零件

这个例子中包含四个构件,摇杆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是输入信号,控制的是两个量,位置和速度。参考信号是下面这样子的

六. 仿真分析

点击运行,看看系统的跟随效果

看看示波器的曲线,位置控制效果很棒

Simscape Multiby学习笔记7——Multibody仿真实例2双曲柄瞄准系统相关推荐

  1. Simscape Multiby学习笔记5——在Multibody中建立控制器-驱动力-传感器

    文章目录 一. 给关节施加力和建立传感器 二. 加入PID控制器 三.观察运行结果 四. 给零件施加外部力 一. 给关节施加力和建立传感器 建立完模型之后,我们最想要做的就是模拟系统在受力情况下是怎么 ...

  2. activiti7关联mysql_学习笔记:一个MySQL实例有多个Activiti数据库问题

    学习笔记:一个MySQL实例有多个Activiti数据库问题 使用SpringBoot + activiti6 搭建审批流项目,数据库使用的是MySQL.且我的数据库下存在多个activiti相关的数 ...

  3. HFSS学习笔记——Vivaldi天线仿真(一)

    HFSS学习笔记--Vivaldi天线仿真(一) Vivaldi天线简介 Vivaldi 天线是一种行波天线,具有端射特性,其导体贴片上开有渐变.非周期性的开槽.其上电流沿槽线分布,不同的工作频率对应 ...

  4. python创建实例属性_Python学习笔记__6.5章 实例属性和类属性

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 1.1.实例绑定属性 class Student(object): def __init__(self, name): self.name ...

  5. CV学习笔记-BP神经网络训练实例(含详细计算过程与公式推导)

    BP神经网络训练实例 1. BP神经网络 关于BP神经网络在我的上一篇博客<CV学习笔记-推理和训练>中已有介绍,在此不做赘述.本篇中涉及的一些关于BP神经网络的概念与基础知识均在< ...

  6. Zemax学习笔记(11) - 变焦镜头设计实例

    Zemax学习笔记(11) - 变焦镜头设计实例 1.概述 2.设计 2.1设计要求 2.2 设计过程 2.3 变焦镜头的优化设置 3. 总结 1.概述 成像镜头包括定焦镜头和变焦镜头,我们在日常生活 ...

  7. Android学习笔记 2.5.3 实例——使用SimpleAdapter创建ListView 2.5.4 自动完成文本框(AutoCompleteTextView)的功能与用法

    Android学习笔记 疯狂Android讲义 文章目录 Android学习笔记 疯狂Android讲义 第2章 Android 应用的界面编程 2.5 第4组 UI组件:AdapterView及其子 ...

  8. 【学习笔记】mysql多实例安装

    mysql多实例安装(笔记) 安装环境:CentOS最小化的系统 已经编译安装了mysql 先停止mysql服务 killall -9 mysql 创建一个/data目录 再创建一个端口号的文件夹(想 ...

  9. 【Spring】Spring学习笔记-01-入门级实例

    听说当前Spring框架很流行,我也准备好好学学Spring开发,并将学习的过程和大家分享,希望能对志同道合的同学有所帮助. 以下是我学习Spring的第一个样例. 1.Spring开发环境的搭建 我 ...

最新文章

  1. 写了一个puppet web 管理界面,打算开源
  2. 如何在Oracle11中配置st_shapelib
  3. hibernate插入数据测试无异常,但数据库没有数据
  4. 怎么修改CSDN上传图片水印的字体大小?(去水印)
  5. 如何在android中设置背景,如何在Android中以编程方式设置背景可绘制
  6. TFS(Team Foundation Server)介绍和入门
  7. 存储过程排版工具_我的绘图工具箱
  8. java实现删除指定指定目录下面指定某种类型的文件
  9. iOS VIPER架构(三)
  10. Python 中的反转字符串:reversed()、切片等
  11. 在保护继承中基类的共有成员_c++中的继承
  12. C++循环的内存释放问题?
  13. 企业应用开发(1)--软件学院OJ系统需求分析与原型图设计
  14. shell 传递参数
  15. mysql如何导入mdl文件_将sql文件导入PowerDesigner中的方法(将oracle sql文件转换成mysql)...
  16. 基于opencv的手指静脉识别(附源码)
  17. JTT808、JTT809、JTT796、JTT794、JTT1077、JTT1078区别与交通部道路运输车辆卫星定位系统部标标准大全下载地址...
  18. 三代测序数据自纠错技术 和 二代测序数据对三代测序数据纠错的技术。
  19. 【转】如何设置服务器网卡千兆变万兆
  20. Comparator.comparing排序的坑

热门文章

  1. 遗传算法(Python) #5 用DEAP框架解决OneMax问题
  2. Charles 乱码问题解决
  3. 安卓版炉石修改服务器,越南玩家自制炉石传说安卓版客户端 可能公开移植方法...
  4. Python学习笔记——speech智能语音模块
  5. T144基于51单片机简易上下限液位报警器Proteus设计、keil程序、c语言、源码
  6. [51Nod1371]填数字(DP)
  7. 用微信小程序开店之一——如何申请个人开发号
  8. PHP人才招聘网站源码
  9. Java学习笔记:redis入门
  10. 清剿流氓软件 八大绝技