主要内容

在 MATLAB 中对刚体进行建模

此示例展示了如何使用 Simscape Multibody 的 MATLAB 类来创建刚体。在此示例中,您将构造四杆系统中的连杆,并定义该连杆的几何形状、质量分布和视觉属性。然后,您将向该连杆添加坐标系和连接器,以便用于连接其他坐标系和组件。

该连杆的横截面为矩形,两端为圆角,并且连杆两端有两个坐标系连接器。

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

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

首先,创建一个 simscape.multibody.RigidBody 对象来表示连杆。RigidBody 对象是一个分层容器,可以包含多个刚性连接的坐标系和组件对象。在此示例中,RigidBody 对象包含一个带有两个端部坐标系连接器的刚体。

要创建名为 link 的 RigidBody 对象,请使用 simscape.multibody.RigidBody 类。

link = RigidBody
link = 
  RigidBody:

  No connectors.

  Frames:

  Frame        Parent  Source  Connector?
  ___________  ______  ______  __________

  "reference"  --      --      No        

  No components.

  RigidBody with properties:

         FrameNames: "reference"
     ComponentNames: [0×1 string]
        DoVisualize: 1
    FrameConnectors: [0×1 string]

该对象包含一个参考坐标系,但没有连接器。

构造连杆体

要构造连杆体,请使用 simscape.multibody.Solid 类。您可以指定连杆体的几何形状、质量分布和视觉属性。如图所示,连杆长 10 cm,宽 2 cm,高 1 cm,长度方向沿局部参考坐标系的 x 轴。

要定义尺寸,请使用 simscape.Value 对象。

length = Value(10,"cm");
width = Value(2,"cm");
height = Value(1,"cm");

该连杆的横截面为矩形,两端为圆角。要定义连杆体的几何形状,请使用 simscape.multibody.GeneralExtrusion 类,并使用 roundedRect 函数指定自定义横截面。

geometry = GeneralExtrusion(roundedRect(length,width),height);
function cross_section = roundedRect(length,width)
    angles = (-90:10:+90)' * pi/180;
    semi = width/2 * [cos(angles) sin(angles)] + repmat([length/2 0], size(angles));
    cross_section = [semi; -semi];
end

此示例使用硬编码值将连杆的宽度和高度分别设置为 2 cm 和 1 cm。

连杆由铝制成,颜色为蓝色。要指定连杆的质量分布和颜色,请使用 simscape.multibody.UniformDensitysimscape.multibody.SimpleVisualProperties 类。

mass = UniformDensity(Value(2700,"kg/m^3"));
color = SimpleVisualProperties([0 0 1]);
body = Solid(geometry,mass,color);

要将连杆体添加到 link 对象的参考坐标系中,请使用 addComponent 方法。

addComponent(link,"Body","reference",body);

添加坐标系和连接器

接下来,向 RigidBody 对象添加坐标系和连接器。RigidBody 对象使用坐标系连接器连接到其他坐标系或组件。

link 对象有一个位于连杆体质心的参考坐标系,该坐标系是其树状结构的根。向 link 对象添加新坐标系时,必须使用 simscape.multibody.RigidTransform 类相对于参考坐标系对其进行定位。请确保每个坐标系都具有唯一名称。

使用 addFrame 方法向连杆的两端各添加一个坐标系,并将这两个坐标系命名为 neg_endpos_end。连杆的轴沿局部参考坐标系的 x 轴方向。

offset = length/2;
addFrame(link,"neg_end","reference",RigidTransform(StandardAxisTranslation(offset, Axis.NegX)));
addFrame(link,"pos_end","reference",RigidTransform(StandardAxisTranslation(offset, Axis.PosX)));

要连接到其他坐标系或组件,这些坐标系必须充当坐标系连接器。但是,新创建的 RigidBody 对象最初没有连接器。要将坐标系作为坐标系连接器公开,请使用 addConnector 方法。

addConnector(link,"neg_end");
addConnector(link,"pos_end");

要查看 link 对象的结构树,请使用 plotStructure 方法。

plotStructure(link);

Figure contains an axes object. The axes object contains 5 objects of type line, graphplot. One or more of the lines displays its values using only markers These objects represent Frame, Solid, Rigid Transform, Connection.

上图显示 link 对象具有一个实体和三个坐标系。

另请参阅

|

主题