主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

在 MATLAB 中对多体系统进行建模

R2026a

此示例展示如何使用 Simscape Multibody 的 MATLAB 类来对四杆系统进行建模。在此示例中,您将创建一个曲柄摇杆机构,它有四个连杆,长度分别为 5 cm、8 cm、10 cm 和 12 cm。

为了避免键入相关类的命名空间名称,请使用 import 函数。

import simscape.Value simscape.op.* simscape.multibody.*;

创建四杆系统

首先,创建一个 simscape.multibody.Multibody 对象来表示四杆系统,并将该对象命名为 fb。Multibody 对象是一个分层容器,其中包含任何类型的组件对象。每个组件对象都表示多体系统的一个部件或子系统。

fb = Multibody
fb = 
  Multibody:

  No connectors.

  No components.

  No connections.

  Multibody with properties:

     ComponentNames: [0×1 string]
            Gravity: [0 0 -9.8066] (m/s^2)
        DoVisualize: 1
    FrameConnectors: [0×1 string]

该对象为空,并且没有连接器。

接下来,创建四杆系统的连杆和关节。四杆系统的每个连杆都是一个刚体,具有两个端部坐标系连接器和一个位于实体质心的参考坐标系。

要构造连杆,请使用辅助函数 link。前两个参量定义连杆的长度和颜色,第三个参量定义是否向局部参考坐标系添加连接器。如果第三个参量为 true,则连杆的参考坐标系将成为一个可以连接到其他坐标系或组件的坐标系连接器。该函数使用硬编码值将连杆的宽度和高度分别设置为 2 cm 和 1 cm。有关在 MATLAB 中构造连杆的详细说明,请参阅在 MATLAB 中对刚体进行建模。

首先,根据图示指定每个连杆的长度和颜色。使用 simscape.Value 对象和三元素 [R G B] 向量来定义每个连杆的长度和颜色。

bottomLength = Value(12,"cm");
topLength = Value(10,"cm");
leftLength = Value(5,"cm");
rightLength = Value(8,"cm");
bottomColor = [0 0 .8];
topColor = [1 .8 0];
leftColor = [.8 0 0];
rightColor = [0 .8 0];

打开模型并使用辅助函数 link 以及指定的连杆长度和颜色。由于四杆系统中底部连杆的参考坐标系连接到世界坐标系,因此该参考坐标系必须是坐标系连接器。要将底部连杆的参考坐标系作为坐标系连接器公开,请将底部连杆的第三个参量设置为 true。

Bottom_Link = link(bottomLength,bottomColor,true);
Top_Link = link(topLength,topColor,false);
Left_Link = link(leftLength,leftColor,false);
Right_Link = link(rightLength,rightColor,false);

使用 addComponent 方法将创建的连杆添加到四杆系统中。

addComponent(fb,"Bottom_Link",Bottom_Link);
addComponent(fb,"Top_Link",Top_Link);
addComponent(fb,"Left_Link",Left_Link);
addComponent(fb,"Right_Link",Right_Link);

使用 addComponent 方法将世界坐标系添加到四杆系统中,并使用 connect 方法将底部连杆的参考坐标系连接到世界坐标系。

addComponent(fb,"World",WorldFrame);
connect(fb,"World/W","Bottom_Link/reference");

要将连杆装配成四杆机构,需要使用四个转动关节。要创建这些关节,请使用 simscape.multibody.RevoluteJoint 类。根据关节的位置命名关节,并使用 addComponent 方法将它们添加到四杆系统中。

joint = RevoluteJoint;
addComponent(fb,"Bottom_Right_Joint",joint);
addComponent(fb,"Top_Left_Joint",joint);
addComponent(fb,"Top_Right_Joint",joint);
addComponent(fb,"Bottom_Left_Joint",joint);

通过 connectVia 方法,使用转动关节连接连杆。

