如何限制 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
是线性摩擦系数(选择得到一个漂亮的图)。请注意,以上是非常基本的,应该进行相当多的改进 - 目的只是提供一个想法。
结果:
我正在 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
是线性摩擦系数(选择得到一个漂亮的图)。请注意,以上是非常基本的,应该进行相当多的改进 - 目的只是提供一个想法。
结果: