在 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.UniformDensity 和 simscape.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_end 和 pos_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);

上图显示 link 对象具有一个实体和三个坐标系。
另请参阅
simscape.multibody.Solid | simscape.multibody.RigidBody