connectVia(fb,"Bottom_Left_Joint","Bottom_Link/neg_end","Left_Link/neg_end");
connectVia(fb,"Bottom_Right_Joint","Bottom_Link/pos_end","Right_Link/neg_end");
connectVia(fb,"Top_Left_Joint","Top_Link/neg_end","Left_Link/pos_end");
connectVia(fb,"Top_Right_Joint","Top_Link/pos_end","Right_Link/pos_end");

默认情况下,重力方向与世界坐标系的负 z 方向一致。在此示例中,四杆系统在世界坐标系的 X-Y 平面上运动,因此重力方向必须与负 y 方向一致。重新调整四杆系统的重力方向。

fb.Gravity = circshift(fb.Gravity,-1);

要设置四杆系统的初始配置,请为关节基元指定一个目标。例如,您可以使用 simscape.op.OperatingPoint 对象和 simscape.op.Target 将左下关节的关节基元目标设置为 60 度。

JointOP = OperatingPoint;
JointOP("Bottom_Left_Joint/Rz/q") = Target(60,"deg","High")
JointOP = 
  OperatingPoint with children:

  OperatingPoints:

   ChildId              Size
   ___________________  ____

   'Bottom_Left_Joint'   1x1

在设置关节基元的目标时,您可以使用 方法来显示 Multibody 对象中基元的路径。

检查系统的组件和结构。

fb
fb = 
  Multibody:

  No connectors.

  Components:

  Name                  Type          
  ____________________  ______________

  "Bottom_Left_Joint"   Revolute Joint
  "Bottom_Link"         Rigid Body    
  "Bottom_Right_Joint"  Revolute Joint
  "Left_Link"           Rigid Body    
  "Right_Link"          Rigid Body    
  "Top_Left_Joint"      Revolute Joint
  "Top_Link"            Rigid Body    
  "Top_Right_Joint"     Revolute Joint
  "World"               World Frame   

  Connections:

  Connector 1              Connector 2           
  _______________________  ______________________

  "Bottom_Left_Joint/B"    "Bottom_Link/neg_end" 
  "Bottom_Left_Joint/F"    "Left_Link/neg_end"   
  "Bottom_Link/pos_end"    "Bottom_Right_Joint/B"
  "Bottom_Link/reference"  "World/W"             
  "Bottom_Right_Joint/F"   "Right_Link/neg_end"  
  "Left_Link/pos_end"      "Top_Left_Joint/F"    
  "Right_Link/pos_end"     "Top_Right_Joint/F"   
  "Top_Left_Joint/B"       "Top_Link/neg_end"    
  "Top_Link/pos_end"       "Top_Right_Joint/B"   

  Multibody with properties:

     ComponentNames: [9×1 string]
            Gravity: [0 -9.8066 0] (m/s^2)
        DoVisualize: 1
    FrameConnectors: [0×1 string]

创建 Simulink 模型

要充分利用 Simscape Multibody 的功能(包括对多体系统进行仿真的功能),请使用 makeBlockDiagram 方法从 fb 对象创建 Simulink 模型。

当您在 MATLAB 中构造多体系统时,Simscape Multibody 会使用不同的方法来指定关节基元的状态。fb 对象不是通过关节模块中的关节目标来指定状态,而是使用 simscape.op.OperatingPoint 对象 JointOP 来定义关节基元的状态目标。因此,要从 fb 对象创建 Simulink 模型,makeBlockDiagram 方法需要 JointOP 和 fb 对象。makeBlockDiagram 方法使用 JointOP 对象中的数据来填充生成的 Simulink 模型中关节模块的关节目标参数。

makeBlockDiagram(fb,JointOP,"FourBar")

您可以像修改任何 Simulink 模型一样修改 FourBar 模型。但是,最佳做法是避免在 FourBar 模型中进行那些也可以在 fb 对象中进行的更改。更好的做法是更改生成 fb 对象的代码,重新生成该对象,然后创建一个新的 Simulink 模型。这种方法可确保代码仍然是模型的主要来源。

另请参阅

| |

主题