1

我对 Modelica 很陌生,几个月前因为我一直在做的一个项目才开始。主要使用标准 Modelica 发行版中包含的 MultiBody 库来处理多体机械系统。

我需要根据模拟期间动态计算的坐标更改身体位置,但我找不到这样做的方法。

这是计算给定系统质心位置的向量变量:

Modelica.SIunits.Length CMG[2];

CMG[1] = ... + cos(part3rotation.angles[3]) ... + part3origin[1] ...;
CMG[2] = ...;

我想在坐标 (CMG[1], CMG[2]) 处放置一个无质量体 (FixedShape),作为在模拟过程中显示质心及其运动的一种方式。

有没有办法做到这一点?

我试图将正文附加到固定的翻译组件,但它需要一个参数 (PARAM) 而不是变量 (VAR),这会导致错误。

使用的软件:Modelica 3.2.2 和 Wolfram SystemModeler 5.0。

4

3 回答 3

1

我会Modelica.Mechanics.MultiBody.Interfaces.Frame_b在你的身体上添加一个框架,然后添加以下方程式(取自 FixedTranslation):

frame_b.r_0 = your_three_d_vector;
frame_b.R = frame_a.R; // or some other orientation

/* Force and torque balance */
zeros(3) = frame_a.f + frame_b.f; // and maybe some other forces in your system
zeros(3) = frame_a.t + frame_b.t + cross(r, frame_b.f); // and maybe some other torques and forces in your system

为了在 Modelica 中添加额外的连接器,我们不仅要考虑潜在变量(在本例中为位置和方向),还要考虑流动变量(力和扭矩)。

于 2017-09-20T10:55:00.733 回答
0

解决方案是修改 FixedTranslation 类以包含新输入:

input Modelica.SIunits.Position xyz[3];

并修改方程:

frame_b.r_0 = frame_a.r_0 + xyz;

将 CMG 向量连接到类的 xyz 向量就可以了。

于 2017-09-20T12:39:13.870 回答
0

我想你计算整个系统的质心相对于惯性系统的位置。然后你可以在你的类中完全省略frame_a,因此没有必要总是frame_a明确地连接到world.frame_b显然已经过时的连接。

请务必使用Connections.root(frame_b.R)而不是Connections.branch(frame_a.R, frame_b.R)最初定义的FixedTranslation.

还有一条评论。建议直接使用向量而不是位置向量分量,并使用 from 函数Modelica.Mechanics.MultiBody.Frames进行向量变换。

于 2017-09-26T11:42:35.050 回答