Modelica 多体库中 body 位置坐标的动态变化

Dynamic change of coordinates for body position in Modelica MultiBody Library

我是 Modelica 的新手,几个月前刚开始,因为我一直在做一个项目。主要使用标准 Modelica 发行版中包含的 MultiBody 库处理多 body 机械系统。

我需要根据模拟时动态计算的坐标改变一个body位置,但是我找不到办法。

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

Modelica.SIunits.Length CMG[2];

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

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

有什么办法吗?

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

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

我会在你的正文中添加一个框架 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 中添加额外的连接器,我们不仅要考虑潜在变量(在本例中为位置和方向),还要考虑流量变量(力和扭矩)。

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

input Modelica.SIunits.Position xyz[3];

并修改方程式:

frame_b.r_0 = frame_a.r_0 + xyz;

将 CMG 向量连接到 class 的 xyz 向量就成功了。

我假设你计算了整个系统相对于惯性系统的质心位置。然后,您可以在 class 中完全省略 frame_a,因此不必总是将 frame_a 显式连接到 world.frame_b,这显然已经过时了。

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

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