如何限制 OpenModelica 方程部分的值?

How to cap values in equation section in OpenModelica?

我正在 OpenModelica 中开发无人机模拟。在方程块中,我正在计算速度和位置向量,但我想将速度限制在某个值。这是我的无人机块的简化示例。

block drone

 parameter Real mass =  0.985;
 constant Real g = 9.8;
 constant Real maxSpeed = 15.0;

 Input Real Fx,Fy,Fz;

 Real x,y,z;
 Real vX,vY,vZ;

equation
 der(vX) = Fx / mass;
 der(vY) = Fy / mass;
 der(vZ) = Fz / (mass*g);

 der(x) = vX;
 der(y) = vY;
 der(z) = vZ;

end drone;

编辑: 只有当无人机的速度超过 maxSpeed 值时,示例中的速度矢量才必须被限制

由于您在力 F、加速度 der(v)、速度 v 和位置 x 之间具有正确的物理关系,因此我不会在那里进行任何更改。

你可以这样想:

der(vZ) = if vZ >-1 then Fz / (mass*g) else 0;

结果应该是这样的:

但我认为添加某种摩擦模型会更好,可能是这样的:

 der(vZ) = (Fz-vZ*3) / (mass*g);

其中 3 是线性摩擦系数(选择得到一个漂亮的图)。请注意,以上是非常基本的,应该进行相当多的改进 - 目的只是提供一个想法。
结果: