我对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。
答案 0 :(得分: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中添加额外的连接器,我们不仅要考虑潜在的变量(在这种情况下,位置和方向),还要考虑流量变量(力和力矩)。
答案 1 :(得分:0)
解决方案是修改FixedTranslation类以包含新输入:
input Modelica.SIunits.Position xyz[3];
并修改方程式:
frame_b.r_0 = frame_a.r_0 + xyz;
将CMG向量连接到类的xyz向量就可以了。
答案 2 :(得分:0)
我想你计算整个系统的质心相对于惯性系统的位置。然后,您可以在班级中完全省略frame_a
,因此没有必要始终将frame_a
明确地与world.frame_b
明确地过时联系。{/ p>
只能确保使用Connections.root(frame_b.R)
代替Connections.branch(frame_a.R, frame_b.R)
中最初定义的FixedTranslation
。
还有一条评论。建议直接使用向量而不是位置向量组件,并使用Modelica.Mechanics.MultiBody.Frames
中的函数进行向量转换。